You've outgrown Notion. Your sales team is now 8 people, you're processing 150+ invoices a month, and your single Notion database is the only place your customer records, deal stages, and invoice line items live. The export button looks simple enough. But the moment you import that CSV into QuickBooks Online or Xero, your reconciliation process turns into a forensic audit—and you'll find gaps that cost you weeks and real money. The problem isn't Notion's export. It's that Notion treats data as flexible and relational, while accounting software treats it as rigid and sequential. Contact IDs don't map. Invoice totals reconcile visually but fail in batch. Tax codes either go missing or land on the wrong line items. This guide maps what moves cleanly, what orphans, and the reconciliation checklist you need before a single record hits your books. What Notion exports cleanly (and why it's not enough) Notion's CSV export is actually well-formed. You get: Contact metadata: name, email, phone, company, address fields export as text without corruption. Invoice line items: quantity, unit price, and description move over intact. Timestamps: creation and modification dates export as ISO 8601 strings (readable by most platforms). Custom field values: if you've mapped them as text or single-select, they export as readable strings. Deal history: stage progression, close dates, and deal amounts survive the export. QuickBooks Online and Xero can ingest all of this. The CSV lands without syntax errors. Your data doesn't corrupt in transit. But here's where teams trip up: clean export ≠ clean reconciliation. QuickBooks doesn't just need your data; it needs it to fit into its account structure, tax treatment, and contact hierarchy. Notion doesn't enforce those constraints, so your export is full of legal but incompatible records. The five data breaks that happen on import 1. Contact IDs fragment—and you lose relationship links In Notion, a contact might have an ID like abc123xyz , and your invoices reference that ID in a relation or rollup field. When you export to CSV, that ID is just text in a column. QuickBooks generates its own customer ID on import (e.g., CUST-00142 ). If you don't manually map the old ID to the new one before import, any downstream process that tried to link invoices to customers breaks. Worse: if you import contacts first, then invoices, the invoice import wizard won't know which customer record to bind each invoice to unless you've prepared a lookup table in advance. Teams often just re-enter customer names on the invoice import, which creates duplicate customer records. What to do: Before import, add a new column to your contact CSV called quickbooks_id . Leave it blank during the first pass. After QuickBooks generates IDs for your contacts, manually or via API map the old Notion IDs to the new QBO IDs in a reference spreadsheet. Use that when you import invoices. 2. Invoice sequences reset (or collide) Notion doesn't enforce invoice numbering. You probably used an auto-increment formula, so your invoices are numbered 1, 2, 3, etc. QuickBooks Online also wants sequential invoice numbers, but it generates them based on a counter you set. If you import an invoice numbered 150 when QuickBooks thinks the next invoice is #1, you'll either have duplicates or gaps. Xero is even stricter: it won't allow you to import an invoice with a number that already exists in the system. If you import invoices 1–100 from Notion, then later realize invoice #50 is a duplicate, you have to delete it from Xero (and any reconciliation tied to it) before you can re-import a corrected version. What to do: Audit your Notion invoices for gaps and duplicates before export. Renumber them to start where your destination system will start (usually #1 if it's a fresh import). If you have old invoices in QuickBooks already, ask your accountant: should you import Notion invoices into a different series (e.g., INV-2024-001 format) to avoid collisions? 3. Tax codes vanish or apply to the wrong line This is the most expensive mistake. Notion lets you store tax information as text: "GST 6%" or "SST 0%" or "Tax-Exempt" . QuickBooks and Xero don't import text tax codes; they need you to link each line item to a defined tax code in their system. If you import without that mapping, one of two things happens: The platform defaults every line to a standard tax treatment (often "no tax" or "default tax"), which means your invoice totals no longer match your Notion records. The platform leaves the tax field blank, and your accountant has to manually re-enter tax treatment on 150+ invoices. If you're in Malaysia (SST), Singapore (GST), or Indonesia (PPN), tax code mismatches also break compliance validation. Your invoices won't pass LHDN, IRAS, or ETAX checks after import. What to do: Before export, create a reference table mapping your Notion tax codes to the exact tax codes defined in QuickBooks or Xero. QuickBooks uses codes like Tax , Non , Tax o