Skip to main content
Odoo knowledge center

Migration

Odoo Data Migration Checklist: Map, Test and Reconcile

A controlled method for deciding what to move, improving source data, testing mappings and proving that Odoo is ready for operational use.

OdooLogics Delivery Team10 min read
Legacy business records moving through validation gates into a structured modern ERP repository

At a glance

Key takeaways

  • Move data because it has operational, legal or reporting value—not by default.
  • Assign business owners to mappings, cleanup decisions and reconciliation.
  • Use repeated test migrations with production-like volumes and relationships.
  • Make final validation and rollback decisions explicit in the cutover plan.

Migration risk rarely comes from the import command itself. The harder questions concern scope, meaning and evidence: which records still matter, how values in the old system map to the new design, who resolves poor-quality data and what proves that balances and relationships are correct after loading.

A migration plan answers those questions before cutover. The checklist below applies whether the source is an older Odoo release, a legacy ERP or several spreadsheets and specialist systems. The technical tools will vary, but the controls needed to protect daily operations remain broadly consistent.

1. Define the migration scope by business purpose

List data domains before selecting individual fields: customers, suppliers, products, units of measure, price lists, bills of materials, chart of accounts, opening balances and open transactions. For each domain, record why it is needed in Odoo, the period it covers and the team that owns its meaning. Separate data required for operations from history retained only for reference.

Avoid assuming that the new ERP must contain every historical record. Archived access to the legacy system or a controlled reporting store may serve some requirements more safely. Reducing scope can improve quality and rehearsal time, but the decision must consider legal retention, audits, service history and user access. Document exclusions so they do not reappear as surprises during acceptance testing.

2. Profile the source before designing mappings

Measure what is actually in the source. Count records, identify null and duplicate values, inspect inactive items, and test whether supposedly unique codes are truly unique. Check relationships such as products without categories, contacts linked to missing companies and transactions that reference archived accounts. A source profile turns vague concern about “dirty data” into a list of observable conditions.

Include business users in the review because technical consistency does not guarantee business correctness. Two customer records may be valid subsidiaries rather than duplicates; an unused unit of measure may be required for seasonal work. Record cleanup rules, exceptions and ownership. Wherever possible, correct data at the source so repeated extracts do not reintroduce the same problem.

  • Record counts and active versus inactive totals
  • Duplicate identifiers and inconsistent naming
  • Missing mandatory values and broken relationships
  • Unsupported formats, currencies, units and date conventions

3. Build a mapping specification that explains meaning

A mapping specification should describe more than source and destination field names. Include transformations, defaults, lookups, relationship order, ownership and validation rules. Note where several source values become one Odoo value or where one overloaded legacy field must be separated. For accounting and inventory data, state the expected effect on balances and valuation.

Use stable external identifiers so related records can be loaded and updated predictably across rehearsals. Decide how archived records, attachments, multilingual values and custom fields will be treated. Mappings should be reviewed by someone who understands the source and someone who understands the target process. This is where differences in business meaning are safest to resolve.

4. Load data in a controlled dependency order

Plan the sequence around relationships. Reference data and configuration normally precede companies, contacts and products; master records precede open transactions; and opening positions are loaded only after their supporting structures are ready. The precise order depends on the solution, but it should be written down and automated enough to repeat consistently.

Keep extraction, transformation and import steps separate where practical. Store source snapshots securely, version mapping logic and retain import logs. If a load fails, the team should know which records were accepted, which were rejected and how to restart without creating duplicates. A repeatable process is more valuable than a one-off import that succeeds only on the original developer’s machine.

5. Rehearse with realistic volume and timing

Begin with a representative subset to prove mappings and relationships, then progress to full-volume rehearsals. Small samples can hide performance limits, duplicate behavior and late failures. Use the same environment assumptions, sequence and validation steps intended for cutover, and record how long extraction, transformation, loading and reconciliation take.

Each rehearsal should have a defined objective and exit criteria. Early runs may focus on structural correctness; later runs should prove completeness, duration and business usability. Track recurring errors instead of fixing them manually inside the target. A successful rehearsal is one the team can explain and repeat, not simply a database that appears populated.

6. Reconcile technical totals and real business scenarios

Validation needs several layers. Compare source and target record counts, totals by company or period, inventory quantities and values, receivable and payable balances, and the status of open documents. Investigate expected differences and document their causes. Automated reconciliation reports are useful, but they should not be the only evidence.

Ask process owners to find known customers, products and transactions, then complete realistic work using the migrated data. They may uncover misleading descriptions, unusable categories or missing relationships that aggregate totals cannot reveal. Record sign-off by domain so accountability is clear and unresolved issues have an owner and assessed impact.

7. Control the final cutover and preserve an audit trail

Define when users stop changing the old system, how the final extract is secured and how late transactions are handled. The cutover runbook should include the exact sequence, owners, credentials, expected duration, validation checkpoints and communications. Establish the conditions for proceeding, delaying or returning to the previous system before the team is under time pressure.

Retain approved source extracts, mapping versions, import logs, reconciliation results and sign-offs according to your security and retention requirements. After launch, monitor the first full operating cycles and restrict ad hoc corrections that bypass ownership. A well-controlled migration leaves a traceable explanation of what moved, how it changed and why the business accepted the result.

Apply this guidance to your Odoo project.

Share your current setup, priorities and constraints with an experienced functional and technical team.

Get a Consultation