Skip to content

Composite Tables: Combining Your Data

A composite table joins and rolls up your synced sources into a single, governed table that your extensions and the AI can read. This article covers creating one and keeping it healthy.

Open Integrations Hub → Composite tables. The panel explains it in one line: “Join and roll up your synced sources into the tables extensions read.” The list shows each table’s Name, how many Sources it draws from, and when it was last Updated. Use + Add composite table to create one.

The Composite tables tab listing each table with its sources and last update

A composite draws from one or more sources — a table published by an integration, for example a Google Sheets worksheet, or another composite you’ve already built — and produces a clean set of rows.

Click + Add composite table. The editor has four tabs — Columns, Computed rows, Activity, and Settings. Start on Settings:

  1. Set the Id — a kebab-case slug like projects-with-revenue. This is the table’s permanent identifier. Until you enter one, the editor shows “This table needs an id.”.
  2. Give it a Name and an optional Description.
  3. Choose a Rebuild setting. “As soon as a source row changes (recommended)” recomputes the table automatically whenever a source updates.
  4. Click Create composite. This returns you to the list, so reopen the table you just made to keep building. Its sources and columns are on the Columns tab.

On the Columns tab, the Sources panel on the left is where you choose what to combine. Click + Add source for each table you want to join. Each source shows where it comes from — for example, google-sheets · worksheet.

A composite table’s Columns tab, showing its sources and the output columns

How rows line up has two modes. In the default, “Rows are identified by”“Every source row becomes one output row. Rows sharing these values collapse into one — pick them with the key toggle on each column.” — you set the grain by flipping the Key toggle on the output columns that identify a row. When you join multiple sources, the grain is instead set by “Joined on”, above the Sources panel, and the Key toggle won’t change it. Leave it one row per source row, or dedupe on a key like an item number.

Choosing a join type. When a composite draws on more than one source, you pick how they combine — and this decides which rows survive:

Join What it keeps
inner Only rows found in every source.
left The first source decides which rows exist; columns from the others come through empty when there’s no match.
full outer A row found in any source is kept.

The Output columns table is the shape of your composite. Click + Add column for each column you want to expose. Each row has:

Field What it does
Key Toggle on if this column helps identify a row. It becomes part of the dedupe key.
Column The name this column has in the composite.
How it is filled One of three: Copy from source (take a source field’s value), Roll up (aggregate matching rows — add up, count, count distinct, smallest, largest, average, or join together), or Formula (compute a value from an expression).
From / Value Which source the value comes from, and which field.

The Computed rows tab shows “what this table is returning right now, so you can see what it built before an extension reads it. Read-only.” It shows when the table was last computed, a Compact / Full text toggle, and a search box, and it previews the rows. The header shows the real row count, and for very large tables you’ll see a note to “refine upstream or scope the source.”

A composite table’s Computed rows tab, showing the read-only preview of results

  • Save changes whenever you edit the definition.
  • Recompute… rebuilds the rows on demand — handy after a change if you don’t want to wait for the automatic rebuild.
  • The Activity tab is more than history. It shows a dependency tree (what feeds this table and what reads it), the rows it’s dropping, an errors count, and the recompute history — so when something’s off, it usually tells you exactly what.
  • Delete this table removes the composite; Cancel discards unsaved edits.

A composite table’s Activity tab, showing its recompute history and any dropped rows

Solutions: the editor names the missing piece. Work through whichever it reports.

  • “Add at least one source.” — nothing has been chosen to combine yet.
  • “Add at least one output column — check a field in the Sources panel.” — sources are chosen but no column is selected for output.
  • “Add the key column as an output column so this table has a row key.” — your key is not among the output columns, so rows would have nothing to identify them.
  • “This table needs an id.” — the table has no identifier yet.

Solutions:

  • Changing the key discards every computed row and the table reads empty until the rebuild finishes. Wait for it rather than changing anything else.
  • Check the preview to confirm the table is returning what you expect once the rebuild completes.

The numbers changed and nothing looks different

Section titled “The numbers changed and nothing looks different”

Solutions:

  • This is the dangerous case. Changing what a source lines up on changes every roll-up over it, and the grid gives no visual sign. If a total moved unexpectedly, check whether a key or a join was edited.
  • Compare against the preview, which shows what the table is returning right now rather than what you expect it to return.

Solutions:

  • Use “Field not listed? Add by name” to name it directly.
  • If the field is new in the source system, the integration may not have synced it yet — check its synced data first.