Migration Playbook

QuickBooks Xero

QuickBooks to Xero: The Complete Migration Playbook

A 37-step runbook across six phases — track your progress, and open the right tool at every step.

0 / 37 steps complete 0%
TL;DR

Jet Convert migrates only 2 fiscal years free; the Conversion Toolbox caps at 6,000 items; QuickBooks Jobs, sub-accounts, and Classes all break in Xero's flat architecture — custom API migration is the only way to preserve full history.

Xero's free Jet Convert tool migrates only the current and prior fiscal year of transactional data. Everything older is compressed into opening balances, destroying transaction-level detail. The Xero Conversion Toolbox caps historical imports at 6,000 items total across all object types. QuickBooks and Xero use fundamentally different data architectures. QuickBooks supports sub-accounts, Jobs (sub-customers), and unlimited Classes. Xero has a flat Chart of Accounts, a flat contact list with no Jobs, and only 2 active tracking categories with 100 options each. These structural mismatches cause permanent data loss if not handled before cutover. Full historical migration requires custom API work — extracting via the QuickBooks API, programmatically transforming sub-accounts, Jobs, and Classes into Xero's flat structures, and loading via Xero's batch API within its 60 calls/minute and 5,000 calls/day limits.

Read this first

Pair-specific gotchas that catch teams out. Each one has cost somebody a weekend.

Jet Convert extracts data at a point in time

Stop working in QuickBooks Online — data will be extracted at a point in time. Data entered after this date will need to be re-entered if you continue working in QuickBooks Online.

Data Validation Failures

The Conversion Toolbox does not offer detailed error logs. If a CSV fails due to a character encoding issue (like a stray ampersand in a vendor name), the tool often returns a generic failure message, leaving engineers to run manual diffs on the raw data to find the problem.

If parent-child reporting matters, capture the hierarchy in a mapping sheet before the first load

Once a tool flattens sub-accounts into independent Xero accounts, rebuilding the lineage later is manual repair.

Before migrating, export a Class-filtered P&L from QuickBooks for every combination you

Before migrating, export a Class-filtered P&L from QuickBooks for every combination you currently report on. If you can't replicate those reports with only two Xero tracking categories (100 options each), redesign your reporting structure before cutover — not after.

MMC Convert lists "Payroll

Setup + details included" in its feature set. This is worth scrutinizing — Xero's own migration path explicitly excludes payroll, and the scope of what "setup + details" covers (historical payroll records vs. just configuration) should be confirmed directly with MMC before relying on it.

If you exceed either rate limit you will receive an HTTP 429 (too many requests) response

Your migration scripts must implement exponential backoff and resume logic. A single unhandled 429 can corrupt your migration state if batches are not idempotent.

The Daily Limit Math

If you batch 50 invoices per API call, you can theoretically push 250,000 invoices per day into Xero. If you push them one by one, you max out at 5,000 invoices per day. But this math only works if invoices are the only object you're migrating — in practice, contacts, payments, and journals all draw from the same 5,000-call daily pool.

Regardless of the migration method you choose, keep the old QuickBooks file in read-only

Regardless of the migration method you choose, keep the old QuickBooks file in read-only mode after go-live. Archive access is cheap. Reconstructing lost lineage in Xero is not.

The runbook

Work top to bottom. Tick steps as you go — your progress is saved in this browser.

01 Discovery Scope the ledger, the subledgers and the audit obligations. 0/6

