I've watched two go-lives slip a month because someone underestimated migration. The work is not glamorous. It is also, more than anything else, where ERP projects quietly fail — and a slipped migration is one of the biggest hidden lines in the real cost of a go-live. This is the list I run, in order, for every engagement.
Inventory of truth
~ 1 weekFind every spreadsheet, every Access database, every WhatsApp group where data lives. If you skip this, you'll discover the "real" master list two weeks after go-live.
- 01List every system, sheet and folder where business data currently lives.Include the "shadow" spreadsheets people maintain on their own laptops.OwnerBA + Ops LeadCritical
- 02For each source, name the human owner — not the department.A department doesn't answer email at 9 PM during cutover.OwnerBAMust-do
- 03Snapshot row counts and last-modified dates per sheet.You're going to need this for reconciliation later.OwnerData LeadMust-do
- 04Flag duplicate masters (e.g. two customer lists, three product catalogs).Decide which is canonical before anyone touches a transformation script.OwnerBA + FinanceCritical
- 05Identify all external feeds (banks, customs, marketplace, EDI).OwnerITMust-do
- 06Document the data dictionary in business language, not column names.OwnerBAMust-do
- 07Confirm legal data retention requirements per object class.OwnerLegal / FinanceNice-to-have
- 08Freeze the source spreadsheets in a "before" backup folder.OwnerITCritical
Cleanse & normalize
~ 2 weeksThe painful one. Most migration disasters live here. Don't let anyone tell you a tool will solve it — a person has to make decisions, line by line.
- 09De-duplicate customer master on tax ID + normalized name.Matching on name alone is how you end up with three "ABC Trading."OwnerSales + FinanceCritical
- 10Standardize units of measure across product master.OwnerOpsCritical
- 11Validate currency codes against ISO-4217.OwnerFinanceMust-do
- 12Resolve "unknown vendor" / "misc supplier" catch-all entries.OwnerProcurementMust-do
- 13Decide the cut-off rule for open vs. closed transactions.Open as of which date? Counted in which period? Get finance to sign this in writing.OwnerFinanceCritical
- 14Flag and isolate non-ASCII data that breaks downstream tools.OwnerData LeadMust-do
- 15Scrub PII from non-production environments.OwnerITMust-do
- 16Enrich missing GL codes against the new chart of accounts.OwnerFinanceCritical
Map & transform
~ 1.5 weeksWhere you decide what the new system is going to think the past was. Spend disproportionate time on the mapping. The transform script is the easy part.
- 17Build source → target field map for every object you'll migrate.OwnerBA + TechCritical
- 18Define default values for every required Odoo field with no source.OwnerBAMust-do
- 19Decide opening balance strategy: per-customer, per-account, per-product.OwnerFinanceCritical
- 20Map taxes, fiscal positions and analytic tags.OwnerFinanceMust-do
- 21Lock the external ID convention (
__import__.<source>.<id>).OwnerTechMust-do - 22Translate UoM conversions where source & target differ.OwnerOpsMust-do
- 23Pre-compute lot/serial assignments for inventory on hand.OwnerWarehouseNice-to-have
- 24Document one-way fields (no rollback path) prominently.OwnerBAMust-do
Load & reconcile
~ 1 week (×2 dry runs)Two full dry runs. Minimum. The first one will fail in interesting ways. The second one is the rehearsal for cutover.
- 25Load order: company → COA → partners → products → BOMs → stock → open docs.OwnerTechCritical
- 26Run dry run #1 against a copy of production config.OwnerTechCritical
- 27Reconcile counts: source rows vs. target records, per object.OwnerData LeadMust-do
- 28Reconcile sums: open AR, AP, stock value to the rupee/dollar.OwnerFinanceCritical
- 29Spot-check 20 random records per object with the source owner.OwnerBA + OwnersMust-do
- 30Document the time-to-load per object for the cutover plan.OwnerTechMust-do
- 31Run dry run #2 with the actual cutover team and timing.OwnerPMCritical
- 32Capture every error message into a known-issue log.OwnerTechMust-do
Cutover & sign-off
~ 1 weekendGo-live is logistics, not engineering. Print the runbook. Print the rollback. Have coffee. Don't be a hero.
- 33Communicate freeze window to operations 14 days in advance.OwnerPMMust-do
- 34Take final source snapshot at T-0; lock write access.OwnerITCritical
- 35Execute the load runbook, signing each step in real time.OwnerTechCritical
- 36Reconcile balances against pre-cutover figures.OwnerFinanceCritical
- 37Run the smoke-test script: 10 happy-path transactions, all modules.OwnerBAMust-do
- 38Get written sign-off from each module owner before re-opening operations.OwnerPMCritical
- 39Post the rollback playbook somewhere physical and visible.OwnerPMMust-do
- 40Schedule a 7-day, 30-day and 90-day reconciliation review.OwnerBA + FinanceNice-to-have
Download as Markdown
Drop it into Notion, GitHub, or your project wiki. Tick boxes. Add columns. Make it yours.
A weekend cutover is just a Tuesday's worth of work, executed by people who slept the night before. Everything in this list exists to make that sentence true.
Clean data is necessary but not sufficient. Once it lands, you still have to prove the workflows hold up — that is the job of a real UAT script — and then get people to actually use the system, which is where change management earns its place in the budget.
FAQ
How long does Excel to Odoo data migration take?
For a Bangladesh SME with 3–5 years of historical data, a clean Excel-to-Odoo migration takes 3–6 weeks: 1–2 weeks for data audit and cleaning, 1–2 weeks for mapping and template preparation, 1 week for test imports, and 3–5 days for final cutover. Poor data quality is the main variable that extends this timeline.
What data should be migrated first in Odoo?
Migrate master data first: chart of accounts, products, customers, vendors, and inventory locations. Then opening balances (accounting), then open transactions (purchase orders, sales orders). Historical transactions are usually not migrated — they stay in the legacy system for reference. Always validate each layer before moving to the next (see the load order in item 25).
What are the most common data migration mistakes in Odoo projects?
The most common mistakes are: migrating dirty data without cleaning first, the wrong import sequence (transactions before master data), skipping test imports, not reconciling opening balances after import, and migrating more historical data than the business actually needs.