Skip to content

Notion to Coda Migration: Mapping Databases & Preserving Relations

How to migrate from Notion to Coda without losing database relations, formulas, and views. Covers importer limits, CSV pitfalls, and API approaches.

Raaj Raaj · · 13 min read
Notion to Coda Migration: Mapping Databases & Preserving Relations

Moving from Notion to Coda is not a copy-paste job. Notion is document-first with databases layered on top; Coda is database-first with documents woven in. That architectural gap means your relational structures, formulas, rollups, and filtered views will not survive a standard export-import.

Coda's native importer handles simple pages well. For anything with cross-database relations or complex formulas, you need a plan.

This guide covers what actually transfers, what breaks, and how to rebuild what doesn't map cleanly — whether you use Coda's built-in importer, a CSV pipeline, automation tools, or a direct API-to-API approach.

For a deep comparison of the two platforms before committing, see our Coda vs Notion feature breakdown.

How Notion and Coda Structure Data Differently

Before touching an export button, understand what you're translating between.

Notion's model: pages all the way down. Notion describes databases as "collections of pages" where each row is a page and each database is a page within itself. You can nest pages infinitely, creating deep hierarchies that are easy to navigate manually but difficult to parse programmatically. Relations link pages across databases. Rollups aggregate values from those linked pages. Formulas operate only within database columns. (notion.com)

Coda's model: tables as first-class citizens. In Coda, the foundation is the table. Everything in a Coda document is connected to a structured table schema. While Coda supports text on a canvas and you can summon tables alongside it, the real power is in how it queries and displays table data. Tables are not just storage — they're the engine for tracking, analyzing, and acting on data.

Because of this architectural difference, a Notion export that looks clean in CSV form will still fail to reproduce system behavior once you open it in Coda. You are not just moving content — you are translating a data model.

The key mapping differences:

Notion Concept Coda Equivalent Migration Notes
Database Table 1:1 mapping; column types need manual review
Relation property Lookup column Must be manually rebuilt — not preserved in export
Rollup Formula on lookup Requires rewriting as a Coda formula
Formula property Column formula / canvas formula Syntax differs; Coda formulas are more flexible
Database view Table view Views are not exported; recreate in Coda
Nested page Subpage or canvas column Content imports but may lose hierarchy
Synced block No equivalent Dropped entirely on export
Parent/child hierarchy Self-relation + subitems Model parent and child columns explicitly

Formulas: Column-Only vs. Anywhere

Notion's formulas are used solely in tables — columns and filters. Coda's formulas can live in columns, filters, buttons, automations, and directly on the canvas. You can write a personalized message by typing Welcome, =@user! on a Coda canvas page. (coda.io)

This means a Notion formula like prop("Due Date") - now() won't paste into Coda. Every formula must be rewritten using Coda's formula language, which is closer to Excel syntax than Notion's prop-based approach. Treat every formula as a rewrite, not a translation.

In Notion, a relation property links rows between two databases. The relation pulls from the entire target database — it's up to the user to select the correct page from a dropdown. (notion.com)

Coda enforces stricter data hygiene. Lookup columns can include conditional filters — for example, you can restrict a lookup to only show rows where Status = "Active". Notion's relation properties don't support this natively. Use the migration as an opportunity to tighten your data model instead of copying it verbatim.

Hierarchy: Workspace vs. Folder Structure

Notion's hierarchy is Workspace → Teamspaces → Pages → Subpages. Coda adds layers: Workspace → Folders → Docs → Pages → Subpages. A single Notion workspace doesn't map to a single Coda doc — you'll likely split it across multiple docs organized in folders. Factor this into your migration plan early.

How to Use Coda's Native Notion Importer (And Its Limits)

Coda's built-in importer is the fastest way to move simple content. It works through a Notion HTML export, not CSV or Markdown.

Step-by-Step: The /notion Import

  1. Export from Notion as HTML. Go to Settings → Export all workspace content (or use the ••• menu on a specific page). Toggle on Include subpages — since all tables in Notion rely on data from subpages, exporting without these will prevent your tables from importing to Coda. Also toggle on Create folders for subpages so database pages come across correctly. (help.coda.io)
  2. Upload to Coda. Open a new or existing Coda doc, type /notion, and upload the ZIP file (or unzipped folder if the export is too large). Coda supports selective importing — you can choose which files to import rather than importing the entire directory.
  3. Review the import log. Once your import is complete, look for the auto-generated "Read me: Import next steps" page. Its Import fixes subpage lists all issues found during import, with suggested solutions and direct links to affected locations. That page is Coda telling you the migration is not done yet.
