You've decided to leave QuickBooks Online for Xero. The software promises a smooth data import. Your accountant promises clean books. Then week two hits: invoice totals don't match your GL, tax codes landed in the wrong accounts, custom fields vanished, and bank reconciliation takes three times longer. These aren't glitches—they're predictable gaps in how Xero interprets QuickBooks data. Nine of them, in fact, and they'll cost you 40–80 audit hours if you don't map them first. This is not a should you switch article. This is a how to switch without losing your audit trail guide. Built for CFOs, controllers, and finance ops teams running mid-market businesses (₹2–20 Cr ACV) where migration errors compound into tax and reconciliation disasters. One: GL account structure doesn't translate QuickBooks Online lets you nest accounts under parent/sub accounts. Xero has a flat chart of accounts with optional class/cost centre assignments. When Xero imports, it flattens everything. Your 12-level account hierarchy becomes 12 separate top-level accounts. Your cost allocations (which QB handled via sub-accounts) now require manual cost centre tags on every transaction. What happens: You lose the ability to roll up P&L by department, product line, or project. Reports that used to filter by account parent now return the wrong subtotals. Tax prep becomes manual—you're manually re-sorting accounts that QB used to group for you. How to audit before migration: Export your QB chart of accounts to a spreadsheet. Count nesting levels and identify every parent account. Map each QB parent to a Xero cost centre or tag structure. If you have more than 4 nesting levels, Xero will require tag-based roll-ups—plan that workflow now. Test with your accountant: does your tax return depend on those parent-level groupings? If yes, you need cost centres pre-built before migration, not after. Two: Invoice history orphans from contact records Xero imports QB invoices as standalone transactions, but doesn't always link them to the corresponding customer contact. If you switch in March with 18 months of invoice history, Xero will import the invoices but fail to attach them to the customer record. You'll have invoices with no customer, or customer records with no invoice history. Reporting breaks. Aged receivables reports show zero balance because Xero can't match invoice to customer. What happens: Your accounts receivable aging is blank. Dunning sequences don't run because the system doesn't see unpaid invoices tied to customers. Tax audits ask why Q3 revenue exists in your GL but not in your customer ledger. How to audit before migration: Run an invoice report from QB that groups by customer and invoice date. Export it. Count invoices per customer. Any customer with fewer than 3 invoices in QB is at risk for orphaning. Contact Xero support and ask for their customer-match logic. Ask specifically: how does Xero match QB invoice customer names to Xero contact names if the QB name changed over time? Do a pilot migration with one customer segment (e.g., top 20 customers by revenue) and verify invoice counts match before and after. Three: Custom fields vanish entirely QuickBooks Online lets you create custom fields on invoices, customers, and transactions. Xero has limited custom field support and does not import QB custom fields. You'll lose data like internal project codes, customer tier classifications, or contract reference numbers that lived in QB's custom fields. They simply don't appear in Xero. What happens: You lose reporting dimensions. Your sales team can't filter invoices by customer tier. You can't reconcile QB's project allocation to Xero's records because the project code field is gone. Worse: if that custom field was used in QB automation rules, those rules don't re-create in Xero. How to audit before migration: Log into QB and list every custom field across all modules: Customers, Invoices, Bills, Line Items, Transactions. For each custom field, ask: is this data mission-critical for reporting, compliance, or automation? If yes, you need a post-migration plan. In Xero, plan to recreate these as either tracking categories (equivalent to QB's custom fields for reporting) or contact notes (if the data is lookup-only). If custom fields drive automation (e.g., "invoice customers in Tier A with this field"), Xero may require workflow builder rules instead. Budget time for that rebuild. Four: Tax code mismatches hide in line items QB uses tax code assignments at the line item level. Xero does too, but the tax code names and rates often don't align. QB might call something "Sales Tax – 8.5%" while Xero calls it "Standard Rate – 8.5%." Xero's import tries to match by rate , not by name . If a QB tax code rate matches multiple Xero codes, the import defaults to one—usually not the one you need. You end up with invoices tagged to the wrong tax code, and tax reconciliation is off by thousands. What happens: Your tax summary report disagrees wit