The total receivables can be right while part of the balance sits against the wrong customer. “Import successful” is little comfort when your collector starts chasing the wrong amount. You need the accountant to trust each balance, the warehouse team to find the right product in the right location, and everyone to work without checking a parallel spreadsheet.

At ToDoOps, that is the purpose of data migration: records your team can confidently use. This guide explains what to move into Odoo, how relationships and balances are preserved, and what to review before go-live. The ToDoOps homepage shows how migration fits into implementation and team training.

What good Odoo data migration changes for your team

  • A collector opens a customer balance and finds it matches the approved statement, so follow-up starts on day one without checking the old system.
  • A warehouse user receives a product and trusts its unit and location instead of returning to the old spreadsheet.
  • The owner sees sales and receivables in the new system without asking whether the figures are complete.

That is why migration belongs in the purchase decision. A team that trusts its records adopts the system quickly. A team that doubts them keeps a parallel Excel copy.

Data quality before Odoo migration: what the research shows

In Experian research conducted by Censuswide among 250 UK B2B senior decision-makers, 93% expressed confidence in the quality of external business data used for sales and marketing, while 34% reported significant time spent correcting and cleaning it. Fieldwork ran from 16 to 28 July 2026 1.

The study shows how confidence in data can coexist with substantial cleanup work. So ask before migrating: which source is authoritative, has a sample been reconciled with it, who owns each field’s meaning, and where are exceptions recorded?

We suggest an isolated rehearsal containing representative exceptions as well as clean records, with an owner for each data group.

What data should you migrate into Odoo?

Separate three layers, because each has a different acceptance rule:

Layer Examples Decision question
Master data Customers, suppliers, products, price lists Who interprets meaning and approves duplicate treatment?
Opening positions Receivables, payables, opening stock Which document supports each, and who reconciles it?
Detailed history Past invoices and movements Needed for operations, or enough in an accessible archive?

An accessible archive can be appropriate for some history, subject to your approved retention and operating requirements. It is no reason to omit records needed for collections, returns, audit or a contractual commitment. Ask the provider to record each layer’s decision, who approved it, and how the archive can be reached.

Keep a register of source, owner and sensitivity

Before preparing files, list each data group with its source, volume, sensitive fields, exception fields, the person who interprets its meaning, and the acceptance evidence. The implementation team can transform and load records, but an ambiguous old code or a disputed debt needs a business decision from its owner.

Agree who may access working files and when copies are deleted under company policy. Where the first rehearsal does not need real personal data, use invented or masked records.

Odoo data imports: field mapping and stable identifiers

The Odoo 19 Export and import data reference describes accepted import formats (CSV and Excel), mapping file columns to system fields, and a Test step that checks technical validity before import. That check confirms the file is acceptable to the system; it does not prove the meaning or balance is right 2.

External IDs. A unique, stable External ID links an imported record and lets a later import update it. If it is omitted or changes, another record may be created instead of the intended one being updated. A database’s internal ID is not an External ID, so do not carry local numbers between unrelated databases. Agree identifiers per group, record them in the field map, and test a repeat run on a sample.

Omitted versus empty. A column missing from the file is different from a column present but blank; defaults may apply in one case and a value may be cleared in the other. Test the behaviour in your own copy.

Dates, numbers and units. Specify day-month order, thousands and decimal separators, and the unit of each quantity. A format can pass technically while carrying a different meaning. Include examples with different dates and separators instead of trusting the first spreadsheet row. For a Saudi operation, also test the Arabic and English names, currencies and identifiers your staff actually use.

Order. Related records must exist first: contacts before their documents, products before their quantities.

Rehearse in an isolated copy

Use a representative sample with ordinary records, exceptions, blank fields and updates to existing records, plus cases that expose limits: a missing mandatory field, a nonexistent reference, a repeated customer name. A duplicate may be technically accepted, so agree beforehand how duplicates are detected and resolved. Three practical points:

  1. The documentation states that imports are permanent and there is no general undo. Recovery therefore relies on a retained approved input, a backup and a cutoff plan, not on another import or a last-minute deletion.
  2. Large files may need smaller batches. Decide batch size after rehearsal rather than promising a row count or duration in advance, and agree how each batch is identified, checked and resumed.
  3. An optional history-tracking setting can create subscriptions and notifications. Check outbound email, payment and connector activity separately; do not assume an import is silent or that every integration is disabled because the database is a test copy.

Reconcile at four levels

Check counts, detail, balances and stock, and recorded exceptions. At each level the person who owns the meaning should open a record and confirm it. Log every difference with its cause and decision, then repeat the check after correction. Do not invent a date to pass a mandatory field; the record may need correction by its owner or remain in the archive.

A hypothetical example: the total agrees, the allocation does not

This gross SAR receivables example is illustrative. It is not a customer case, a tax calculation or a savings claim.

Position Customer A Customer B Total
Approved source 40,000 30,000 70,000
Incorrect destination 30,000 40,000 70,000

The total matches but acceptance fails, because a collector could pursue the wrong amount. After the mapping is corrected, check individual documents and due dates, then demonstrate the collection process with finance. Apply the same reasoning to quantities by product and location. The accounting guide explains how these balances connect to payment and reconciliation.

Make cutoff a business decision

Agree when the source stops changing, how late transactions are handled, who authorises the final import and which checks must pass. Reconcile the final source position, not a trial report from before later transactions.

A recovery plan must address transactions created after the recovery point, because restoring an older position without them creates a second reconciliation problem. Decide who chooses to continue, correct or restore, and how work resumes. The Odoo Online 19 administration reference documents copying and backup options for that hosting model and states that a test copy disables external actions by default. Custom integrations and automations still need their own checks, and Odoo.sh and privately managed hosting work differently. A retained backup file is not the same as a successful tested restoration. Place migration acceptance in the go-live checklist.

Odoo data migration cost: what drives the work?

A proposal should separate extraction, cleanup, mapping, loading, reconciliation and approval, with an owner for each exception. Source quality, relationship complexity, required history and correction cycles drive effort. A price multiplied by row count does not. For an early view of time and budget, the optional ToDoOps calculators can help; they are not a prerequisite for contacting us.

To see how a quote flows into stock and an invoice, which depends on clean customers and products, try Odoo interactively. It is a guided simulation with sample data for a sales and inventory path, focused on how those teams work together. Odoo apps explains the related modules.

Questions to settle before migration

Must we import all historical records?

Not automatically. Decide which records support current operations and approved retention, and how an archive stays accessible.

Does passing Test mean the migration is accepted?

No. Technical validity must be followed by reconciliation, relationship checks and the intended business task.

Can we import the same file again safely?

Do not assume so. Stable identifiers support updates, but mapping, empty values, relationships and any customised process still need a repeat-run test.

Is a matching overall balance enough?

No. Check allocation and supporting detail by customer, supplier, currency, product or location as relevant.

What should we provide at first contact?

Describe your current systems, data groups and the work that must continue. No sensitive export or login details are needed to begin defining scope.

Sources and references

[1] Experian / Censuswide. Original source. 2026 research on external business-data quality. Censuswide fieldwork, 16–28 July, among 250 UK B2B senior decision-makers, concerning sales and marketing data.

[2] Odoo — official documentation, version 19.0. Export and import data, field mapping, external IDs, and Odoo Online administration and test copies. These document the configuration and workflows discussed in this guide.

Start with what your team must trust after the move

Tell us which system holds your records and which balances or processes concern you. Discuss your Odoo migration scope with ToDoOps so we can identify owners, checks and deliverables before implementation is agreed. You can also begin at the ToDoOps homepage to see the full approach, or estimate time and budget first with the calculators.