ERP data migration is where implementations go to die. 67% of ERP projects go over budget, and dirty data is the #1 reason. This guide gives you a 5-phase migration framework — from data audit through go-live — with field mapping strategy, cleaning checklists, validation steps, and realistic timelines. Whether you're moving from QuickBooks to NetSuite, Sage to cloud, or spreadsheets to a proper ERP, the data migration process is fundamentally the same. Get it right and the rest of the implementation falls into place. Get it wrong and you'll spend six months reconciling a system nobody trusts.
Written by Stuart Wilson, ACMA CGMA — 24 years managing system migrations for Citigroup, PE portfolio companies, and high-growth businesses.
You've been through it. Or you're about to go through it. Either way, you already know the horror stories.
The GL doesn't balance after cutover. AR aging in the new system doesn't match the old one — and nobody can explain the $340K difference. Vendor records got duplicated during import, so now you have three versions of "Office Depot" with different payment terms attached to each. Customer names imported with encoding artifacts, so half your invoice history is linked to "Acme Corp™" and the other half to "Acme Corp." Your controller is running two systems in parallel, manually reconciling every night until 10 PM, and your month-end close just went from 8 days to 22.
I've seen every one of these. More than once. And in every single case, the root cause was the same: the team treated data migration as a technical task instead of an accounting project.
Data migration isn't an IT problem. It's a financial controls problem. The person who should own it isn't your NetSuite implementation consultant — it's your CFO or controller. Someone who understands what the data means, not just how to move it between systems.
1. Why Migrations Fail
I've audited failed migrations. I've been brought in to rescue them mid-stream. The failure modes are remarkably consistent. Here are the three that account for 90% of the damage:
Dirty Data Gets Migrated As-Is
The old system has 4,200 vendor records. 1,100 are duplicates. 600 haven't been used in three years. 200 have incorrect tax IDs. Nobody cleaned them up because "we'll fix it in the new system." You won't. You'll just have 4,200 dirty vendor records in a shinier interface — and your AP team will spend months untangling them while real invoices pile up.
This is the single most common migration failure. Teams export data from the old system, transform it just enough to fit the new system's import template, and load it. They never ask: should this data exist at all?
Audit and clean your data before you touch the new system. Deduplicate vendors and customers. Purge inactive records. Validate tax IDs and addresses. Fix account coding errors. This is Phase 1 of the framework below — and it should take 30% of your total migration time.
No Field Mapping Plan
QuickBooks has "Class" and "Location." NetSuite has "Department," "Class," "Location," and "Subsidiary." Sage Intacct has up to 8 custom dimensions. Your old system's "Project" field doesn't map 1:1 to anything in the new system. If you don't build a complete field-by-field mapping document before migration starts, you'll discover gaps during testing — when it's expensive to fix — or worse, after go-live, when your reports don't slice the data the way your board expects.
Build a complete field mapping spreadsheet: every field in the source system, its corresponding field in the target system, transformation rules, and default values for gaps. Review it with your controller, your implementation partner, and at least one end user who touches the data daily.
Rushing Go-Live Without Parallel Testing
The implementation partner says the system is ready. Leadership wants to stop paying for two systems. Someone picks a go-live date based on a board meeting, not on readiness. The team cuts over without running both systems in parallel. Day one: the balance sheet doesn't match. Day five: payroll runs against the wrong chart of accounts. Day ten: the auditors ask for a report the new system can't generate because nobody mapped that data.
Run both systems in parallel for at least one full close cycle — ideally two. Process every transaction in both systems. Reconcile every account. If the numbers don't tie, you're not ready. Go-live dates should be based on reconciliation results, not calendar pressure.
2. The 5-Phase Migration Framework
This is the framework I use on every migration engagement. It works whether you're moving from QuickBooks to NetSuite, Sage to cloud, or a collection of spreadsheets to your first real ERP. The technology changes. The process doesn't.
Phase 1: Audit & Clean
Duration: 2–4 weeks
Before you migrate anything, you need to know exactly what you have. Export your full chart of accounts, customer master, vendor master, open AP, open AR, and a sample of historical transactions. Then audit them ruthlessly:
- How many duplicate customer/vendor records exist?
- How many GL accounts are inactive or redundant?
- Are tax IDs complete and valid?
- Do payment terms match actual practice?
- How many open items are actually stale (90+ days with no activity)?
This phase produces a Data Quality Report — a document that tells you exactly how much cleaning is needed and where the risk is concentrated. I've seen this step alone prevent six-figure cleanup costs later.
Phase 2: Map & Transform
Duration: 2–3 weeks
Build your field mapping document. Every source field → target field, with transformation rules. This is where you redesign your chart of accounts for the new system's capabilities. Common decisions at this stage:
- Consolidating 400+ GL accounts into a cleaner 150-account structure
- Mapping QuickBooks "Classes" to NetSuite departments and locations
- Defining how multi-currency balances convert at migration date
- Setting default values for required fields that don't exist in the source
- Building transformation scripts for data format differences (date formats, address fields, phone numbers)
Phase 3: Parallel Run
Duration: 2–4 weeks
Load your cleaned data into a sandbox or test environment. Run real transactions through both systems simultaneously for at least one full accounting period. This is non-negotiable. You're looking for:
- Balance sheet tie-out between old and new system
- AR and AP aging agreement
- Revenue and expense recognition matching
- Bank reconciliation parity
- Report output that matches your board deck format
If anything doesn't match, stop. Trace the variance. Fix the mapping or the data. Do not proceed until the numbers tie.
Phase 4: Validate & Reconcile
Duration: 1–2 weeks
This is your sign-off phase. The controller or CFO reviews every reconciliation and formally approves the migration. Key validation checks:
- Trial balance in new system matches source system to the penny
- Subledger totals (AP, AR, FA) agree with GL control accounts
- Customer and vendor record counts match (after planned deduplication)
- Open transaction aging matches between systems
- Key reports (P&L, balance sheet, cash flow) generate correctly
Phase 5: Go-Live & Monitor
Duration: 2–4 weeks post-cutover
Cut over on a weekend. Have your controller, a power user, and your implementation partner available for the first two weeks. Monitor daily:
- Daily bank reconciliation for the first two weeks
- Weekly trial balance comparison against the old system
- Transaction volume tracking (are users actually entering data?)
- Error log review — catch import failures and posting errors early
- End-user feedback collection — identify training gaps before they become habits
Keep the old system in read-only mode for at least 12 months. You will need to reference it.
3. Common Migration Paths
The specific platform pair changes the tooling, but the 5-phase framework applies to all of them. Here's what I see most often:
QuickBooks → NetSuite
The most common migration for companies in the $10M–$100M revenue range. NetSuite's SuiteCloud Data Migration tool handles basic imports, but the real work is redesigning your chart of accounts to take advantage of NetSuite's multi-subsidiary, multi-currency, and dimensional reporting. Expect to consolidate accounts and restructure your reporting hierarchy. Budget 5–8 months for the full implementation; 4–8 weeks for data migration specifically. See our complete QuickBooks to NetSuite migration guide.
Sage → QuickBooks Online or Cloud ERP
Companies on Sage 50 or Sage 100 that have outgrown the desktop model. The challenge here is Sage's proprietary data structures — export options are limited and often require third-party tools like Transaction Pro or direct database queries. Pay special attention to inventory data, job costing history, and custom fields that may not have equivalents in the target system.
Excel / Spreadsheets → First ERP
The hardest migration, paradoxically. When there's no structured source system, your "data" lives in 47 spreadsheets across 12 people's laptops. There's no single source of truth. Step one is always the same: build the chart of accounts and master data from scratch, then enter opening balances as of a clean cutover date. Don't try to import spreadsheet data — manually enter opening balances and go forward clean.
Legacy On-Premise → Cloud ERP
Companies on older platforms like MAS 90, Peachtree, or industry-specific legacy systems. These migrations have the longest timelines because legacy data formats are often undocumented, the original implementer is gone, and custom fields may not be extractable without database-level access. Always engage someone who has worked with the specific legacy platform before — generic ERP consultants will underestimate the extraction complexity.
4. What Data to Migrate (and What to Leave Behind)
This is where I see teams waste the most time and money. The instinct is to migrate everything. Don't. Here's how to think about it:
- Chart of Accounts — redesigned for the new system, not copied verbatim
- Open AP — unpaid vendor invoices and credit memos
- Open AR — outstanding customer invoices and unapplied payments
- Customer master data — active customers with correct contact info, payment terms, tax status
- Vendor master data — active vendors with W-9/tax ID, payment terms, bank details
- Fixed asset register — current assets with cost, accumulated depreciation, and remaining useful life
- Current-year detailed transactions — GL detail for the current fiscal year
- Historical transactions (1–3 years) — summary journal entries by period, not individual transactions
- Job costing data — open/active jobs only; closed jobs as summary records
- Payroll history — YTD totals for current year; prior years usually stay in the payroll system
- Inventory — current on-hand quantities and costs; historical movement stays in old system
- Historical transactions beyond 3 years — keep old system in read-only mode instead
- Inactive customers/vendors — if they haven't transacted in 2+ years, leave them behind
- Voided or deleted transactions — they serve no purpose in the new system
- Duplicate records — clean them out, don't migrate the mess
- Custom reports — rebuild them in the new system using native tools
A $15M manufacturing company moving from QuickBooks to NetSuite: migrated 180 GL accounts (consolidated from 340), 1,200 active customers (from 3,400 total), 450 active vendors (from 1,800), all open AP/AR, current-year transactions, and summary balances for prior 2 years. Total records migrated: ~45,000. Records left behind: ~120,000. The migration completed in 6 weeks. Attempting to migrate all 165,000 records would have taken 14+ weeks and introduced thousands of data quality issues.
5. Data Cleaning Checklist
Print this out. Tape it to the wall. Don't start loading data into the new system until every high-priority item is complete:
| Item | Action | Priority |
|---|---|---|
| Duplicate vendors | Merge duplicates, standardize naming convention (e.g., "Office Depot" not "OFFICE DEPOT INC.") | 🔴 High |
| Duplicate customers | Merge duplicates, assign canonical name, consolidate transaction history | 🔴 High |
| Inactive GL accounts | Mark inactive or consolidate into parent accounts; do not migrate zero-balance accounts with no activity in 2+ years | 🔴 High |
| Tax IDs (W-9s) | Validate all vendor tax IDs; flag missing or malformed EINs/SSNs before 1099 season | 🔴 High |
| Stale open invoices | Review AP/AR items older than 90 days; write off uncollectible AR, resolve disputed AP | 🟡 Medium |
| Payment terms | Standardize across vendors (Net 30, Net 45, etc.); correct mismatches between terms and actual payment patterns | 🟡 Medium |
| Address data | Validate and standardize customer/vendor addresses; fix state abbreviations, ZIP codes, country formats | 🟡 Medium |
| Account coding errors | Run a trial balance and investigate anomalies; reclassify misposted entries before migration | 🟡 Medium |
| Intercompany balances | Reconcile and eliminate; start the new system with clean IC positions | 🔴 High |
| Bank reconciliation | Complete reconciliation through cutover date; no outstanding items should carry over unresolved | 🔴 High |
6. Timeline Expectations
These are timelines for the data migration component specifically — not the full ERP implementation, which runs longer. Set expectations with your board accordingly:
| Complexity | Description | Data Migration Timeline |
|---|---|---|
| Simple | Single entity, one currency, clean books, <500 active customers/vendors | 4–6 weeks |
| Moderate | Multi-department, moderate transaction volume, some data quality issues, basic job costing | 8–12 weeks |
| Complex | Multi-entity, multi-currency, legacy system with poor documentation, heavy customization, 1,000+ active records | 3–6 months |
In my experience, the single biggest timeline risk isn't technical — it's data cleaning. Teams consistently underestimate how long it takes to deduplicate 2,000 vendor records or reconcile three years of intercompany balances. Budget 30–40% of your total data migration timeline for Phase 1 (Audit & Clean). If you skip it, you'll spend that time — and more — fixing problems after go-live.
7. Cost Breakdown
Data migration costs are often buried inside "implementation fees." Here's what the line items actually look like when you break them out:
| Cost Category | Simple | Moderate | Complex |
|---|---|---|---|
| Internal team time | 80–120 hours | 200–400 hours | 500–1,000+ hours |
| Consultant / migration specialist | $8K–$15K | $20K–$50K | $50K–$120K |
| Software licensing overlap | 1–2 months | 2–4 months | 4–6 months |
| Data cleanup tools / third-party ETL | $0–$2K | $2K–$8K | $5K–$20K |
| Training (migration-specific) | $2K–$5K | $5K–$12K | $10K–$25K |
| Total data migration cost | $12K–$25K | $35K–$80K | $80K–$200K+ |
The internal team time is the cost most companies underestimate. Your controller will spend 20–40% of their time on migration activities for weeks. Your AP and AR clerks will be pulled into data validation. If you don't backfill or reduce other workload, something else suffers — usually the monthly close.
8. When to Bring in a Fractional CFO
- You don't have a CFO or senior controller — Someone needs to own the chart of accounts redesign, validate field mappings, and sign off on reconciliation. Your bookkeeper can't do this. Your implementation partner won't do it. This is a finance leadership decision.
- You're migrating during a growth inflection — If you're raising capital, preparing for acquisition, or scaling past $10M revenue, the migration needs to serve your future reporting needs, not just replicate the old structure in a new system.
- Your implementation partner is driving decisions they shouldn't be — Implementation partners are excellent at configuring software. They're not equipped to decide whether your chart of accounts should support location-level P&Ls or how your board wants to see departmental overhead allocation. That's a CFO decision.
- A previous migration attempt failed — If you've already tried once and the data doesn't tie, bring in someone who has done this before. The cost of a fractional CFO engagement ($3K–$8K/month) is a fraction of the cost of a second failed migration.
- Multi-entity consolidation is involved — Intercompany elimination, transfer pricing, and consolidated reporting require finance expertise that most implementation teams don't have at the depth required.
In my experience, companies that bring in a fractional CFO or experienced controller to lead the migration finish 30–40% faster and spend significantly less on post-migration cleanup. The upfront cost is small relative to the risk.