Tip

People mentions: If you need @-mentions to survive, start with a blank doc and share it with the referenced users before you import. (help.coda.io)

Size Limits and the Windows MAX_PATH Trap

For best results, Coda recommends keeping the ZIP file under 500 MB. Coda cannot import ZIP files larger than 2GB. If your ZIP exceeds this limit, unzip it first and upload the unzipped folder. (help.coda.io)

Large Notion exports create a secondary problem for Windows users. Notion's infinite page nesting produces deeply nested folder hierarchies in the export file. When you attempt to unzip this on Windows, you'll frequently hit the default 260-character MAX_PATH limit. Windows will silently truncate file paths or fail the extraction entirely, resulting in missing pages and corrupted imports.

Warning

Windows users: Enable long path support in the Windows Registry (LongPathsEnabled), use 7-Zip to extract, or process the export on macOS/Linux. The folder structure Coda recommends for better database fidelity is the same structure that most often trips Windows users — a genuine trade-off.

Safari edge case: Safari can auto-unzip the export, which breaks the normal ZIP import flow. Turn off the browser setting that opens "safe" files after download before you start.

Incomplete exports: A Notion workspace export is not always complete. Pages the exporter cannot access are omitted, and content can be excluded by teamspace settings. If the export option is missing entirely, an Enterprise workspace owner may have disabled exporting. (notion.com)

If you're running into export errors on the Notion side, our Notion export troubleshooting guide covers the common failure points. For baseline export methods, see our guide on how to export data from Notion.

What the Importer Does Not Preserve

HTML exports do not support formulas, filtering, or alternative database views. Coda retains the values and data, but you'll need to reapply logic after importing. Expect to lose:

  • Relations and rollups — Exported as plain text (page name and Notion URL), not as linked references
  • Formula logic — Only the computed values transfer, not the formula expressions
  • Filtered/sorted views — Only the default view exports
  • Synced blocks — Silently dropped
  • Embeds — May render as broken links or blank blocks
  • Unused select/multi-select options — Dropped from the import
  • Database cell background colors — Not carried over
  • Date formatting — The HTML export contains only plain-text date values, which can be ambiguous. All dates are aligned with the destination doc's settings and may need correction. (help.coda.io)

Notion treats each row of a table as its own page when exported to HTML. This can result in many blank pages, which Coda skips importing since it renders the table without referencing each source subpage. Don't worry if Notion exports hundreds of pages and Coda imports a fraction — that's expected behavior.

Handling Relations, Rollups, and Formulas After Import

This is where most Notion-to-Coda migrations stall. Your HTML or CSV export flattens relational logic into plain text strings. Rebuilding it in Coda is manual work, but Coda's table model makes it straightforward once you understand the mapping.

Rebuilding Relations as Lookup Columns

When Notion exports relation properties, they become plain text — page name followed by its Notion URL, with no link to the original database. In Coda, the equivalent is a Lookup column that references another table.

To rebuild:

  1. Ensure both source and target tables exist in your Coda doc.
  2. Add a Lookup column type to the source table, pointing at the target table.
  3. Match rows by name or a unique identifier from your original Notion data.
  4. If the relation was bidirectional in Notion, create lookup columns on both tables.
Tip

Keep a hidden Source Notion ID column in every Coda table. Use it for matching during re-imports, delta syncs, and QA. Display names drift. Stable IDs do not.

Rebuilding Rollups

Notion rollups aggregate data across a relation — count, sum, percent checked, etc. In Coda, you rebuild this with a formula column that operates on a lookup column:

  • Notion rollup: Count of related items → Coda formula: [Lookup Column].Count()
  • Notion rollup: Sum of a number field → Coda formula: [Lookup Column].Sum()

In practice, a Notion Project → Tasks → Open Task Count rollup becomes: a Project relation on the Tasks table, a linked relation Tasks on the Projects table, then formulas off that linked relation:

// Reverse lookup
Tasks.Filter(Project = thisRow)
 
// Rollup-style metrics
thisRow.Tasks.Filter(Status != "Done").Count()
thisRow.Tasks.[Estimate].Sum()

If the chips in a relation column show the wrong label in Coda, check the display column in the referenced table. (help.coda.io)

Translating Formulas

Notion and Coda both support formulas, but the syntax is not compatible. Common translations:

Notion Formula Coda Equivalent
prop("Name") thisRow. [Name]
now() Now()
dateBetween(prop("Due"), now(), "days") thisRow. [Due] - Now() (returns duration)
if(prop("Status") == "Done", true, false) If(thisRow. [Status] = "Done", true, false)
length(prop("Tags")) thisRow. [Tags].Count()

For complex Notion formulas — nested if chains, replaceAll with regex — expect to spend time with Coda's formula documentation. Coda's formula language supports features Notion doesn't, like SwitchIf() and direct row manipulation.

Parent-Child Databases and Nested Pages

If your Notion database uses parent-child task hierarchies, Coda can represent them, but the model is explicit. Coda subitems are backed by self-relation columns: one parent column and one linked-relation subitem column. Model those columns deliberately instead of expecting nested Notion pages to become a clean hierarchy automatically. (help.coda.io)

Alternative Methods: CSV, Zapier, Make, or Custom API

Choose the migration method based on what you need to preserve, not what looks fastest.

Manual CSV and Markdown Rebuild

Any non-database Notion page exports as Markdown. Full-page databases export as CSV, with Markdown files for each subpage. The CSV path gives you more control over which databases transfer and how columns map — at the cost of significantly more work.

CSV preserves none of your database's logic layer. You get flat rows with column headers. Every relational link, every rollup calculation, every filtered view is gone. Use this approach when you want to redesign the system, not mirror it. Be aware that workspace exports arrive by email, links expire after 7 days, and large exports can take up to 30 hours. (notion.com)