Objective Agreed scope across master data, open transactions and historical balances, with finance and audit signed up.

  1. Inventory master data and transaction volumes in QuickBooks

    Finance systems 2-3 days

    Count GL accounts, customers, vendors, items, fixed assets, open AR and AP, and transaction lines by year. Transaction line volume, not header count, is what determines your load time.

    Data Profiler Get real record counts instead of estimating from memory
  2. Decide the history strategy with finance and audit

    Finance director 1-2 weeks

    Choose between opening balances only, open items plus balances, or full transactional history. This is the single biggest scope decision in an ERP migration: full history multiplies effort many times over, and most organisations land on balances plus open items plus a read-only archive.

    Full transactional history is rarely worth the cost. Confirm what your auditor actually requires before assuming you need it.

    Vendor Evaluator Score Xero against alternatives on weighted criteria
  3. Consult the external auditor early

    Finance director 1-2 weeks

    The auditor has views on cut-over timing, audit-trail retention and how you evidence that balances carried across correctly. Finding this out after go-live can mean a qualified opinion, so get it in writing now.

  4. Review the chart of accounts and decide whether to redesign

    Financial controller 2-4 weeks

    A migration is the natural moment to restructure the COA, and also the riskiest one. If you redesign, you need a mapping from old to new for every historical balance, plus a plan to restate comparatives.

    Redesigning the chart of accounts mid-migration doubles the reconciliation burden. Treat it as a separate, sequenced project if you can.

  5. Catalogue integrations and statutory reporting

    Finance systems 3-5 days

    List banking feeds, payment gateways, tax filing, payroll, CRM, e-commerce, warehouse and BI. Then list every statutory and tax filing obligation with its deadline — those deadlines constrain your window absolutely.

  6. Pick a period-aligned go-live date

    Finance director 1 day

    ERP cutovers align to a period boundary — ideally the start of a fiscal year, otherwise the start of a clean month. Mid-period cutover means split-period reporting for the rest of the year.

Don't move on until

  • Chart of accounts and master-data counts confirmed
  • History strategy agreed: balances, open items, or full transactional detail
  • External auditor consulted on the migration approach
02 Data Audit Reconcile the source before you migrate it — you cannot fix a ledger later. 0/6

Objective A source ledger that balances, with master data cleansed and every open item agreed.

  1. Produce and sign off a source trial balance

    Financial controller 2-3 days

    Run the trial balance in QuickBooks and have the controller sign it. This is your migration baseline: without a signed pre-migration position you have nothing to reconcile the target against, and any later discrepancy is unarguable.

    Without a signed, dated source trial balance you cannot prove the migration preserved the ledger. Do this before anything else.

  2. Reconcile subledgers to the general ledger

    Financial controller 3-5 days

    Confirm AR, AP, inventory and fixed-asset subledgers tie to their GL control accounts. Pre-existing breaks must be resolved in QuickBooks: migrating an out-of-balance ledger makes the break permanently unattributable.

    Data Profiler Profile the QuickBooks export for nulls, outliers and type drift
  3. Clean and deduplicate master data

    Finance systems 1-2 weeks

    Deduplicate customers, vendors and items, and identify records that should not carry forward. Duplicate vendors are also a fraud-control weakness, so this has value beyond the migration.

    Data Cleaner Strip empty rows, stray whitespace and dead columns
  4. Agree open AR and AP item by item

    AR / AP leads 1-2 weeks

    Every open invoice, credit note and payment on account needs an owner and an agreed amount, including partially-paid items and foreign-currency balances. Open items are what customers and vendors will dispute in week one.

  5. Validate export structure, encoding and precision

    Data engineer 2 days

    Check numeric precision and rounding on the export, and confirm dates and currency codes are unambiguous. Precision loss on amounts is silent, cumulative and produces penny differences that take days to trace.

    Amounts exported at reduced precision will not re-total. Verify decimal places before you accept the export.

    CSV Validator Catch broken headers and ragged rows in the raw export
  6. Scan for regulated data and produce masked test data

    Compliance 2 days

    ERP data holds bank details, tax IDs and payroll information. Scan it, restrict who can see it, and generate a masked copy for the sandbox and for any implementation partner.

    PII & Compliance Scanner Find regulated fields before they land in a new system

Don't move on until

  • Trial balance in QuickBooks balances and is signed by the controller
  • AR and AP subledgers reconcile to the GL control accounts
  • Master data deduplicated and inactive records identified
03 Field Mapping Map the COA, the dimensions and the subledger structures. 0/6

