Airtable to Google Sheets sync script generator (free)
Fill in a short form and get a ready-to-paste Google Apps Script that copies an Airtable view into a Google Sheet and refreshes it on a timer: hourly, every 6 hours or daily. No add-on, no Zapier, no signup.
Your Apps Script
Get this emailed automatically: schedule it as CSV, Excel or PDF (Free plan, no card).
How to install it
- Create a token. Open airtable.com/create/tokens, create a personal access token with the single scope
data.records:read(the script does not read the schema, soschema.bases:readis not needed), add your base under Access, and copy the token. - Open the script editor. In the Google Sheet, choose Extensions > Apps Script.
- Paste the script. Select everything in
Code.gs, delete it, paste the generated script and save. - Add the token. Go to Project Settings (the gear), scroll to Script properties, click Add script property, name it
AIRTABLE_TOKENand paste the token as the value. - Run it once. Pick
syncAirtablein the function list and click Run. Google asks you to authorize the script. After that the sheet fills, and cell A1 gets a note with the last sync time. - Start the timer. Pick
setupTriggerand click Run. It deletes older triggers forsyncAirtableand creates the one you chose. Reload the sheet and an Airtable > Sync now menu appears for manual runs.
What the script does
- Reads the token from Script properties and calls the Airtable API with
UrlFetchApp, 100 records per request, following theoffsetvalue until the last page. - Pauses 250 ms between requests (Airtable allows about 5 per second per base). On a 429 it waits 30 seconds and retries.
- Builds the header row from your field list, or from every field name found in the records. Airtable leaves empty fields out of the response, so an empty-only column appears only if you list it. Without a list, column order follows the API response and may differ from your grid, so list the fields to fix the order.
- Flattens values: lists are joined with commas, attachments become their URLs, linked records stay record IDs (
rec...), other objects become JSON. - Clears the tab and writes everything with one
setValuescall. If you name a view, its filters and sort order apply, but fields hidden in the view are still returned unless you list the fields you want.
Limits to know about
- 6 minutes per run. Apps Script stops a run at 6 minutes, and Google also caps total trigger runtime per day (see Google's Apps Script quotas page). Each page of 100 records takes roughly a second with the pause, so tens of thousands of records are the practical ceiling. Use a narrower view for bigger tables.
- Triggers are approximate. A time-driven trigger runs near the chosen time, not on the minute. For a fixed hour, edit the
atHourvalue insetupTrigger. - One-way. Edits in the tab are overwritten on the next sync.
- Text that starts with = is stored with a leading apostrophe so Sheets does not treat it as a formula. A field name containing a comma cannot go in the list: leave the list empty and the script finds every field.
Other ways to get Airtable into Google Sheets
- Script (this page). Free and fully yours, but you maintain it, and it needs the token inside a Google project.
- Zapier, Make or Coupler.io. They run it for you with no code. Frequent or high-volume syncing needs a paid plan, and each run or task counts against the plan.
- Airtable automations. Their Google Sheets actions add or update single rows from a trigger. They are not a view-to-sheet sync.
- ViewCourier. If the goal is a recurring report rather than a live sheet, ViewCourier emails an Airtable view as CSV or Excel on a schedule. Starter and Pro also give a private live CSV link that a sheet reads with
=IMPORTDATA(). See Airtable to Google Sheets without Zapier and the Coupler.io comparison.
Want it delivered instead of synced?
ViewCourier emails any Airtable view as a CSV, Excel (.xlsx) or PDF file on a schedule (daily, weekly or monthly, in your timezone), with no scripts to maintain.
Start free (no card) Read: Airtable to Google Sheets, no Zapier
Also free: export every table to CSV in one ZIP · export a whole base to one Excel workbook · export a table or view to JSON · export the base schema as a data dictionary · count records per table vs your plan limit · print a view or save it as PDF · download all attachments as a ZIP.
FAQ
Does Airtable have a built-in sync to Google Sheets?
No. Airtable has no built-in sync that keeps a Google Sheet updated from a view. The usual routes are a script like the one this page generates, a connector service, or a live CSV link that the sheet reads with IMPORTDATA.
Is it safe to use this with my Airtable token?
This page never asks for the token. You paste it into Script properties of your own spreadsheet, and the script sends it only to api.airtable.com. Use a token with only the data.records:read scope and only the one base. Anyone who can edit the spreadsheet can open its script and read the properties, so share edit access with care.
Why does Google say the app is not verified?
Because it is your own script asking permission to call an outside service and edit your spreadsheet. On the first run, read the permission list, click Advanced and continue to the project. Nobody else gets access.
Is the sync two-way?
No. It copies Airtable into the sheet and nothing goes back. The tab is cleared and rewritten on every run, so do not type in it. Put your own formulas, charts and pivot tables on a different tab that reads from it.
Why do linked records show up as rec... codes?
The Airtable API returns a linked record as its record ID, not its name. Add a lookup field in Airtable that returns the name, then list that field in the generator.
What happens with a very large table?
Airtable returns 100 records per request and Apps Script stops a run after 6 minutes. The sheet is written only after every page has loaded, so a run that times out leaves the previous data in place. For big tables, point the script at a smaller view.