Moving from Airtable to NocoDB, most people start by exporting a CSV and importing it.
After the import the data looks like it's all there, so the new base goes live. The real problems surface a few days later: a formula field is empty, a link can't be clicked into, every attachment is gone.
This article lists the places where things go wrong, up front.
30-second overview
| Item | Details |
|---|---|
| Moves across as-is | Text, numbers, dates, single and multi select, checkboxes |
| Has to be rebuilt | Formulas, links, rollups, lookups |
| Gets lost | Attachment files, system timestamps |
| The critical step | Build the schema by hand first; don't let the CSV infer it |
| Correct order | Schema → data → links → formulas → attachments |
What moves across as-is
These types generally survive the trip without trouble:
- Single-line text, long text
- Numbers, currency, percentages
- Dates (watch that the timezone settings line up)
- Checkboxes (booleans)
- Single select, multi select (check that the option lists got created too)
- Email, phone, URL
Six types that break
1. Formulas
Formulas don't travel with a CSV — what gets exported is the computed result, and after import that column is static text that never updates again.
On top of that, the function names and syntax differ between the two, so a complex formula can't be pasted across and used; it has to be rewritten to match the logic. Before migrating, screenshot or copy down every formula field, because once the old base is switched off there's nothing left to refer to.
2. Links (link to another record)
Airtable links are bidirectional and store record IDs underneath. Exported to CSV, a link becomes the primary field text of the linked record.
Import that directly and here's what you get: the column looks like it has data, but it's only text — you can't click into it and you can't roll it up.
The right approach is to build the tables and the link structure in NocoDB first, import the data in batches, and then use the imported reference column to connect the links. This is the most time-consuming part of the whole migration.
3. Rollups and lookups
Both of these field types only mean anything if the links exist. Until the links are wired up they will always be empty — which is why they have to come after links in the sequence.
4. Attachments
An attachment column in a CSV is a string of temporary URLs, not the files themselves. And Airtable's attachment links expire.
Files have to be handled separately: download every attachment first, then re-upload. With a lot of data this is worth scripting — use the Airtable API to pull out the URLs and fetch them in bulk.
5. System fields
Created time, last modified time and created-by are generated by the system. After an import they record the moment you imported, and the original timestamps are gone.
If those times mean something to you (the date a customer first got in touch, say), you need to create an ordinary date field in Airtable first, copy the system time into it, and migrate that along with everything else. Miss this step and it can't be recovered.
6. Airtable-specific types
Barcode, button and collaborator have no direct equivalent, so you'll need another approach or you drop them. Before migrating, check whether anyone actually uses them.
The correct migration order
| Order | What to do |
|---|---|
| 1 | In Airtable, save system time fields into ordinary fields; copy down every formula |
| 2 | In NocoDB, create the tables and field types by hand first — don't let the CSV infer them |
| 3 | Import the main tables (without link fields) |
| 4 | Create the links between tables and connect them via the reference column |
| 5 | Rebuild formulas, rollups and lookups |
| 6 | Handle attachments |
| 7 | Run both in parallel for a week, reconcile, then switch Airtable off |
Step two is the critical one. Let a CSV infer your field types and you get a wall of text columns, every one of which you then fix by hand — slower than building it properly in the first place.
What you gain after the move
Every table in NocoDB automatically comes with a REST API and webhooks. That means once you've moved you can do something that costs extra on Airtable: let your automation workflows read and write this data directly.
For many people that, rather than the subscription saving, is the real reason for moving.
What you gain after the move
The motivation for migrating is usually cost or data sovereignty, but in daily use you find you've picked up a capability you didn't have before: every table automatically has a REST API and webhooks.
That means automation workflows can read and write this data directly, with no quota to worry about. A lot of people only start wiring it into their workflows after the move, and then discover that this was the real value.
Common integration patterns are covered in full in n8n plus NocoDB.
What to do the day before you migrate
A few things can only be done while the old system is still alive; miss them and they're gone:
- Save system time fields into ordinary fields — created time and last modified time become the moment of import, and the original timestamps can't be recovered
- Copy down every formula — screenshot or copy them; once the old base is off there's nothing to refer to
- Map out the link structure — which table links to which, and whether it's one-to-many or many-to-many
- Download the attachments — the attachment links in a CSV expire
All of that takes about half an hour, but missing any one item is irreversible.
FAQ
Q: Why can't I just import the CSV and be done?
You can import it, but you'll get a wall of text columns. Let the CSV infer types and you'll fix every column by hand afterwards — slower than building it properly from the start.
Q: Can I paste formulas straight across?
No. The function names and syntax differ between the two, so complex formulas have to be rewritten to match the logic. And what's in the exported CSV is the computed result, not the formula itself.
Q: My link fields imported as text — what happened?
That's expected. A link in a CSV is the primary field text of the linked record, not the link itself. You have to create the tables and link structure first, then connect them using the imported reference column.
Q: How do I handle attachments?
The CSV contains temporary URLs, and they expire. Download everything first and re-upload it; with a lot of data it's worth writing a script against the API to fetch them in bulk.
Q: What should I verify after the move?
Three things: that the record counts match, that links can be clicked into, and that rollups are producing numbers. We suggest running both in parallel for a week before switching the old one off, so there's still time to fix anything you missed.
Sources and further links
For how field types map to each other, both vendors' official documentation is authoritative:
- NocoDB official documentation
- Airtable official pricing — record limits
Further reading
- NocoDB vs. Airtable: data sovereignty, record limits and a real cost calculation
- NocoDB tutorial: creating your first table and view
- NocoDB API quickstart: getting a token, reading and writing tables, wiring up automation
- Using NocoDB as a CRM: when it's enough and when to replace it
- RoamerHost managed NocoDB plans
Want someone to build it for you?
Once the data volume climbs, or the thing has to connect to your company's existing systems, this stops being just a choice of tool. Roamer Tech takes on custom enterprise system development and API integration: