Skip to main content
This guide covers moving your accounting from QuickBooks or Xero to DualEntry. Both source systems have a migration connector, so the main decision is how much history you bring across, and that decision drives everything else.

Choose how much history to bring

Two paths lead to a live DualEntry company. Pick one before you touch either system, because they diverge at the first step and converge again only at validation. The table below compares the two paths. A connector migration is the default recommendation. Comparative reporting against a period that exists only as a single opening journal entry is not comparative reporting. The moment an auditor asks what a balance is made of, the answer has to come out of a system you are no longer paying for. Choose opening balances when the migrated periods are already audited and closed, or when the source data is too disordered to be worth carrying. This path also fits when you are cutting over at a year end and genuinely do not need prior-year detail in the new system.

Before you start

Export these from your current system before you begin either path. You reference them during setup and again during validation, and they are the only version of the truth once the source subscription lapses:
  • Chart of accounts: The full account list with names, types, and current balances. In QuickBooks, export from Reports → Account Listing. In Xero, export from Accounting → Chart of Accounts.
  • Trial balance: For every period you intend to migrate, not only the cutover date. This is your primary validation artifact.
  • AR and AP aging: As of the cutover date, by customer and by vendor.
  • Customer and vendor lists: Names, addresses, terms, and default accounts.
  • General ledger detail: For the migrated periods, so you can trace a balance to the transactions behind it.
Save these as CSV files somewhere your team will still have access to in a year. Also confirm who owns the cutover, since both paths have checkpoints that need a decision rather than a task.

Plan your chart of accounts

QuickBooks and Xero identify accounts by name. DualEntry requires a numeric account code for every account, so plan the numbering scheme before you create or map anything. DualEntry assigns each account type a fixed number range rather than leaving the scheme to you. By default those ranges are 1000–1999 for assets, 2000–2999 for liabilities, 3000–3999 for equity, 4000–4999 for revenue, 5000–5999 for cost of goods sold, 6000–7999 for operating expenses, 8000–8999 for other income, and 9000–9999 for other expense and statistical accounts. See plan your numbering scheme for the full table, including how to extend account numbers past four digits. Map each source account to a DualEntry account number, name, and type, and record the mapping in a spreadsheet. You use it during the migration and again during validation, when you need to explain why a source account and a DualEntry account hold different balances. An imported account keeps its source number only where that number already falls inside the correct range for its account type. Otherwise the import assigns it a new number in that range. Expect renumbering if your source scheme does not line up. While mapping, review the source account list for cleanup. Identify inactive accounts you no longer use, accounts that can be merged, and accounts that need new sub-types in DualEntry. A migration is the cleanest opportunity you get to fix chart-of-accounts sprawl, because afterwards every change has history attached to it. For structure and naming guidance, see chart of accounts.

AI-assisted account mapping

On a connector migration you do not map accounts from scratch. DualEntry suggests a target account for each source account using three strategies, in order:
  1. Reuse of prior mappings: If another connection in your organization has already mapped the same source account, DualEntry offers that mapping first.
  2. Fuzzy matching: String similarity on account names and codes.
  3. Semantic similarity search: Embedding-based lookup for accounts whose names differ but whose meaning is close.
DualEntry ranks suggestions by confidence, and you review and confirm each one before it takes effect. DualEntry never applies a suggestion automatically, and confirming a suggestion you have not read is the most common way a migration ends up tying out to the wrong account.

Path A: migrate history with the connector

Start at Configuration → Company → Migrations, select the company, choose Start migration, and pick QuickBooks or Xero. You then work through one mapping step per entity type, accounts first, then classifications, then any vendor, customer, or item mapping the source requires, and finish at the Data Sync step where source records become DualEntry transactions. Three pages carry the detail rather than repeating it here:
  • Migration data scope lists exactly which record types each connector imports, what you recreate by hand, and what an ongoing integration supplies instead. Read it before you commit to a cutover date, because the gaps are where the schedule slips.
  • How to run a migration cutover sequences the day: when to stop posting in the old system, what happens hour by hour, and the go-live checklist.
  • Migration failure modes and recovery covers what recovers on its own, what you re-run, and what can be undone once records have posted.
The one scope difference worth knowing before you choose a path: Xero attachments migrate with their transactions, and QuickBooks attachments do not. If your audit file depends on supporting documents living with the record, plan a separate export from QuickBooks or keep read-only access to it.

