A reliable Odoo migration requires more than importing spreadsheets. Decide what to move, clean and map the records, preserve stable identifiers, rehearse the import, reconcile business totals, and approve a controlled cutover. Assign an owner to every dataset and every exception.
Decide what belongs in the new system
Classify data into active master records, open operational transactions, opening financial positions, and historical records. Each category has a different purpose. Do not migrate years of unreviewed records simply because an export is available. Decide what must remain searchable and where the archive will live.
Create a register with the dataset, source system, business owner, volume, quality concerns, target structure, and acceptance check. For a product file, that might include units, variants, categories, suppliers, barcodes, and the treatment of discontinued items.
Preserve identity and relationships
Use a stable mapping between each source record and its target record. Odoo documents External IDs for preserving relationships and updating records through repeat imports. Changing these identifiers can cause duplicate records, so treat the mapping file as a controlled project asset.
A successful customer import can still be wrong if its addresses, contacts, currency, payment terms, or parent relationships are incorrect. Validate linked records as a business object rather than checking isolated rows. Establish a clear rule for duplicate names and obsolete records before loading them.
Rehearse with representative data
- Start with a small sample that contains normal cases and known exceptions.
- Run the import test, resolve errors, and preserve the final mapping.
- Verify relationships and business behaviour using the imported records.
- Reconcile record counts, quantities, open amounts, and agreed control totals.
- Repeat with the complete dataset and measure the actual import duration.
- Record approved exceptions and the owner responsible for each one.
Make cutover an explicit decision
Define when the source system stops changing, how late transactions will be captured, who approves final totals, and who can authorize postponement. A migration plan should state the maximum acceptable unresolved discrepancy rather than relying on a vague sense that the files look correct.
After launch, restrict access to migration files, keep the reviewed archive accessible to authorized people, and dispose of temporary exports according to the organization's retention rules. Avoid sending sensitive production datasets through ordinary enquiry forms or email unless the transfer method has been approved.
Example: investigate a reconciliation difference
Suppose the source system shows a different total for open customer balances than the trial migration. Do not solve the mismatch by changing the control total. Separate the records into missing, duplicate, incorrectly mapped, and intentionally excluded groups, then trace each difference to a documented explanation.
Check whether the two systems use the same cutover timestamp, currencies, document statuses, and treatment of credits. An apparent import defect may be a reporting-filter difference; a matching grand total may still hide customer-level errors. Reconcile both the overall amount and the individual balances that your team will collect after launch.
Apply this to your business.
Review your workflows, current systems and first-release requirements.
Request a business needs reviewCommon questions
Should we migrate all historical transactions to Odoo?+
Not necessarily. Decide which records are needed for operations, reporting, and reviewed retention obligations. An accessible archive may meet some needs with less migration complexity.
Why do stable identifiers matter?+
They connect records and make repeated imports predictable. Odoo's External IDs can help update existing records instead of creating duplicates, provided the identifiers remain consistent.
Sources & further reading
Product capabilities depend on the Odoo version, edition, subscription and configuration. Source documentation supports product facts; project checklists and scenarios are editorial guidance. Confirm current details before purchase.
Odoo export and import data ↗