For a deeper analysis of when CSV-based migrations work (and when they don't), see our guide on Using CSVs for SaaS Data Migrations.

Syncing with Zapier, Make, or n8n

Automation platforms let you push Notion database rows into Coda tables without exporting files. This is useful for phased migrations where both tools run in parallel, or for ongoing sync.

What works: You can set up triggers whenever changes occur in selected Notion databases to automatically create or update rows in Coda. A basic Zap triggers on "New Database Item" in Notion and creates a "New Row" in a Coda table.

What doesn't work: The Zapier Notion integration has well-documented gaps. You can't retrieve files or media attachments. Accessing formulas within Notion databases isn't possible. And Zapier cannot natively update Relation properties — as a workaround, you can access the Notion API directly with the Code by Zapier action, which pushes the approach from "no-code" into "low-code" territory. (zapier.com)

For full-scale migration, these tools are inefficient:

  • Rate limits: Both Notion and Coda heavily rate-limit their APIs. Syncing a large database row by row will be slow and expensive — each row consumes a Zap task.
  • Polling delays: Zapier's Coda row triggers use polling with 15-minute intervals on the Free plan.
  • No schema translation: These tools work at the level of rows, pages, and actions. They do not translate a workspace hierarchy, rebuild views, or port formulas.

Custom API Migration

For large, relational migrations, custom scripting is usually the only path that preserves structure and gives you control over cutover. That path comes with vendor limits:

Platform Rate Limit Notes
Notion API 3 requests/second average Shared across reads and writes (developers.notion.com)
Coda API 100 reads/6s; 10 writes/6s Content writes more restricted

Notion also limits request payloads to 1,000 block elements and 500KB total. Any individual children array is capped at 100 elements, and nested blocks can only go two levels deep in a single request. A serious extractor needs separate passes for schema, row values, and block content — not a single export/import loop.

Warning

Coda doc size limit: On all plan types, docs with a size of 125 MB or more will no longer be accessible via the Coda API. Plan your doc architecture before migrating — don't dump an entire Notion workspace into a single Coda doc. (help.coda.io)

Danger

Notion API pagination for relations: The Retrieve page endpoint returns at most 25 references for a relation page property. Beyond that, use the page-property endpoint with pagination. Relation properties also won't be returned if the related database is not shared with the integration. (developers.notion.com)

Edge Cases That Break Migrations

These patterns catch teams off guard:

1. Databases with 1,000+ rows and inline page content. Each Notion row can contain a full page of nested blocks. CSV export captures only property columns. The page body content requires a separate HTML or API extraction pass.

2. Cross-database relations with circular references. If Database A relates to Database B, and B relates back to A, you can't import both CSVs and have the relations work automatically. Import the tables first, build the lookup columns, then populate them — in that specific order.

3. Multi-select fields. Multi-select fields are collapsed into a single cell on export, making filtering difficult. In Coda, you'll need to split these back out into proper multi-select column values.

4. Images and file attachments. Coda's import tool does not embed images from Notion database records. Notion's exported image URLs are temporary signed URLs that expire. Any migration that doesn't download and re-upload them will result in broken images.

5. Date ambiguity. Notion exports dates as locale-dependent strings. 01/02/2026 could be January 2nd or February 1st depending on your system settings. Always verify date formats in the Coda import log.

6. Databases limited to current view on export. When exporting a database from Notion, you can only choose between the current view and the default view. Exporting all views at once isn't supported. If you have filtered views that exclude rows, those rows won't appear in the export. (notion.com)

For complex migrations that involve mapping Notion databases to other structured systems, our guide on mapping Notion databases to SharePoint Lists covers the broader principles of schema translation.

Migration Decision Framework

Choose your approach based on workspace complexity:

Approach Best For Relations Preserved? Effort Level
Coda native importer <100 pages, minimal relations ❌ Manual rebuild Low
CSV export → Coda import Individual databases, clean schemas ❌ Manual rebuild Medium
Zapier/Make sync Phased migration, ongoing parallel use ⚠️ Partial (no relations natively) Medium-High
Direct API-to-API scripts Large workspaces, complex relations ✅ Programmatic rebuild High
Managed migration service Enterprise workspaces, zero tolerance for data loss ✅ Full schema preservation Low (for your team)

The QA Pass Before Go-Live

Before you call the migration done, run a QA pass aimed at structure, not cosmetics:

  • Row counts match by table
  • Null and orphan relation counts are explained
  • Many-to-many samples resolve to the correct parents
  • Rollup replacements match expected totals
  • Attachments and long page bodies open in the right place
  • Critical views, controls, and automations are rebuilt and named clearly
  • Owners, mentions, and key status values map correctly

The practical rule: design the relational model first, import content second. Coda's importer is a good head start for simple Notion docs. It is not a substitute for schema work when your Notion workspace has real operational logic behind it.

When to Bring In a Migration Team

Be honest about scope. If you're moving a few docs and one or two lightly linked tables, do it in-house. If your Notion setup behaves more like an application — project tables, dependencies, rollups, operational dashboards, embedded page bodies, and live teams still editing during the move — then the real work is schema translation, delta sync, and QA.

Bring in a specialist when:

  • The export keeps failing on size or Windows path issues
  • Relations and rollups drive reporting or downstream automations
  • Teams need to keep working in Notion while Coda is being built
  • You need row-count, relation-integrity, and attachment QA before cutover
  • The cost of getting a lookup wrong is higher than the cost of outsourcing the migration

At ClonePartner, we handle Notion-to-Coda migrations through direct API-to-API transfer — bypassing the 2GB ZIP export limit, preserving parent-child table relationships, and translating Notion's formula logic into Coda's syntax programmatically. Your team keeps working in Notion while we build and validate the Coda workspace. When the switch happens, there's no gap.

Frequently Asked Questions

Can I import Notion databases into Coda with relations intact?
No. Notion exports relations as plain text (page names and URLs). You must manually rebuild them as Coda lookup columns after import. The native Coda importer, CSV exports, and automation tools all lose relational links during transfer.
What is the file size limit for Coda's Notion importer?
Coda cannot import ZIP files larger than 2GB. For best results, keep the ZIP under 500MB. If your export exceeds 2GB, unzip the file first and upload the unzipped folder. Windows users may also hit the 260-character MAX_PATH limit on deeply nested Notion exports.
Do Notion formulas transfer to Coda?
Only the computed values transfer — not the formula logic. Notion formulas use a prop()-based syntax that is incompatible with Coda's spreadsheet-style formula language. You need to rewrite every formula in Coda's syntax after import.
Can Zapier or Make migrate a Notion workspace to Coda?
Only partially. Zapier can trigger on new Notion database items and create rows in Coda tables, but it cannot natively handle relation properties, rollups, formulas, or file attachments. Syncing relations requires custom JavaScript via Code by Zapier.
What is the best export format for migrating Notion to Coda?
HTML. Coda's native importer is built to process Notion HTML exports, which preserve more table structure than CSV or Markdown. Always enable 'Include subpages' during export — without it, table data won't transfer correctly.

More from our Blog

The Ultimate Guide to Mapping Notion Databases to SharePoint Lists
Notion/SharePoint

The Ultimate Guide to Mapping Notion Databases to SharePoint Lists

This engineer-led guide details exactly how to map Notion databases to SharePoint lists while preserving your critical relationships. Learn the 4-step architecture for converting Columns to Types, Relations to Lookups, and using SharePoint 'Dynamic Filtering' to recreate the Notion dashboard experience—ensuring zero data loss during your migration.

Raaj Raaj · · 8 min read