Build a pivot table from Airtable data in Google Sheets

Building an Airtable pivot table in Google Sheets is free and survives every sync, if you keep it on its own tab and know which columns split your totals.

Title card for the post, showing an Airtable table panel connected by a downward arrow to a Google Sheets panel on a dark background

Someone asks for the same thing every month. Hours by account manager. Spend by client. Deals by stage and owner. The data all sits in Airtable, and Airtable will show it to you on screen, but a screenshot is not a report you send to a finance director.

So you sync the table into Google Sheets and reach for a pivot table, because that is the tool you already know how to drive. Then the sync runs again and the pivot is empty, or wrong, or pointing at a range that no longer exists.

Two things go wrong here. The first is structural and takes one setting to avoid. The second is about which Airtable columns can be grouped on at all, and that part is barely written down anywhere.

The short answer

Sync the Airtable table to one tab. Put the pivot table on a different tab. Point it at whole columns rather than a fixed block of rows. Never type anything on the synced tab.

Then check your grouping column before you trust the totals. Single select, checkbox, date and collaborator columns group cleanly. Multiple select and linked record columns arrive as one comma-joined string per record, so the same two tags in a different order become two different groups, and your counts split with no warning at all.

What Airtable's own pivot gives you, and what it costs

Airtable has two of these: the pivot table extension, and a pivot table element inside an interface dashboard. Both are paid features. Airtable's documentation lists extensions as available on "All paid plans", and says that when an account drops to Free the extensions are disabled and removed from view. The interface version carries its own note: it "is only available for paid plan workspaces in the desktop interface experience".

The extension has one more limit worth checking first. Airtable states that it does not support exporting or printing pivot table extensions, and suggests taking a screenshot instead. So the number lives on screen, inside Airtable, behind a login, for people who have a seat.

The Google Sheets pivot table costs nothing, works in any Google account, prints, exports to PDF, and can be read by someone who has never heard of Airtable. For a monthly report that leaves the building, that is not a close comparison. Airtable's version does have one feature Sheets lacks, which gets its own section at the end.

Build the pivot on its own tab, pointed at whole columns

A scheduled sync does not politely edit the cells that changed. It clears the tab and writes the current state of the Airtable table back into it, and the row count moves every time records are added or deleted. Anything built inside that tab is gone at the next run. Anything anchored to a fixed range such as A1:H240 now measures the wrong rows, and it keeps producing a number, which is the dangerous part.

Two rules remove the problem.

The synced tab holds the sync and nothing else. No notes column on the right, no total row at the bottom, no pivot, no manual sort. This is the two-tab pattern from Airtable to Google Sheets for reporting, and a pivot table is one more thing that lives on tab two.

Point the pivot at whole columns. When you create it, Sheets fills the data range from whatever you had selected, which will be a fixed block. Replace it. If the synced tab is called Airtable and the data runs out to column N, the range is 'Airtable'!A:N. A sync that grows the table from 240 rows to 3,000 changes nothing about that reference, and neither does one that shrinks it.

To build it: click any cell on the synced tab, then Insert, then Pivot table, and choose the new sheet option. In the editor panel on the right, edit the data range into the whole-column form, then add fields under Rows, Columns, Values and Filters.

One side effect. Whole-column ranges take in the empty rows below your data, which show up as a blank group at the bottom. Add your grouping column under Filters and clear the blank entry from its list.

The columns that quietly split your totals

A Google Sheets cell holds one value. An Airtable multiple select field holds several. What gives is that the values arrive joined into a single string with commas between them.

That is fine to read and fatal to group on. A pivot treats every distinct string as its own group. A record tagged Design and Urgent lands in a group called "Design, Urgent". A record tagged Urgent and Design lands in "Urgent, Design". Same two tags, two separate rows, and the real count for Urgent is now scattered across however many combinations exist in the table. Nothing turns red. Nothing errors. The report is just wrong, and it looks exactly as convincing as a right one.

Two pivot results side by side. On the left, in red, three records that all carry the Urgent tag produce three separate one-record groups because the tag combinations differ. On the right, in green, a helper column reduces each record to Urgent or Not urgent, and the pivot shows a single Urgent group with three records.

Linked record columns behave the same way, plus one more problem. What lands in the cell is the primary field text of each linked record, so two different clients both called Acme collapse into one group, and renaming a project in Airtable changes its group label at the next sync.

Three ways out, in rising order of effort.

Add a helper column on a prepared tab. Give yourself a third tab that reads the synced tab and adds the columns you need. One column per tag you report on, filled down with a single formula so it stretches as the record count changes: =ARRAYFORMULA(IF('Airtable'!F2:F="","",IF(ISNUMBER(SEARCH("Urgent",'Airtable'!F2:F)),"Urgent","Not urgent"))). Pivot the prepared tab. Good for two or three tags, bad for twenty.

Count the tag without a pivot at all. If the question is only "how many records are tagged Urgent", =COUNTIF('Airtable'!F:F,"*Urgent*") answers it in one cell and never breaks. Watch for tags that contain each other: a count of Design also picks up Design QA.

Change the shape of the data in Airtable. If a record can only carry one status, one owner or one category, make that field a single select and the problem goes away at the source. Where records really do carry several tags, the structural answer is a linked table with one row per record-and-tag pair, synced as its own view.

