Guides · Sep 28, 2026 · 5 min read
How to export an entire Airtable base, with linked records and attachments
Airtable has no "export whole base" button. Here is what each built-in option leaves out, how the API route works, and the fastest way to get a complete copy as one zip.
If you have ever tried to take a full copy of an Airtable base out of Airtable, you know the short version: there is no button for it. What Airtable offers is a set of partial tools, each of which drops something. This guide walks through what each one keeps, what it loses, and how to get a genuinely complete export.
What "the whole base" actually means
A base is more than rows. A complete copy needs four things:
- Every table, not one at a time.
- The schema: field names, field types, and the options behind them, such as which table a linked-record field points to.
- The relationships: linked-record cells hold record ids, and those ids only mean something if the target records are in the same copy.
- The attachments as files, not as links that stop working.
Anything that gives you fewer than all four is a partial export, however it is labelled.
The built-in options and what each one drops
Download CSV. Available from any grid view's menu. It exports one table, and only the fields visible in that view. Hidden fields are not included. Linked records become the primary field text of the linked record, so two records with the same name become indistinguishable. Attachments become URLs that expire a couple of hours after the export is generated. Field types are gone entirely, since CSV has no way to express them.
Base snapshots. Airtable takes periodic snapshots of a base and lets you restore one. This is genuinely useful for undoing a bad afternoon, but a snapshot lives inside Airtable, cannot be downloaded, and disappears with your subscription. It is a restore point, not a copy.
Duplicate base. Creates another base in your workspace. Everything is preserved, which is why people reach for it, but the copy sits on the same account with the same access, so it protects you from mistakes and not from anything at the account level.
Enterprise eDiscovery and admin exports. Real whole-base exports exist on Airtable's enterprise tier. If you are on it, use them. Most teams are not.
The API route
Everything you need is available through Airtable's REST API with a personal access token that has two read-only scopes, schema.bases:read and data.records:read. A script does the following:
- Call the metadata endpoint for the base to get every table and every field, including the
linkedTableIdbehind each linked-record field. Save this as your schema. - For each table, page through the records endpoint 100 records at a time, following the
offsetcursor until it is empty. - While you still have each page in hand, look at every attachment field, and download every file right away. The URLs in the API response expire a couple of hours after they are issued, so an "I will grab the files later" plan does not work.
- Respect the rate limit of 5 requests per second per base, and pause for 30 seconds if you receive an HTTP 429.
- Write the records with their original record ids, so linked-record cells still resolve.
That is about an afternoon of work for someone comfortable with scripting, plus the ongoing job of running it, storing the output somewhere safe, and noticing when it stops working. If that is you, the read-only token guide covers the token setup.
Exporting a large base
Size changes the method more than the goal. Three things matter once a base passes a few thousand records or a few gigabytes of attachments:
- Time is set by the API, not your connection. Airtable allows 5 requests per second per base and returns 100 records per request, so 50,000 records take at least 100 seconds of record fetching. That is fine; what breaks is a script that fires requests as fast as it can and hits HTTP 429, after which Airtable asks for a 30-second pause.
- Attachments must be downloaded during the same pass. On a large base the walk through the tables takes long enough that URLs collected at the start have expired by the end. Download each file the moment its record arrives, and stream it to disk rather than holding it in memory.
- Checkpoint per table and per page. If the run fails on table 9 of 12, you want to resume from the last page cursor, not start over and spend the API budget twice. On Team plans the monthly API call quota is finite, so wasted runs are not free.
A one-off export of a large base is therefore a background job with progress, not a button that finishes while you wait. That is how Tablevault's free export runs it: the job works through the base, emails you when the zip is ready, and shows which table it is on in the meantime.
The fast route
If it is not you, Tablevault's free export tool does the steps above for one base and emails you a single zip containing:
schema.jsonwith every table, field, and link targettables/<table>.jsonwith every record and its original ids, plus a.csvof each table for spreadsheetsattachments/<table>/<record>/with every filemanifest.jsondescribing what is inside and the counts
You paste a read-only token that you create and can revoke at any time, pick a base, and confirm your email. The export runs, the zip link arrives by email, and the token you pasted is deleted afterwards. No account or password is needed.
What to do with the copy
One export is a snapshot of today. If the base matters to your business, the useful question is how old you can afford the most recent copy to be, and the answer is usually "a day". That is the point where an automated schedule earns its keep, which is what the paid side of Tablevault is for. Start with the free export, and see what a real copy of your base looks like.
Common questions
- Can I export a whole Airtable base at once?
- Not with the built-in tools on normal plans. CSV export is one table at a time and drops links and attachments, and snapshots cannot be downloaded. A complete export needs the API, or a tool that uses it for you, such as Tablevault's free export.
- How long does exporting a large Airtable base take?
- The API allows 5 requests per second per base and returns 100 records per request, so records alone take about 2 seconds per thousand. Attachments add download time proportional to their total size. A base with 50,000 records and a few gigabytes of files typically takes some minutes, not hours.
- Does an export keep the links between records?
- Only if it keeps the record ids and the schema. Linked-record cells contain record ids, so an export that stores records with their original ids and the schema with each link's target table preserves every relationship. CSV loses them.