Path B: start from opening balances

Use this path when you have decided not to carry transaction history. It produces a correct balance sheet in DualEntry and leaves the detail behind it in the old system. Load master data first. Use bulk import to upload the chart of accounts, then customers, vendors, and items. Map columns to DualEntry fields and review the preview before committing, then spot-check a handful of records against your source exports. Then create a journal entry dated as of your cutover date, debiting and crediting every balance sheet account so the balances match your final source trial balance. Offset to retained earnings. Revenue and expense accounts start at zero, because your income statement begins at the cutover date. If you are cutting over mid-year and want year-to-date income statement balances, post those as a separate entry so the two are distinguishable later. Enter open AR and AP as individual records rather than as part of the opening entry. An aggregate AR balance with no invoices behind it cannot be collected against, cannot be aged, and cannot be reconciled. Use bulk import for volume.
Export historical reports from QuickBooks or Xero before you deactivate the subscription. Once access lapses you cannot retrieve them, and on this path the old system is the only place your transaction detail exists.

Validate the cutover

Both paths end here, and neither is finished until this is done. Run the full tie-out in how to validate and tie out a migration: trial balance agreement period by period, a retained earnings roll-forward, and AR and AP aging agreed to their control accounts and to the source aging by counterparty. Pay particular attention to bank balances, AR, AP, and retained earnings. Those four accounts absorb most migration errors, because everything that goes wrong elsewhere eventually nets into one of them. Agree a materiality threshold with whoever signs off before you start comparing, so a 0.02roundingdifferenceanda0.02 rounding difference and a 2,000 mapping error get different treatment. Differences below it get documented; differences above it get resolved. Document the comparison and keep it. That workpaper is what demonstrates the migration was complete and accurate, and it is the first thing an auditor asks for in the year you switched.

Redirect integrations

After validation, point your external integrations at DualEntry. Disconnect each one from QuickBooks or Xero first, so the same transaction cannot arrive in both systems.
  • Bank feeds: Disconnect at the source, then connect under Configuration → Company → Bank Connections. Confirm the first batch of imported transactions covers the date range you expect and does not overlap migrated history.
  • Payment processors: Configure the DualEntry integration so new charges flow here. See Stripe.
  • Payroll: Reconnect your provider, for example Gusto or ADP, then run one payroll cycle and confirm the journal entry posts as expected.
Check each connector’s cutoff date against your cutover date. A connector that backfills further than you expect will duplicate transactions the migration already brought across. After the first sync from each connector, spot-check one transaction end to end: find it in the source system, find it in DualEntry, and confirm the account, amount, and date agree. A misconfigured connector is much cheaper to catch on its first day than at the first close.

Key differences from QuickBooks and Xero

DualEntry carries capabilities the source systems do not, and a migration is when adopting them is cheapest. Consider each as you settle in.
  • Multi-entity: DualEntry supports multiple legal entities with intercompany eliminations and consolidated reporting. Several QuickBooks files or Xero organizations can consolidate under one DualEntry tenant. See multi-entity consolidation.
  • Dimensional accounting: Instead of tracking departments through classes or tracking categories, define classifications for department, location, and project, and tag transaction lines with them. You get segment reporting without inflating the chart of accounts.
  • Approval workflows: Configure multi-stage approval with role-based and amount-based routing on bills, invoices, and journal entries. See approval workflows.
  • Period locking and audit trail: Close a period and prevent further posting to it, with every change recorded in an append-only audit trail. See period locking.
Adopt these deliberately rather than all at once. Classifications in particular are worth designing before your first close, because retagging historical lines afterwards is manual work.

Common pitfalls

These are the mistakes that cost teams a week, in the order they usually happen.
  • Skipping open AR and AP. Opening balances without the invoices behind them leave you unable to collect, age, or reconcile. Enter every unpaid invoice and bill as of the cutover date.
  • Posting in both systems. Agree the hour the old system goes read-only and enforce it by locking the period there, not by announcing it.
  • Validating against a moving target. Pull your source exports after entry stops, and tie out against that fixed set rather than re-pulling.
  • Not reconciling bank accounts in the first week. Run a bank reconciliation early to catch transactions that fell between systems, especially where the feed lags a day or two.
  • Losing historical reports. Export the P&L, balance sheet, and aging reports before the old subscription ends, and store them where the team can reach them afterwards.
The following pages cover related setup and migration tasks.
Last modified on August 27, 2026