Objective A signed mapping covering the chart of accounts, dimensions, tax codes and currency handling.

  1. Map the chart of accounts account by account

    Financial controller 1-2 weeks

    Every source account maps to exactly one target account, or to a documented split with agreed proportions. The controller reviews and signs this line by line — an unreviewed COA map is how a balance sheet stops balancing.

    Schema Mapper Opens pre-loaded with the QuickBooks → Xero field pair
  2. Map dimensions, cost centres and analysis codes

    Financial controller 1 week

    ERPs differ structurally here: segments, dimensions, tracking categories and classes are not interchangeable. Confirm how Xero models analysis and whether your existing reporting hierarchy survives the translation.

  3. Map tax codes, rates and jurisdictions

    Tax lead 1 week

    Map every tax code with its rate, jurisdiction and reporting treatment, then verify the mapping reproduces your last filed return. Tax errors are statutory exposure, not reporting inconvenience.

    A tax-code mapping that has not been tested against a previously filed return is untested. Reproduce a real filing before sign-off.

  4. Decide multi-currency and exchange-rate handling

    Financial controller 3-5 days

    Confirm functional and reporting currencies, and how historical rates are stored. Revaluing historical transactions at current rates rewrites reported results and will not tie to filed accounts.

    Historical transactions must retain their original transaction-date rates, or your comparatives will not match filed statements.

  5. Map master data and subledger structures

    Finance systems 1-2 weeks

    Map customer and vendor records with their payment terms, credit limits and tax registrations, and item records with units of measure and costing method. Costing-method differences change inventory valuation, which changes the balance sheet.

  6. Set load order and freeze the spec

    Project manager 2 days

    COA, then dimensions, then master data, then opening balances, then open items, then any historical detail. Version and sign off the spec with the controller before the pilot.

QuickBooks → Xero specifics

Sub-accounts
→ Flatten with consistent naming conventions (e.g., Travel:Airfare becomes Travel - Airfare)
Locations
→ Map to the second Tracking Category (if available)
Multi-currency transactions
→ Preserve original currency and exchange rate; handle FX variance adjustments
Tax codes
→ Map QuickBooks tax groups to Xero's individual tax rates; decompose compound groups into component rates

Don't move on until

  • Account-by-account COA mapping reviewed by the controller
  • Tax codes and jurisdictions mapped and verified against filings
  • Multi-currency and rate handling agreed with finance
04 Test Migration Prove the ledger balances in the target before you trust it. 0/6

Objective A sandbox load whose trial balance matches the signed source position to the penny.

  1. Configure the Xero sandbox with the agreed structures

    Solution architect 2-4 weeks

    Build the COA, dimensions, tax codes, currencies, fiscal calendar and posting rules before loading anything. Every one of these affects how a posted transaction lands, so an unconfigured sandbox produces meaningless results.

  2. Load master data and validate it

    Finance systems 1 week

    Load customers, vendors and items first and verify counts, payment terms, tax registrations and costing methods. Transactions cannot post correctly against wrong master data, so this gate comes before any balance work.

    Migration Validation Tool Diff the pilot batch against source before scaling up
  3. Load opening balances and prove the trial balance ties

    Financial controller 1 week

    Load opening balances and run a trial balance in Xero, comparing to the signed source position. It must match exactly — a rounding difference here is a mapping defect, not a rounding difference.

    Any variance at all between source and target trial balance must be explained line by line. "Close enough" is never acceptable in a ledger.

  4. Load open items and reconcile the subledgers

    AR / AP leads 1 week

    Load open AR and AP with their ageing intact, then confirm subledger totals tie to GL control accounts and that ageing buckets match. Ageing that shifts means transaction dates mapped wrongly.

  5. Run a full period-end close in the sandbox

    Financial controller 1-2 weeks

    Execute the whole close: revaluation, accruals, depreciation, tax calculation, and financial statement generation. Compare every statement to QuickBooks for the same period. The close is where structural mapping errors finally become visible.

  6. Test transactions end to end and reproduce a tax filing

    Finance systems 1-2 weeks

    Post a sales order to cash and a purchase order to payment, then generate the tax return for a previously filed period and compare it to what you filed. If both reconcile, the configuration is sound.

QuickBooks → Xero specifics

Trial Balance
Match the QB and Xero trial balances for every fiscal year migrated. Any variance greater than $0.00 must be flagged and investigated.

Don't move on until

  • Target trial balance matches the signed source trial balance exactly
  • Subledgers reconcile to control accounts in the target
  • A full period-end close has been run in the sandbox
05 Cutover Switch the ledger on a period boundary, with balances proven. 0/7

