At 300 contacts, Notion still feels fast. Your team knows the workaround for every limitation: linked records for deals, a comments section hacked into activity, separate tables for invoices that never fully sync back. Then a deal slips through a crack because the last call note lived in Slack, not Notion. Your founder asks why your forecast is vague. You realize the answer: Notion was never supposed to scale this far. Migration panic sets in. You've heard stories—"we lost six months of activity logs," "attachments came through broken," "deal stages were a nightmare." Here's what actually happens when you move 300+ contacts from Notion to a real CRM, what data integrity looks like in practice, and the rebuild work that nobody warns you about. What exports clean: contacts and core fields The good news first. Your base contact data—names, email addresses, phone numbers, company names, custom text fields—exports cleanly. Notion's CSV export is reliable for structured, simple data. A contact record with 10 fields (name, email, phone, company, title, industry, country, notes, created date, last touch) moves without loss. Single-select and multi-select fields translate well. If you've tagged contacts with "prospect," "customer," "partner," those labels come through intact. Custom URLs, numbers, checkboxes—all portable. The reason: they're atomic, finite, not dependent on Notion's relational engine. Export as CSV. Do not attempt API extraction unless you have a developer on retainer. Notion's API is powerful but it requires code, error handling, and retry logic that will eat your time. CSV is rough but fast. Test the export on a subset first: export 50 contacts, verify column order and field names, then commit to the full 300. Add an export timestamp to your CSV filename. You'll run this multiple times; tracking which version is live prevents chaos. Check for Unicode and special characters. If Notion stores emoji, accented names, or CJK text, test it in your target platform before committing to the full load. Where data fractures: activity, relationships, and attachments Activity is Notion's kryptonite. If you've been logging calls, emails, and meetings in a linked "Activity" table, that relationship breaks the moment you export. You'll get a CSV with a contact record, but the activity rows are separate. You have three options: (1) manually rebuild the activity timeline in your new platform, (2) script a post-import merge if your new platform has an API, or (3) accept the loss and start fresh with a new activity log from migration day forward. Most teams choose option 3. The reason: the effort to stitch 300 contacts × 5–10 activities each back together across two systems is 40–60 hours of work. If that activity is older than six months, its business value is already sunk. Document the decision to your team so nobody discovers a missing note two quarters later and panics. Linked records—deals, projects, contracts—break at the relationship level. Your "Contact" table probably has a linked "Deal" field. The CSV export will show the deal name, but not the structured link. If you're migrating to a platform with a proper contact-and-deal pipeline , you'll need to rebuild those links in the new system. The deal data itself (deal name, amount, stage) is separate; you export it, re-upload it, then manually re-link deals to contacts or use a script if the platform's import supports it. Attachments are the most visible casualty. Notion stores files in its own cloud. When you export, attachments don't come down in the CSV; they're referenced by URL, and those URLs are Notion-internal. If you click them after migration, you'll get a 404 or a permission error. You have weeks to download them before the URL rots entirely. Action here: Before you export, bulk-download all attachments from Notion. Use a tool like Notion bulk export or write a script to loop through your table and grab every attachment URL. Store them locally or in cloud storage. Then in your new platform's import, you'll re-upload them and re-link them to the contact records. This is manual work for large volumes, but necessary. The 90-day migration sequence: what you do first, what waits Weeks 1–2: Export and validate. Export contacts as CSV. Export deals (if separate) as CSV. Download all attachments. Test the contact import in your new platform on a staging environment. Verify that field mappings are correct, that no data got truncated, and that your team can search and find contacts. Weeks 3–4: Parallel run. Keep Notion live. Your sales team uses the new platform for all new contacts and activity. For the next 30 days, Notion is read-only. This cushion lets you catch missing fields or logic bugs before you flip the switch. Weeks 5–8: Build activity and deal structure. While Notion sits idle, you and your team are rebuilding the activity timeline and deal-to-contact links in your new platform. This is the hidden cost. If you have 300 contacts and an average of