How to get a full copy of an Airtable base
Airtable has no button that exports a whole base. You can get everything out, but it takes a few steps, and each method leaves something behind.
1. Download each table as CSV
Free, about 10 minutes for a small base.
- In each table, make a new grid view with every field shown and no filters. A download only includes the fields and records visible in the view you're on.
- Open the view menu and choose Download CSV.
What you lose: field types, links between records (you get the names, not the links), and the attachments themselves. You get links to the files instead.
2. Save the attachments the same day
The attachment links in a CSV expire. Airtable keeps them working for at least 2 hours, so download the files soon after you export. (Airtable: attachment URL behavior)
3. Take a snapshot
A snapshot keeps the whole base, links and attachments included. But it lives inside Airtable. You can't download it or schedule it, and restoring one gives you a new base. It won't help if you lose access to your account. (Airtable: snapshots)
4. Pull it through the API
Complete, but it takes an afternoon to get right.
- Create a personal access token with two scopes:
data.records:readandschema.bases:read. - Read each base's tables and fields from
/v0/meta/bases/{baseId}/tables. - Page through every table's records, 100 at a time. Airtable allows 5 requests a second per base.
- Download attachments as you go, before their links expire.
- Count what you saved against what Airtable lists, table by table. A script that stops halfway still leaves you a folder of files that looks fine.
Or have it done every night
Nightcopy runs step 4 at 2am and puts the result in your own S3 or R2 bucket: CSV and JSON for every table, one SQLite file per base with links kept as links, and every attachment. Each table is counted against Airtable, and you get an email by 7am if anything doesn't match. $12 a month. We're in early access.