QuickBooks Online and Xero both sit in the mid-market accounting stack. They both invoice, reconcile, and promise clean GL exports. But when you actually move from QB Online to Xero, nine pieces of your chart of accounts don't follow. Some of them fail loudly—the migration tool stops and tells you why. Most fail silently—the data imports, looks complete, but is wrong in ways that don't surface until you reconcile. We've migrated nine QB Online books into Xero and audited the results. This post maps each break, explains which ones are hidden, and shows you the manual remediation for each. Break 1: Multi-currency transactions with no revaluation date QB Online tracks multi-currency deals at transaction exchange rate. Xero revalues unrealized gains and losses monthly by default, but only if it knows when the transaction settled in foreign currency. QB Online doesn't consistently export this revaluation date—especially for old transactions. Silent or loud? Silent. The transactions import. The currency GL balances look right. But your unrealized gain/loss account is missing entries, and your monthly forex revaluation doesn't reconcile. Time to fix: 2–4 hours per currency pair. You will manually insert revaluation batches in Xero for any transaction older than 90 days in another currency. Remediation: Export QB Online's multi-currency transaction detail (date, amount in home currency, amount in foreign currency, rate). Build a spreadsheet with the missing revaluation dates. In Xero, create a manual journal entry per currency per month, posting the difference to unrealized forex gain/loss. Reconcile against QB Online's export. Break 2: Class and location tracking in QB Online (no Xero equivalent) QB Online's "Class" and "Location" fields let you segment revenue and expenses by department, branch, or project. Xero has no direct equivalent . You can use tracking categories, but Xero doesn't auto-map QB's class structure to tracking categories on import. Silent or loud? Loud in intent, silent in fact. The migration tool warns you that tracking is missing. But unless you actively use Xero's tracking categories before migration, the transaction data imports without the class/location dimension. You lose the ability to run segmented P&L. Time to fix: 4–8 hours. You must manually create Xero tracking categories that match QB's class list, then re-tag historical transactions. Remediation: Export QB Online's class and location master lists. In Xero, create a tracking category (e.g., "Department") and add each class as an option. For all imported transactions, add the tracking category post-import via a bulk journal entry or CSV reupload if Xero's API supports it. Test a single month first. Break 3: Item list with billed costs vs. expense accounts QB Online's item list conflates two things: products/services you bill and internal cost buckets (e.g., "Cost of Materials" as a line-item expense). Xero separates these: items are things you sell; expense accounts are GL codes. On import, QB's mixed item list either bloats your item library with non-sellable items or leaves cost buckets orphaned in the GL. Silent or loud? Silent. The import completes. Your P&L looks close. But your cost of goods sold is disaggregated—some flows through items, some through direct GL accounts—and your inventory tracking is unreliable. Time to fix: 3–6 hours. Audit QB's item list, segment sellable items from cost buckets, and re-map the cost buckets to direct GL expense accounts in Xero. Remediation: Export QB Online's item master with description, GL account, and usage count. Identify items that have never been billed (zero invoice lines). Create those as expense GL accounts in Xero instead, not items. For historical transactions that used those items, create a one-time journal entry reclassifying them from the item GL account to the new expense account. Verify inventory valuation before and after. Break 4: Custom fields on transactions (QB's metadata trap) QB Online allows custom fields on invoices, bills, and line items (e.g., "Project ID", "Client Tier", "Campaign"). Xero's import does not carry these over. If your billing workflow relies on custom fields to segment revenue or track client profitability, that metadata vanishes. Silent or loud? Silent. The transaction data imports correctly. But your custom field values are gone, and you cannot slice reporting by them without manual re-entry. Time to fix: 2–8 hours, depending on the volume of historical transactions that need re-tagging. For ongoing transactions, rebuild the workflow using Xero's custom fields (if your integration supports them) or use a CRM to capture and annotate billing data separately . Remediation: Export QB Online's transaction detail including custom field values. Identify which custom fields are business-critical (e.g., project IDs). For those, create a mapping in Xero's custom fields or (if Xero doesn't support them at scale) store the mapping in a linked CRM or