October 6, 2026
How to Sync Airtable and Google Sheets Automatically (2026, No Code)
The one-paragraph version
The reliable setup is: Airtable "Watch Records" → filter → Google Sheets "Add/Update Row", built in Make in about 20 minutes. One-way sync (Airtable → Sheets) is simple and robust; two-way sync sounds nice and causes merge conflicts, infinite loops, and duplicate rows — I've rebuilt too many of these. Unless you have a hard reason for edits in both places, sync one-way and treat one tool as the source of truth. Full walkthrough below, including the dedup trick that stops duplicate rows.
Why people sync these two
Airtable is a real database (views, linked records, forms); Sheets is where everyone already lives (finance, sharing, quick analysis). The typical pattern: operations run in Airtable, leadership wants the same data in a spreadsheet. Copy-paste breaks the day you forget once.
The setup (Make, one-way: Airtable → Sheets)
What you need: Make account (free tier works — this uses ~50–200 ops/month at typical volume), Airtable base with a view, Google Sheets with matching headers.
Step 1 — Trigger: Airtable "Watch Records".
Create a scenario. First module: Airtable → Watch Records. Connect your account, pick the base and table, and — important — pick a view that only shows new/changed records (e.g., a "Needs Sync" view filtered on a checkbox or a "last modified" window). This keeps each run cheap: it only pulls what changed.
Step 2 — Find the matching row in Sheets.
Second module: Google Sheets → Search Rows. Search by the Airtable record ID (write it into a hidden column in Sheets — this is the dedup key). If a row is found, you'll update it; if not, you'll add it.
Step 3 — Router: update or add.
Add a Router with two branches:
- Branch A (row exists): Google Sheets → Update a Row. Map each Airtable field to its column.
- Branch B (row not found): Google Sheets → Add a Row. Map fields, and write the Airtable record ID into the hidden key column.
Filter on Branch B: "row not found" (the Search Rows module returns empty). Filter on Branch A: the opposite.
Step 4 — Schedule.
Set the scenario to run every 15 minutes (free tier minimum) or use an Airtable automation/script to call a Make webhook for near-real-time sync. For most teams, 15 minutes is plenty.
Step 5 — Backfill once.
For existing records: temporarily point the view at all records, run once, then switch the view back to "changed only". Verify row counts match (Airtable record count vs Sheets rows) before you call it done.
The dedup trick, explained
The hidden Airtable-record-ID column is the whole game. Without a stable key, "is this row already synced?" is a fuzzy match on names or emails — and fuzzy matches duplicate. Record IDs are stable forever, so re-runs are idempotent: run it ten times, same result.
When one-way isn't enough (and the honest warning about two-way)
Two-way sync means changes in Sheets also flow back to Airtable. To build it, you mirror the scenario: Sheets "Watch Changes" → Airtable "Update Record". The problems:
- Infinite loops: Airtable update → Sheets update → Airtable update → ... You prevent this with a "last modified by" flag, but one missed flag and it loops forever, burning operations.
- Conflicts: edited in both places between syncs — which wins? You have to decide, and the answer is always "it depends".
- Schema drift: someone adds a column in Sheets that doesn't exist in Airtable, and the mapping breaks silently.
My recommendation: don't do two-way. Pick a source of truth. If Sheets people need to edit, give them an Airtable form or an Airtable shared view instead — same editability, zero sync logic. Two-way sync is a project, not a setup.
Verdict
Airtable → Sheets one-way sync with a record-ID dedup key: 20 minutes to build, ~100 ops/month to run, and it just works. Two-way sync: possible, but budget a day and a maintenance headache — or better, replace it with a form.
Walkthrough uses Make and Airtable as of October 2026. Module names change occasionally — search inside Make's module picker if a name doesn't match exactly.
Enjoyed this? Join the newsletter for one practical automation tip a week. No spam, no hype.