Objective Balances and open items live in Xero, transacting resumed, and a signed post-load trial balance.

  1. Close the final period in QuickBooks and freeze posting

    Financial controller 3-5 days

    Complete the period-end close, then lock posting entirely. An ERP freeze is absolute: a single journal posted to the old system after the final export leaves the two ledgers permanently divergent.

    One journal posted in the old ERP after the final export breaks the reconciliation permanently. Lock posting at the system level, not by asking people nicely.

  2. Publish the cutover runbook with the abort point

    Project manager 2-3 days

    A timed, owner-named sequence for load, balance verification, integration switch and go/no-go, with an explicit abort criterion. The trial-balance check is the gate — nothing proceeds until it ties.

  3. Load balances and open items into production

    Data engineer 1-3 days

    Load the final opening balances and open AR/AP into Xero production, following the pilot-proven sequence. Do not improvise the order under time pressure.

  4. Reconcile and sign the post-load trial balance

    Financial controller 1-2 days

    Run the trial balance in Xero and reconcile it to the signed source position, then have the controller sign the result. This signature is your evidence for the auditor and your go/no-go gate.

    Migration Validation Tool Confirm the final delta landed before you reopen
  5. Repoint banking, payment and tax integrations

    Finance systems 2-5 days

    Switch bank feeds, payment gateways, tax filing connections, payroll and BI, then process one real low-value payment and one bank reconciliation end to end. Banking errors move real money, so verify with live traffic.

    Payment integrations left connected to the old ERP can duplicate real payments. Disable them before switching, not after.

  6. Go/no-go, then open for transacting with daily reconciliation

    Finance director 1-2 weeks

    Call the decision on the signed trial balance, open Xero for posting, and reconcile daily for the first two weeks with finance support on hand. Keep QuickBooks read-only for statutory retention — this is an audit requirement, not a preference.

  7. Contact counts

    Verify no customers or vendors were dropped

QuickBooks → Xero specifics

AR/AP Aging
Confirm open invoice and bill balances match
Bank account balances
Verify ending balances per account per period
Tracking Category reports
Confirm Class-based P&L from QB matches Tracking Category-filtered P&L in Xero
Tax totals per period
Compare QuickBooks tax liability reports against Xero's tax return summaries for every period migrated
Sample line-level transactions
If the source used row-level class tagging, sample invoices and bills line by line

Don't move on until

  • Post-load trial balance signed by the controller
  • Banking, tax and payment integrations verified live
  • Users transacting and the first daily reconciliation clean
06 Validation Prove the statements, the tax position and the audit trail. 0/6

Objective Financial statements reproducing the source position, a clean tax filing, and auditor acceptance.

  1. Reconcile the full ledger and all subledgers

    Financial controller 1 week

    Reconcile trial balance, AR, AP, inventory, fixed assets and bank against the signed source position. Produce a single reconciliation pack that goes to the auditor.

    Migration Validation Tool Reconcile QuickBooks and Xero record-for-record
  2. Reproduce the financial statements

    Financial controller 1 week

    Generate balance sheet, P&L and cash flow in Xero and compare to the pre-migration statements. Every variance needs a documented explanation traced to a specific mapping decision.

  3. Complete and review the first period-end close

    Financial controller 1-2 weeks

    Run the first real close in Xero with extra review at every step. Compare its duration and outcome to your historical close, and treat anything unexpected as a live finding.

    Data Profiler Prove field completeness held up through the load
  4. Verify the tax position and file

    Tax lead 1 week

    Generate and review the first tax filing from Xero, reconciling it to the underlying transactions before submission. Have the tax lead review it independently.

    The first statutory filing out of a new ERP should be reconciled manually to source transactions before submission.

  5. Confirm controls, segregation of duties and audit trail

    Financial controller 1 week

    Verify user permissions, approval limits, segregation of duties and audit logging in Xero. Controls do not migrate, and a control gap found by an auditor is far more expensive than one you find yourself.

    PII & Compliance Scanner Produce the compliance evidence your auditor will ask for
  6. Obtain auditor acceptance and retain the archive

    Finance director 1-2 weeks

    Walk the auditor through the reconciliation pack, get written acceptance, and retain QuickBooks read-only for the full statutory retention period. Diarise the retention expiry rather than the contract renewal.

Don't move on until

  • Financial statements match the pre-migration position
  • First period-end close completed and reviewed in Xero
  • Auditor satisfied and archive retained for the statutory period

Field mapping reference

The field-by-field mapping for each object. Use this as the starting point for your mapping spec.

Line Inven ry Limit 4 fields
QuickBooks fieldXero fieldNotes
Historical items (invoices, bills, etc.) 6,000 If you need to import several years of data or more than 6,000 items, please contact Xero for assistance.
Inventory items per CSV 1,000 lines Per-file maximum, excluding the header row
Chart of Accounts 699 accounts Xero's platform-wide limit
Account codes 10 characters Hard limit per account

