10-part guide
Odoo data migration is the least glamorous part of an ERP project and the one that derails more go-lives than any technical failure. The mistakes below are not hypothetical, they are...
Why this matters
Odoo data migration is the least glamorous part of an ERP project and the one that derails more go-lives than any technical failure. The mistakes below are not hypothetical, they are patterns we see repeatedly across our 100+ implementations in the US, Canada, and France. Clean your data before you move it, test your...
1 of 10
Before a single record moves, export your legacy data and profile it: duplicate customer codes, open invoices with no partner, inventory lines with negative quantities, sales orders referencing deleted products. In every project we have scoped, the legacy system contains years of shortcuts. The Contacts module will...
2 of 10
A mid-market company that has run its legacy ERP for eight years probably carries four years of obsolete data: retired products, closed accounts, inactive vendors, voided transactions. Migrating all of it inflates your Odoo database, slows every import test, and forces the accounting team to explain numbers nobody...
3 of 10
Odoo's relational model is not a flat spreadsheet. A customer in the Contacts module is a res.partner record; an invoice in Accounting is an account.move with multiple account.move.line children; a product lives across product.template and product.product. Mapping "customer" from a legacy flat file to a single Odoo...
4 of 10
Odoo's built-in CSV importer is useful for small batches, a few hundred contacts or product templates. For thousands of records it is fragile: timeouts, partial imports, and difficult-to-debug row errors. Large datasets need the External API or xmlrpc batch scripts with proper error logging and retry logic. Write...
5 of 10
Testing imports on a blank demo database is not the same as testing on a database with your real chart of accounts, fiscal years, and tax configurations loaded. Build a staging instance that is a copy of your configured production Odoo, same modules, same tax rules (AvaTax connector if applicable, GST/HST/QST fiscal...
6 of 10
Open invoices, outstanding purchase orders, and unreconciled bank statements must be clean in the source system before migration. If your legacy AR has invoices applied to wrong payments, or purchase receipts without matching vendor bills, those discrepancies will land in Odoo and surface during your first Accounting...
7 of 10
Inventory opening balances are the migration step most likely to be rushed. The Inventory module opens a virtual location called Inventory Adjustments; you load quantities against it on the cutover date at the correct valuation method (FIFO, AVCO, or standard cost). A mismatch between the quantity loaded and the value...
8 of 10
Odoo data migration is a multi-week process: initial extract and profiling, mapping design, first test load, gap analysis, data cleaning, second test load, user acceptance validation, final delta import, and cutover. Compressing this into a single weekend, or worse, a single day, guarantees failures that roll back the...
9 of 10
Between your last test load and cutover day, business continues: new sales orders, new vendor bills, new inventory movements. If your migration scripts re-import from a static extract taken weeks before go-live, those records are missing. Plan a delta extract, the transactions created after the test-load snapshot, and...
10 of 10
A technically successful import is not a business-validated import. After every test load, the accounting manager should reconcile the AR aging, the warehouse manager should spot-check ten SKUs for quantity and cost, and a sales rep should verify three customer accounts end-to-end. Build a formal sign-off checklist,...
Bonus
The ten mistakes above are avoidable with the right partner running point. Here is how to separate the ones who have done this before from the ones who will learn on your timeline:
Read next
Full guide on octurasolutions.com