Which columns make good pivot dimensions

Two lists side by side. The left, in green, shows columns that group cleanly: a single-choice status, a tick box, the person a record belongs to, a date, and a number or amount. The right, in red, shows columns that break totals: multi-tag columns, links to other records, looked-up values, rollups that are already totals, and file attachments.

Here is what arrives in the cell, using Airtable to Sheets. Other tools flatten these differently, but the comma-joining problem is common to all of them, because a cell holds one value no matter who writes it.

Airtable column What lands in the cell Use it as a pivot dimension?
Single select The choice, as text Yes. The best dimension you have
Checkbox A real tick box Yes. Clean two-way split
Collaborator Name and email address Yes
Date A date Yes, and it groups by month or quarter
Number, currency, percent A real number, formatted Yes, in the Values area
Rating Star characters, not a number No. It cannot be totalled
Duration Hours, minutes and seconds Check it before totalling
Multiple select The tags, joined with commas No. It splits
Linked records The linked names, joined with commas No. It splits
Lookup The looked-up values, joined No
Rollup A number that is already a total Show it, do not add it up
Attachment Filename and a link that expires No

Two rows need a sentence of their own.

Rollups and lookups are frozen at sync time. Correct as of the moment the sync ran, fine to display. Adding them up is where it goes wrong: a rollup is already an aggregate, so SUM totals a column of totals. If three projects each roll up the same shared cost, you have counted it three times.

Durations and ratings look numeric and are not. A rating arrives drawn as stars, which cannot be averaged. Before dropping a duration into Values, check the alignment: right-aligned means Sheets is holding a number, left-aligned means text, and text sums to zero. Which Airtable columns survive the trip covers every field type on this list.

Two settings that decide whether the number is right

Grouping dates by month or quarter

Sheets does not put date grouping in the pivot editor, which is why most people never find it. Add your date column under Rows, then right-click any date value inside the pivot itself and choose Create pivot date group. You get Month, Year-Month, Quarter, Year-Quarter and Year, among others.

Month ignores the year, so January 2025 and January 2026 land in the same row. For any report crossing a year boundary, pick Year-Month or Year-Quarter.

The option only appears when the column holds real dates. If your date column sits left-aligned in its cells, Sheets is holding text, and text does not group by month. Wrap it in =DATEVALUE(...) on your prepared tab and group on that instead.

COUNTA or SUM: two different questions

Drag a column into Values and Sheets picks a default: SUM for a numeric column, COUNTA for a text one. You change it under Summarize by.

SUM adds the numbers up. COUNTA counts cells that are not empty. That gap matters more than it sounds, because COUNTA does not count records, it counts records that happen to have a value in that column. Summarize by Owner and the 40 records with no owner set drop out of the total without a trace.

If what you want is a record count, count a column that is never empty. Every tab the add-on writes carries an Airtable Record ID column in column B, hidden by default, one value per record and never blank. Unhide it, drag it into Values, set Summarize by to COUNTA, and the number is the number of records.

When to skip all of this and group it in Airtable

Airtable's pivot table extension has a toggle called "Split multiple choices", and the interface version has the same thing as "Split multiple values". Turn it on and a record carrying several tags is counted once under each tag, which is exactly what a Google Sheets pivot cannot do on its own.

So if your report is mostly counting multi-select tags, everyone reading it already has an Airtable seat, and nobody needs to print or export it, use Airtable's version. You will get the right answer faster than you will build the workaround.

Google Sheets is the better home when any of these is true:

  • Someone without an Airtable seat needs to read it
  • It has to be printed, exported to PDF, or emailed as a file
  • You want several pivots and a chart on one page
  • You want last month's numbers next to this month's
  • The account is on the Free plan, where extensions are not available at all

Common questions

Does the pivot update by itself when the sync runs? Yes, as long as it sits on its own tab and points at whole columns. A Sheets pivot recalculates whenever its source range changes, so the sync finishing is the refresh. There is nothing to press.

My pivot went blank after a sync. What happened? One of two things. Either it was built on the synced tab and the sync cleared that tab, or the data range was a fixed block of rows and the record count changed underneath it. Rebuild it on a separate tab with a whole-column range.

Can I sort or filter without breaking the sync? On the pivot tab, do whatever you like. On the synced tab, no. Every run clears it, so any sort, filter, note or extra column is lost. The add-on protects the header row there for the same reason.

Why is my multiple select column producing dozens of tiny groups? Each unique combination of tags is a different string, and a pivot groups on strings. Design plus Urgent is not the same group as Urgent plus Design. Use a helper column that reduces each record to one value.

Can I pivot two Airtable tables in one report? Yes, if each table syncs to its own tab. A pivot reads one range, so either join what you need onto one prepared tab first, or build a pivot per table and put the summaries together on a report tab.

What to do next

Get the sync landing on a tab of its own and running on a schedule so the report is current when someone opens it. Decide whether your grouping column holds one value or a comma-joined string. Then create the pivot on a new tab with a whole-column range, and leave the synced tab alone forever.

If the sync is not set up yet, how to sync Airtable to Google Sheets covers the four ways to do it. Airtable to Google Sheets for reporting is the parent job this article sits inside.