Baserow → Notion
Turn each Baserow table into a Notion database with a CSV import. Notion will not build formulas, rollups, or new relations from that file, and a merge adds rows instead of updating them.
Should you make this move?
Both platforms have a case. Compare what you gain with what you give up before scheduling the cutover.
Baserow
- Open-source tables, views, and an Airtable importer give you a database you can host yourself
- Structured ownership, status, and workflow views improve operational visibility
- Formulas, lookups, rollups, automations, interfaces, and permissions still need rebuilding after import
- Custom fields, automations, history, and reporting are difficult to reproduce exactly
Notion
- Polished pages and databases let teams build flexible workspaces without code
- Flexible documents make it easy to capture and organize team knowledge
- Offline use, export fidelity, and large-workspace governance remain weak points
- Structure, links, permissions, and rich blocks often degrade during export
Notion: Polished pages and databases let teams build flexible workspaces without code. This removes a major source-side concern: Formulas, lookups, rollups, automations, interfaces, and permissions still need rebuilding after import.
What you lose: Open-source tables, views, and an Airtable importer give you a database you can host yourself. What you inherit: Offline use, export fidelity, and large-workspace governance remain weak points.
Jump to a section
Know the shape of the move.
This timeline assumes
- Each CSV fits Notion's upload limit: 5MB on the Free plan and 50MB on a paid plan.
- You want a Notion database per table, not a single page of pasted text.
- Baserow stays available until you have checked row counts and any files you move separately.
- You can rebuild formulas, rollups, and relations inside Notion after the rows exist.
- You accept that a CSV merge adds rows and does not update rows that are already there.
What survives the move.
“Partial” and “manual” are not footnotes. They are work that must be scheduled and verified.
| Item | Outcome | Impact | What happens | Mitigation |
|---|---|---|---|---|
| Rows and columns | partial | critical | Notion says a CSV import creates a database, with rows as pages and columns as properties. You map each column yourself. The first row should be headers. | Map columns in a pilot database before you import the full file. |
| Filtered exports | partial | critical | Baserow view exports include only the rows that pass the current filters. | Export the entire table when the Notion database is supposed to be complete. |
| Formulas and rollups | manual | high | Notion says a new CSV import cannot create rollups or formulas. You rebuild them after the properties exist. | Snapshot the current results in a text column if you need the old numbers. |
| Relations | manual | critical | A new CSV import cannot create relations. If you merge into an existing database, you can map a column onto a relation that already exists. | Create the relation properties first when the links matter, then map into them. |
| Duplicates | partial | critical | Notion says imports add rows. They do not update existing rows. CSV merges add rows too, so a second import duplicates the table. | Import each table once into an empty database, or deduplicate before you share it. |
| Dates and numbers | partial | high | Notion says dates import in MM/DD/YYYY form. Mixed currencies, percents, and odd numbers are safer mapped to text. A mixed column may come in as text. | Check a date column and a money column in the pilot. |
| Select fields with commas | partial | medium | Notion says a value that contains a comma can fail to show when the column is mapped to Select. Map that column to text instead. | Scan select values for commas before you choose the property type. |
| Files | manual | critical | Baserow can export files as an archive grouped by row id. Notion's CSV help describes properties, not those files. | Upload files onto the right Notion pages after the rows exist, using the row id. |
| Comments and history | lost | medium | Baserow does not include comments or revision history in an export. | Copy any thread you need while you can still open Baserow. |
| File size | partial | high | Over Notion's 5MB or 50MB limit, the upload fails. Notion's own tip for large sheets is to split the CSV. | Split large tables and import the parts into the same database only if you have a plan for the duplicates that creates. |
Where each thing goes.
| Source | Destination | Method | Notes |
|---|---|---|---|
| Baserow table | Notion database | transform | One CSV import can create the database. |
| Row | Database page | transform | Rows become pages. |
| Column | Property | transform | You map each header during import. |
| Formula or rollup result | Text property, then a Notion formula | manual | The import will not create the formula. |
| Link to table | Text id, or an existing relation | manual | New imports do not create relations. |
| File | Page content or a files property | manual | Move the archive by hand. |
| Date | Date property | transform | Notion documents MM/DD/YYYY. |
| Comment or revision | No destination | unsupported | Not in the Baserow export. |
| Second import of the same CSV | Duplicate pages | manual | Merges add rows. They do not update them. |
Make the move recoverable.
Create the source-of-truth backup
Keep a full Baserow export that does not depend on the Notion workspace.
- Export each table as CSV with filters off and a header row.
- Export a JSON copy beside the CSV.
- Export file archives grouped by row id.
- Save the Baserow row counts next to the files.
Proof to capture: You can open every CSV without Notion, and the counts match Baserow.
CSV cleanup
Make dates, selects, and headers match what Notion documents.
- Put headers in row 1 and export UTF-8 if characters look wrong.
- Write dates so they read as MM/DD/YYYY.
- Move comma-heavy select values to a text column.
- Split files that exceed the plan's size cap.
Proof to capture: Save the input, output, command or tool settings, warnings, and final item counts.
Notion database import
Create the database once, then rebuild calculated properties.
- Import into a new database for the first load.
- Map each column to the property you want.
- Add formulas, rollups, and relations after the pages exist.
- Do not re-import the same file into that database unless you want duplicate pages.
Proof to capture: Save the input, output, command or tool settings, warnings, and final item counts.
The things most likely to hurt.
These are operating limits. Treat every “Stop if” condition as a blocked migration, not a suggestion.
A second import duplicates the database
The same rows appear twice because Notion adds pages instead of updating them.
- Consequence
- People edit two copies of one record.
- Mitigation
- Import once into an empty database.
Stop if: Any key appears on two pages.
Relations never get created
The CSV import finishes and the links are plain text.
- Consequence
- Related records are not connected.
- Mitigation
- Create relation properties and map into them on purpose.
Stop if: A required link is still text at cutover.
The export was a filtered view
Notion's row count is the view, not the table.
- Consequence
- Missing rows look like a successful import.
- Mitigation
- Export the entire table and compare counts.
Stop if: The counts disagree.
Do the work in this order.
- Days 1 to 2 · inventory
Pick the databases
2 to 5 hours active1 to 2 days elapsedOwner review waiting- List tables, relations, and files.
- Decide which formulas must be snapshotted as text.
Depends on: Baserow access, Notion import permission
Stop / go checkpointExport?
Go when: Every table has a Notion destination.
Stop when: A relation has no id column.
- Day 2 · backup
Export Baserow
2 to 4 hours active1 day elapsedDownloads waiting- Export full-table CSVs and file archives.
- Record counts.
Depends on: Approved inventory
Stop / go checkpointImport the pilot?
Go when: Counts match and headers are row 1.
Stop when: A CSV is filtered or over the size cap.
- Days 2 to 4 · pilot
Import one database
3 to 8 hours active1 to 3 days elapsedNotion processing waiting- Import one table.
- Check dates, selects, and a relation plan.
Depends on: Verified export
Stop / go checkpointImport the rest?
Go when: The pilot count matches and dates read correctly.
Stop when: Duplicate pages or blank selects show up.
- Days 4 to 6 · cutover
Import the rest and freeze Baserow
2 to 5 hours active1 to 2 days elapsedUploads waiting- Freeze Baserow.
- Import remaining CSVs once.
- Upload files and add relations.
Depends on: Passed pilot
Stop / go checkpointShare the Notion databases?
Go when: Counts match and relations resolve.
Stop when: A second import has already duplicated a table.
- Days 6 to 8 · observe
Use the databases
1 to 3 hours active2 days elapsedOne working cycle waiting- Rebuild the formulas people use.
- Keep Baserow readable.
Depends on: Verified cutover
Stop / go checkpointArchive Baserow?
Go when: The blocking checks still pass.
Stop when: A relation or file is still missing.
Cut over with a way back.
Cutover
Put the final Baserow tables into Notion once, then stop editing Baserow.
- Freeze Baserow.
- Re-export any table that changed.
- Import each CSV into an empty Notion database.
- Add relations, formulas, and files.
- Compare page counts with the CSV row counts.
Proof to capture: Each Notion database has one page per CSV row, and you did not run a second import.
Rollback
Go back to Baserow if the Notion databases are duplicated or incomplete.
- Stop edits in the new Notion databases.
- Send people back to Baserow.
- Export any Notion pages created after the switch.
- Decide which of those pages return to Baserow.
- Leave the bad Notion database in place until that list is resolved, or duplicate nothing further.
Proof to capture: Baserow is the writable system, and post-switch Notion pages are accounted for.
- Page counts do not match the CSV
- A second import created duplicates
- A required relation is missing
- Files never got attached
Prove the migration worked.
Every blocking check must pass. Capture the evidence before cleanup begins.
| Pass | ID | Check | Method | Expected result | Evidence |
|---|---|---|---|---|---|
V-01Blocking | Page counts | Compare Baserow, the CSV, and the Notion database. | Counts match. | Count sheet | |
V-02Blocking | Date properties | Open a sample of date pages. | Dates match the MM/DD/YYYY reading you expect. | Date sample | |
V-03Blocking | Select values | Check values that contain commas. | They are present as select options or as text, on purpose. | Select sample | |
V-04Blocking | Links | Open linked pages. | Relations point at the right pages. | Relation sample | |
V-05Blocking | Rebuilt formulas | Compare results with the text snapshot. | Critical results match. | Formula sheet | |
V-06Blocking | Uploads | Open a sample of files by row id. | The file is on the right page. | File sample | |
V-07Blocking | Unique ids | Search the id property. | Each id appears once. | Id check | |
V-08Blocking | Sharing | Open the database as a guest and as an editor. | Sharing matches the list you wanted. | Share settings |
Remove the scaffolding safely.
Safe after: The Notion databases have been used for a few days and Baserow is still there as a reference.
- Store the CSVs and the file archive outside Notion.
- Remove temporary pages created by failed imports.
- Revoke Baserow tokens you used only for the export.
- Keep Baserow until the date you agreed.
- Note which formulas were rebuilt, so the next edit does not assume they came from the CSV.
Verify against the primary material.
Platform behavior changes. Check these sources and the review dates above before executing a production migration.
- Baserow: export a tableAccessed 2026-11-05
- Notion: import data, including CSVAccessed 2026-11-05