You've outgrown Notion. Your contact list has hit 500+, your custom fields are multiplying, and your relationship map—the linked records connecting deals to people to companies to project—is too valuable to lose. The problem: Notion's CSV export flattens everything. Linked records vanish. Custom field structures collapse. Deal-to-contact associations become orphaned text. You're left reassembling contact hygiene from scratch. An API-first migration changes that. Instead of CSV, you talk to Notion's Notion API directly, pull the relationship graph as structured data, and load it into Orin's CRM with all connections intact. Zapier bridges the gap for most teams. For larger or more complex migrations, a direct API script ensures zero data loss. Here's how to migrate without orphaning a single relationship. Why CSV breaks Notion's relationship graph Notion stores relationships as linked databases. A contact record in your "People" database links to records in "Companies", "Deals", "Projects", and custom tables you've built. When you export to CSV, Notion can only flatten those links into text—usually a comma-separated list of names or IDs that your new platform doesn't understand. The damage: Linked records become text strings . A deal linked to three contacts exports as "Alice Smith, Bob Jones, Carol Lee" in a single cell. Orin sees no relationship, just a memo field. Custom field types collapse . A Notion multi-select field, date, or formula exports as generic text, stripping validation and structure. Rollups and aggregates vanish . If your Notion contact has a rollup of total deal value or a count of active projects, the CSV exports the calculated result as a static number, losing the formula and the link back to source records. Reverse relationships orphan silently . A contact linked "from" a deal record (the deal table holds the link) may not appear in the CSV at all, depending on Notion's export direction. CSV flattens a graph into a spreadsheet. An API preserves the graph and translates it into your new platform's schema. API migration: The mechanics Notion published an official API in 2021. It exposes databases, records, and relationships as JSON. Your migration tool (Zapier, n8n, Make, or a custom script) reads that JSON, maps Notion's field structure to Orin's, and writes records with relationships intact. The flow: Connect to Notion API. Authenticate via OAuth or API token. Grant access to the workspaces and databases you're migrating. Query each database. Pull all records from your "People" database, then "Companies", "Deals", etc. Notion's API returns relationships as arrays of linked record IDs. Map fields. Translate Notion's field types (select, multi-select, date, email, phone, rollup, relation) to Orin's field schema. A Notion multi-select "Deal Status" maps to Orin's deal pipeline stage. Resolve relationships. When a Notion record links to another (e.g., a contact links to a company), store that relationship ID. After all records are created in Orin, a second pass creates the links using Orin's relationship fields. Validate and audit. Count records and links in both systems. Verify that custom fields populated correctly and that no relationships were orphaned. Using Zapier for API migration (500–2000 contacts) Zapier's Notion integration supports API queries and can feed data into Orin. For teams with moderate volumes and straightforward schemas, this is the fastest path. Step 1: Set up Zapier Multi-Step Zap. Trigger: "New Database Item in Notion" (or manually trigger to run once). Action 1: "Search Notion Database" to fetch all records (use filters if you want to migrate a subset). Action 2: "Create Contact" in Orin, mapping each Notion field to Orin's schema. Step 2: Handle linked records in a second Zap. After all contacts are created, run a separate Zap to link relationships: Trigger: "New Database Item in Notion" filtered to records with relationships. Action 1: "Find Contact" in Orin by email or external ID (your Notion record ID, stored as a custom field in Orin). Action 2: "Update Contact" to add the linked contact (search Orin for the related contact by name or email, then use Orin's relationship field to link). Limitations of Zapier for this task: Zapier charges per task. A 1000-contact migration with relationship linking can cost ₹5,000–10,000 depending on complexity. Zapier's "Search" action doesn't return all results if the database is large; you may need to batch migrations. If you have deeply nested relationships (contacts linked to deals linked to projects linked to custom objects), Zapier requires nested Zaps, multiplying cost and complexity. Direct API migration for larger, complex schemas If you have 2000+ contacts, custom-built Notion databases with multiple relationship layers, or you want to avoid Zapier costs, a direct API script is faster and cheaper. Prerequisites: Notion API token (from your workspace settings). Orin API key (from your account settings). A Python, Nod