Ask any company mid-way through an ERP project what's taking longer than expected, and the answer is rarely the software. It's the data. Customer records with three different spellings of the same name, product catalogs with duplicate SKUs, supplier ledgers that don't reconcile with the accounting system, years of stock adjustments nobody documented. None of this shows up in a sales demo, and none of it gets a proper line item in most project plans.

In our experience, companies budget migration as a task — export, import, done — when it's actually a project inside the project. Underestimating it is one of the most common reasons go-live dates slip, and it has nothing to do with Odoo itself. It's almost always about the state of the data going in.

Why migration is harder than the software

Configuring an ERP is a known process: define the modules, set up workflows, train users. Migration is different because it depends entirely on how messy your existing systems are, and that's usually invisible until someone actually pulls the data out. A company running on Excel and an old accounting tool has typically accumulated a decade of inconsistencies nobody had a reason to fix, because spreadsheets don't enforce structure. Odoo does. The moment you try to map that data into a system with defined fields, relationships, and validation rules, every inconsistency becomes a blocker.

What "clean data" actually means

Clean doesn't mean perfect. It means the data is internally consistent, deduplicated, and mapped to the fields Odoo actually needs to run — not just the fields your old system happened to have. This is where a lot of migrations go wrong: teams focus on moving everything rather than moving what's usable. A supplier ledger with fifteen years of history is not necessarily worth migrating in full. In our experience, it's usually more useful to bring in clean opening balances plus a defined lookback period, and archive the rest for reference rather than force it into the new system.

A migration process that actually works

The projects that go smoothly treat migration as its own workstream with its own timeline, not something squeezed in during the last two weeks before go-live.

  1. Audit the source data before writing any mapping — know what you're actually working with
  2. Decide what gets migrated versus archived, by data type, not as a blanket decision
  3. Build the field mapping and run a test import into a sandbox, not production
  4. Reconcile the test import against the source system, line by line, for at least one full data set
  5. Run a second test import after fixes, then freeze the source data before the final cutover

That reconciliation step is the one companies skip most often, usually because of time pressure near go-live. It's also the step that catches the errors that would otherwise surface three weeks into production, when finance can't explain why a customer balance doesn't match.

A migration that looks done and a migration that's been reconciled are two different things — only one of them survives contact with the first month-end close.

Who should own it

Migration needs someone from the client side who actually understands what the old data means — not just IT, but someone from finance or operations who can say whether a number looks right. An implementation partner can build the technical mapping, but they can't tell you that a supplier's balance has been wrong in your old system since 2022. That knowledge has to come from inside the business, which is another reason migration can't be an afterthought handled entirely by the vendor.


If you're planning an ERP move and want a realistic read on what your data migration would actually involve, book a discovery call — we'll walk through it before you commit to a timeline.