You've decided to leave QuickBooks Online. The export looks complete—invoices, customers, transactions all listed. Then you arrive in Xero or Zoho, and by month four, your accountant flags mismatched tax codes, invoice numbers restarted from 1, and six months of payroll data that never transferred. This is not a coincidence. QuickBooks Online's export is designed to be permissive, not comprehensive. Here's what actually moves, what rebuilds, and where a CPA audit becomes non-negotiable. What exports cleanly (and why you still need to verify) QuickBooks Online's CSV and IIF (Interchange File Format) exports are reliable for transactional volume, but "reliable" does not mean complete. These migrate without friction: Invoices and line items. Date, amount, customer, description, and line totals export in full. The catch: custom fields and memo-line text sometimes land in the wrong column, and you'll need to map them manually in your new system. Customer and vendor contact records. Names, email, phone, and billing address transfer cleanly. Tax IDs, custom fields, and notes fields are system-dependent; Xero and Zoho may require separate import steps. Chart of accounts. Account names, numbers, and type (asset, liability, revenue, expense) export without loss. Account balances do not; those are snapshot-dependent and require a reconciliation import. Bills and purchase orders. Vendor name, amount, date, and due date move intact. Attachments do not; these stay in QuickBooks Online and must be downloaded manually or via integration. The pattern is clear: structured data with a fixed schema migrates. Anything bespoke, attached, or dependent on system-specific encoding stays behind. The invoice-number sequencing trap This is the migration mistake that haunts SMBs in month two. QuickBooks Online exports invoices with their original number (INV-1001, INV-1002). When you import into Xero or Zoho, the new system sees these as historical invoices and begins auto-numbering new invoices from where QuickBooks left off—or from 1 again, depending on import settings. The risk: if you do not lock your historical invoice number sequence in the new system, you will create duplicate invoice numbers. Your bank will see two INV-1247s, your accountant will flag a discrepancy, and your audit trail breaks. The fix: before importing, set your new system's next invoice number to one past your highest historical number in QuickBooks. In Xero, this lives in Settings > General Settings > Invoice Template. In Zoho, it's in Settings > Invoice Settings > Invoice Number Format. This takes five minutes and saves four hours of cleanup. Tax codes: the month-six landmine QuickBooks Online's tax code structure is US-centric and rigid. If you operate in the UK (VAT), Malaysia (SST), or Singapore (GST), your tax codes already feel like a workaround. When you migrate to Xero or Zoho, these codes do not translate. Here's what happens: QuickBooks exports tax codes as a code name and rate (e.g., "VAT Standard" at 20%). Xero and Zoho import them as custom tax codes, but they do not automatically link to your new system's native tax settings. In month six, when you run your first VAT return or GST reconciliation, the amounts won't match. Your accountant will find that some invoices used the imported custom code and others used the system's native one. The rebuild is unavoidable if you're in a region with tax-code complexity. Xero's native UK VAT setup, for instance, requires you to manually recategorize transactions using Xero's standard codes—not the imported ones. For Malaysia and Singapore, tools like Orin's invoicing module natively validate SST and GST, but migration from QuickBooks requires a line-by-line audit first. The checklist: before importing, audit your QuickBooks tax codes against your new system's native ones. Create a mapping document (QuickBooks code → Xero/Zoho code). Then do a parallel run: process one month of transactions in both systems and compare tax totals. If they match, proceed. If not, you've found the mismatch before it spreads across a year. Payroll data: what you'll lose and why QuickBooks Online's payroll integration is separate from the general ledger. It talks to Intuit's payroll processor, not to your accounting data. When you export from QuickBooks Online, payroll transactions export as general ledger entries (salary expense, tax liability), but the underlying payroll register—hours, tax withholding, deductions by employee—does not. Xero and Zoho have native payroll modules, but they start from scratch. You can import the general ledger impact (the salary account balance on day one), but you cannot recover the detailed payroll history. If you need to audit a specific pay period or rerun a tax filing, you'll have to go back to QuickBooks Online or your old payroll processor's records. This is not a small problem if you're managing teams in Malaysia, Singapore, or Indonesia, where tax withholding (NPWP, EPF, CPF) i