Risk matrix

Per-object risk for this pair. Plan extra validation around anything marked high.

ObjectRiskNotes
Historical Transactions (older than 2 FY) high Jet Convert compresses these into opening balances. Transaction-level detail, audit trail, and year-over-year comparisons are permanently lost without custom API migration.
Sub-Accounts high Converted to independent flat accounts in Xero. Parent-child hierarchy is destroyed. A clean 150-account COA can bloat to 600+ disorganized accounts.
Jobs (Sub-Customers) high Xero has no Jobs equivalent. Tools either drop them or flatten to standalone contacts. Must be remapped to Tracking Categories, Projects, or Contact Groups.
Classes high Map to Xero Tracking Categories, but only 2 categories with 100 options each are allowed. Sub-classes are flattened and nesting is lost.
Locations medium Can map to the second Tracking Category if Classes already occupy the first. If both Classes and Locations plus a third dimension are in use, one must be dropped.
Multi-Currency Transactions medium Supported for QBO but not Desktop files with multi-currency enabled. FX variance adjustments may be needed post-migration.
Inventory Items medium Conversion Toolbox limits inventory to 1,000 lines per CSV file. Large catalogs must be split into multiple files, increasing error risk.
Payroll Data high Not converted by Jet Convert or the Conversion Toolbox. Must be kept in QuickBooks or migrated via a separate payroll-specific process.
Bank Transactions low Transfer well via all methods, but historical payments linked to invoices outside the 2-year window may fail to map, causing out-of-balance customer accounts.
Special Characters in Data low Colons, semicolons, quotation marks, and tildes in account names or contact fields cause Jet Convert migration failures.

The hard parts

What makes this specific migration difficult, beyond the mechanics.

2-Year History Limit

Jet Convert's free tier only migrates the current and prior fiscal year. Older transaction-level detail is lost unless you pay for extended packages or use custom API migration.

Sub-Account Flattening

Xero has no sub-accounts. QuickBooks parent-child account hierarchies are flattened into independent accounts, bloating the COA and losing structural reporting.

Jobs Hierarchy Loss

Xero has no native equivalent to QuickBooks Jobs (sub-customers). Migration tools either drop Jobs entirely or flatten them into standalone contacts, severing parent-child relationships.

Tracking Category Limits

QuickBooks allows unlimited Classes and Locations. Xero supports only 2 active tracking categories with 100 options each. If you use three or more dimensions, one must be merged or dropped.

6,000-Item Toolbox Cap

The Xero Conversion Toolbox caps historical data imports at 6,000 items total. A business processing 300 transactions per month hits this limit in under 2 years.

Tools used in this playbook

All free, all run entirely in your browser — nothing is uploaded.

FAQ

How many years of data does Jet Convert migrate for free?

Jet Convert migrates the current and prior fiscal year of transactional data for free. Migrating additional years (up to 10) requires a paid package. Everything outside the free window is consolidated into opening balances, destroying transaction-level detail.

What is the Xero Conversion Toolbox item limit?

The Xero Conversion Toolbox caps historical data imports at 6,000 items total across all transactional object types. Inventory item imports are further limited to 1,000 lines per CSV file. Exceeding these limits requires contacting Xero support directly for manual backend intervention.

Do QuickBooks Jobs transfer to Xero?

No. Xero has no native equivalent to QuickBooks Jobs (Customer Jobs / Sub-Customers). Both Jet Convert and third-party tools like MMC Convert exclude or flatten Jobs during migration. You must manually remap them to Xero Tracking Categories, Xero Projects, or Contact Groups.

How do QuickBooks Classes map to Xero?

QuickBooks Classes map to Xero Tracking Categories, but Xero allows only 2 active tracking categories with up to 100 options each. If you use Classes, Locations, and Customer Types in QuickBooks (three dimensions), you must merge or drop one dimension before migrating.

What is the Xero API rate limit for migrations?

Xero enforces 60 API calls per minute and 5,000 calls per day per connected organization. You can batch up to 50 records per request (within a 3.5MB size limit). Exceeding these limits returns an HTTP 429 error, so migration scripts must include retry logic with exponential backoff.

Or skip all of this and let us handle it

Book a 30-minute call and we'll scope your migration in a single session.