ERP Data Migration Guide: Profile, Cleanse, Rehearse, Reconcile
How to migrate data to a new ERP without losing control: scope, profiling, cleansing, mapping, scripted loads, mock migrations, reconciliation and cutover.
If ERP projects had a single most common cause of go-live pain, it would be data. Not the software, not the configuration — the customer records, product data, stock quantities and balances moved from the old system into the new one.
This guide describes a migration approach that works, based on what we've seen go right and wrong.
Decide the scope first
Not everything should move. A typical scope:
| Category | Examples | Usually migrated? |
|---|---|---|
| Master data | Customers, vendors, products, BOMs, price lists, chart of accounts | Yes, after cleansing |
| Open transactions | Open sales and purchase orders, unpaid invoices and bills | Yes |
| Balances | Stock by location/lot, trial balance at cutover | Yes |
| Comparative history | Monthly balances for prior periods | Often, as summaries |
| Detailed history | Closed orders and invoices from past years | Usually archived instead |
Migrating detailed history is expensive and rarely used. An accessible archive — the old system in read-only mode or an export database — is usually enough.
Profile before you plan
Data profiling means measuring the quality of each dataset:
- Duplicate customers and suppliers
- Products without costs, weights or units
- Inconsistent units of measure
- Free-text fields where codes should exist
- Orphaned records referencing deleted items
Share profiling results with data owners. Numbers concentrate minds: “1,400 duplicate customer records” gets a different reaction than “some data issues.”
Cleanse at the source
Fix data in the old system where possible, so every extract is cleaner. Business owners decide how to resolve ambiguity — which of three duplicate customers is correct, which unit of measure applies. The migration team provides tools to apply decisions at scale.
Map every field
Document how each source field maps to the target, including transformations, default values and validation rules. Keep legacy identifiers on migrated records so everything can be traced back.
Script the loads
Manual spreadsheet imports cannot be repeated consistently. Script the full pipeline — extract, transform, validate, load — so each run is identical apart from deliberate improvements.
Respect load order: reference data first (currencies, taxes, accounts), then partners and products, then BOMs and price lists, then open transactions, and finally balances.
Rehearse, then rehearse again
A mock migration is a full run into a test environment, followed by reconciliation and user review. Plan at least two:
- Mock 1 finds structural problems.
- Mock 2 confirms fixes and measures timing for the cutover window.
Complex migrations need more.
Reconcile everything
After each run, compare source and target:
- Record counts per entity
- Stock quantity and value by location, lot and product
- Open order totals per customer and supplier
- Receivables and payables by partner
- Trial balance
Finance and operations sign off reconciliation reports. If numbers don't tie out, you don't go live.
Cutover
Cutover combines a transaction freeze, final extract, load and reconciliation in a defined window. A stock count close to cutover is strongly recommended. Communicate the freeze to staff, customers and suppliers in advance.
After go-live
Keep the old system accessible read-only for a period. Monitor data quality in the new system with exception reports, and fix root causes rather than symptoms.
Common mistakes
- Treating migration as a final-week task
- No migration owner on the business side
- One-shot manual imports
- Skipping reconciliation
- Migrating everything “just in case”
For the broader project, see the ERP implementation guide. For migration services, see ERP data migration.
Frequently asked questions
Should we migrate all historical transactions?
Rarely. Most businesses migrate master data, open items and balances, and archive detailed history.
How many mock migrations are needed?
At least two full rehearsals with reconciliation; complex migrations often need three or more.
ERP Builders Architecture Group
The engineers responsible for integration design, data migration tooling and performance work across ERP Builders projects.
Related articles
Odoo 20 Upgrade Checklist: Breaking Changes to Check
An Odoo 20 upgrade checklist covering breaking changes: record rules, tracking values, account groups, Field Service, payroll work entries, icons and the RPC API.
Odoo Upgrade Guide: Moving to a New Version Safely
How to upgrade Odoo to a new major version: assessing custom modules, upgrade service vs OpenUpgrade, test cycles and a cutover plan that holds.
Odoo Implementation Guide: Editions, Hosting, Configuration and Go-Live
An Odoo implementation guide covering Community vs Enterprise, hosting choices, key configuration decisions, customisation discipline, data migration and upgrade planning.
Next step
Turn the plan into a working system.
Book a consultation with an ERP consultant. No sales script — just an honest look at your situation.