How to Migrate from Sage, QuickBooks or Xero to ERPNext
Finance migrations fail in predictable ways. Not because ERPNext can't handle the data — it can. They fail because the data coming out of Sage, QuickBooks, or Xero is messier than anyone expects, and because teams underestimate the work of mapping one system's structure to another's.
This guide is written for IT Directors, Finance Directors, and Operations Managers who want to understand what a clean migration actually involves — the technical steps, the realistic timeline, and the specific data quality issues that cause go-live delays.
Why Source System Matters: What You're Actually Dealing With
Each legacy system exports data differently. Before scoping a migration, your implementer should specify exactly what they expect from your source system.
Sage 50 and Sage 200
Sage 50 stores data in a proprietary format accessible via ODBC connection or CSV export. Common export paths:
- Chart of accounts: Export via Reports > Nominal Accounts. Expect 300–800 nominal codes, many created ad hoc over years of use and no longer meaningful.
- Customer and supplier records: Export via File > Import/Export. These often contain duplicates, inconsistent address formatting, and missing VAT registration numbers.
- Transaction history: Sage 50 exports are typically limited to the current financial year. Historical data from prior years requires either a direct ODBC query or manual report export from each year's archived data file.
- Open items (outstanding invoices and purchase orders): This is the critical migration data. Sage exports aged debtor and creditor reports in CSV. These must be reconciled against the nominal ledger before migration begins.
Sage 200 is more accessible — it runs on SQL Server, meaning a skilled developer can query the database directly rather than relying on export wizards. This significantly speeds up data extraction and transformation. Key tables: `SLCustomerAccount`, `PLSupplierAccount`, `NLNominalAccount`, `SLPostedDocument`.
QuickBooks (Desktop and Online)
QuickBooks offers two primary export routes:
- IIF format (Intuit Interchange Format): QuickBooks' native export format. IIF is a tab-delimited text format that can export transactions, lists, and accounts. The challenge: IIF uses QuickBooks-specific account type classifications that do not map directly to ERPNext's account structure.
- CSV export: Available for most report types via Reports > Export. More useful for master data (customers, suppliers, items) than for transaction history.
- QuickBooks Online API: For QBO specifically, the REST API (accessed via Intuit Developer portal) allows programmatic extraction of all entities including journal entries, invoices, bills, and payments. This is the cleanest extraction method — we use a Python-based extraction script that pulls all entities to JSON before transformation.
Common QuickBooks migration issues:
- Inventory items with quantity but no unit cost (common in service businesses that added inventory late)
- Customer "jobs" that don't map cleanly to ERPNext's project structure
- Classes and departments used for cost centre reporting that need to be rebuilt as ERPNext cost centres and departments
Xero
Xero is the most API-friendly of the three source systems. The Xero API (OAuth 2.0, REST, JSON) exposes all core financial data including accounts, contacts, invoices, credit notes, journal entries, bank transactions, and fixed assets.
Extraction via the Xero API is clean but rate-limited: 60 calls per minute, 5,000 calls per day on standard plans. For organisations with large transaction histories, extraction can take several days of incremental API calls.
Key Xero-specific migration considerations:
- Xero uses a single unified contacts list for both customers and suppliers. ERPNext separates these. Contacts flagged as both need to be split and cross-referenced.
- Xero's bank reconciliation data (matched transactions) does not export cleanly — opening balances need to be reconstructed from reconciled statements.
- Xero tracking categories (equivalent to cost centres) need to be mapped to ERPNext's cost centre and department structure before migration.
The 5-Phase Migration Methodology
Phase 1: Audit (Weeks 1–2)
The audit phase is about understanding what you actually have, not what you think you have.
Deliverables:
- Full extract of chart of accounts with last transaction date for each nominal code
- Aged debtor and creditor listings reconciled to the trial balance
- Inventory valuation report reconciled to the balance sheet
- List of all open sales orders, purchase orders, and work orders
- Payroll data summary (headcount, pay frequency, open holiday accruals)
- Identification of integrations feeding the current system (payment processors, ecommerce, payroll, expenses)
At the end of Phase 1, you should know: exactly how much data needs to move, where the data quality problems are, and what the ERPNext chart of accounts structure will look like.
Phase 2: Data Cleanse (Weeks 2–4)
This is the phase that most projects underestimate. Typical data quality issues found during audit:
- Duplicate customer/supplier records: Common ratio is 8–15% duplicates in databases more than five years old
- Nominal codes with no transactions in 3+ years: These should be marked inactive, not migrated
- Open invoices older than 12 months: These need business review — are they genuinely outstanding or have they been informally written off?
- Inventory items with negative stock quantities: These are accounting artifacts that need resolution before migration
- Chart of accounts structural mismatches: Sage's nominal code structure (0000–9999) does not map directly to ERPNext's hierarchical account tree
Data cleanse is done in your source system before extraction, not after import. Trying to fix dirty data inside ERPNext is significantly slower than cleaning it in the familiar source environment.
Phase 3: Parallel Run (Weeks 6–10)
For finance migrations, a parallel run — running both systems simultaneously and comparing outputs — is non-negotiable. You cannot validate an accounting migration without comparing numbers.
Parallel run scope:
- All new transactions entered in both systems simultaneously (by finance team, not IT)
- Weekly trial balance comparison between source system and ERPNext
- Bank reconciliation performed in both systems
- Month-end close executed in both systems and compared
The parallel run typically runs for 4–6 weeks — at least one full financial reporting cycle, ideally two. Teams resist this because it doubles data entry workload. But it is the only way to catch mapping errors before they contaminate your live data.
Phase 4: Cutover (Typically 2–3 days)
Cutover happens at a financial period boundary — typically month-end or year-end. The cutover window requires:
Day 1:
- Final data extract from source system
- Final data transformation and validation scripts run
- Opening balances imported to ERPNext: chart of accounts, customer balances, supplier balances, inventory valuations, fixed asset register
- Bank opening balances set and reconciled
Day 2:
- Full reconciliation of imported opening balances against source system trial balance
- User acceptance testing by finance team on actual opening balances
- Integrations switched to point at ERPNext (payment processor webhooks, ecommerce platform, payroll sync)
Day 3:
- Source system set to read-only
- ERPNext goes live for all transactions
- Hypercare team standing by
Phase 5: Hypercare (Weeks 11–14)
The first four weeks after go-live are hypercare — your implementation team should be on high availability, with response time measured in hours not days. Common post-go-live issues:
- VAT return configuration adjustments (Box 1–9 mappings)
- Bank statement import format adjustments
- Report layout modifications (users always want reports that look like the ones they've used for years)
- Integration edge cases that didn't surface during testing
The 28-Item Data Migration Checklist
Before any finance system cutover, every item on this list should be checked off:
Chart of Accounts
- All active nominal accounts mapped to ERPNext account type
- Account hierarchy validated (assets balance, liabilities balance)
- Inactive accounts excluded from migration
- Cost centre / department structure created in ERPNext
- Inter-company account structure created (if multi-entity)
- Tax account mappings configured (input VAT, output VAT, EC acquisitions)
Customer and Supplier Master Data
- Duplicate records identified and merged
- VAT registration numbers validated (format check)
- Payment terms mapped to ERPNext payment term templates
- Credit limits migrated
- Customer/supplier currency assignments confirmed (multi-currency)
- Bank account details migrated for supplier payments
Open Transactions
- Outstanding sales invoices imported with original invoice date
- Outstanding purchase invoices imported with original invoice date
- Credit notes matched to invoices or left open as appropriate
- Advance payments and deposits correctly allocated
- Open sales orders imported (if order-to-cash history needed)
- Open purchase orders imported (if procure-to-pay history needed)
Inventory
- Item master records imported with UOM mappings
- Stock quantities at cutover date imported per warehouse/location
- Stock valuations reconciled to balance sheet closing figure
- Serial number and batch records imported where applicable
- Item price lists imported
Fixed Assets
- Asset register imported with acquisition date and cost
- Accumulated depreciation as at cutover date imported
- Depreciation method and useful life configured per asset class
Opening Balances
- Trial balance as at cutover date agrees between source and ERPNext
- Bank account opening balances reconciled to bank statements
Real Timeline: What 8–14 Weeks Actually Looks Like
For a finance migration (accounts, customers, suppliers, open items) from a single-entity Sage 50 or Xero business with 20–100 users:
Phase Duration
Audit and scoping 1–2 weeks
Data cleanse 2–3 weeks
ERPNext configuration 3–4 weeks (runs in parallel with cleanse)
Parallel run 4–6 weeks
Cutover 2–3 days
Hypercare 4 weeks
Total elapsed time 8–14 weeks
Multi-entity migrations, businesses with complex inventory, or organisations migrating from Sage 200 with more than five years of transaction history typically run at the 12–16 week end.
The fastest clean migration Techseria has completed was 7 weeks — a single-entity Xero migration with clean data and a finance team that had done a prior system migration and knew what to expect. The longest was 24 weeks — a 12-entity Sage 200 group migration with inconsistent chart of accounts across entities, 8 years of transaction history, and a manufacturing module with 3,000 active BOMs.
Common Data Quality Disasters (And How to Avoid Them)
The chart of accounts mismatch. Sage uses flat nominal code lists (1000–9999). ERPNext uses a hierarchical account tree. Migrating 600 Sage nominal codes into ERPNext without restructuring the hierarchy produces a system that is technically correct but practically unusable for management reporting. Fix: spend time in Phase 2 designing the ERPNext account tree before any data moves.
Historical transaction gaps. Most businesses want some history in their new system. But extracting 5 years of transaction history from Sage 50 (which archives prior years separately) is a multi-week job. Decide in Phase 1 what historical data you actually need — typically opening balances plus 2 years of transaction history is sufficient.
The open item reconciliation trap. Migrating outstanding invoices without ensuring they reconcile to the ledger is the most common cause of post-go-live financial chaos. A supplier balance that differs by £437 because of an allocation that happened differently in each system will take your finance team hours to unravel. Mandate reconciliation in Phase 3 before proceeding to cutover.
What Techseria Delivers
We have delivered 180+ ERP implementations across the UK, UAE, USA, and Europe. Our fixed-fee delivery model means your migration cost is agreed upfront — no surprises when the data turns out messier than expected (because it always does).
For Sage 50/200, QuickBooks, or Xero migrations to ERPNext, we provide full project delivery including data extraction scripting, transformation, cleanse support, parallel run management, cutover execution, and four weeks of hypercare.
Typical fixed-fee finance migration: £25,000–£55,000 depending on entity count, data volume, and integration complexity.
Request a migration scoping assessment at techseria.com. We will review your current system and give you a realistic timeline and cost within five working days.
Ready to accelerate your operations?
See how custom AI solutions, ERPNext integration, and workflow automations can lower your operating costs. Book your free 30-minute Workflow Audit with a senior engineer.


