Home
WorkBlogAboutContact
Free quote
← Back to blog

Data migration to Odoo: method and pitfalls to avoid

Data migration is the phase of an Odoo project that clients underestimate most consistently. The assumption is that you simply export an Excel file and import it into Odoo. In practice it is often the most time-consuming phase of the project, and the one whose mistakes are the most expensive to fix once you are live.

Here is what we have learned from twenty Odoo deployments for Moroccan SMEs.


Which data needs to be migrated?

It all depends on where you are starting from. The data to migrate falls into several categories:

CategoryTypical dataComplexity
Master dataCustomers, suppliers, products, price listsMedium
StockQuantities per location, serial/lot numbersHigh
AccountingOpening balances, invoice historyHigh
SalesOpen orders, active contractsMedium
HREmployees, contracts, seniorityLow to medium

For a typical deployment in a Moroccan SME, we migrate customers, suppliers and products (the master data) first, then stock and accounting opening balances. Past order history is often kept in the old system as an archive rather than migrated in full.


The most common problems in the source data

Before importing anything into Odoo, the existing data has to be audited. Here is what we find almost every time:

Duplicates in the customer base. A company that has been trading for 10 years often has the same customer under 5 different names: "ATMI", "ATMI Maroc", "A.T.M.I.", "ATMI SARL", "atmi maroc". In Excel, that goes unnoticed. In Odoo, it creates duplicates that pollute reports and invoicing.

Inconsistent product references. One item created under 3 different references depending on who entered it, labels that change from one document to the next, prices that no longer match reality.

Incomplete contact data. Missing e-mails, phone numbers in different formats (05, 0600, +212), partial addresses.

Mixed units of measure. "Piece", "unit", "u.", "pcs", "pc" for the same thing on different lines.

Inaccurate stock. The Excel inventory has not been updated for three months. The quantities actually in the warehouse do not match the files.

Cleaning this data before the import is non-negotiable. An Odoo loaded with dirty data produces wrong reports, invoicing errors and a distrust of the system among your teams from day one.


The 5-step migration method

Step 1 — Audit and source mapping

Identify every data source: Excel, the old invoicing software, HR software, the teams' personal spreadsheets. For each source, understand the data structure and the fields available.

At this stage, surprises are common: a salesperson who manages their customers in a personal file that nobody else has, paper invoices never entered anywhere, an old piece of software that only exports PDFs.

Step 2 — Data cleaning

This is the longest phase. For each category of data:

  • Customers and suppliers: deduplication, name standardization, validation of ICE numbers (Identifiant Commun de l'Entreprise) and contact details
  • Products: merging duplicates, standardizing labels and units, validating prices
  • Stock: a physical inventory if possible, or validation of quantities with the stock manager
  • Accounting: validation of balances with your accountant or chartered accountant

This step takes between 1 and 4 weeks depending on the volume and the quality of the source data. At Nexa Code Agency, we support the client with verification tools that flag anomalies automatically.

Step 3 — Preparing the import files

Odoo accepts CSV imports for most objects. For each type of data, you need to prepare a file that follows the format Odoo expects: columns in the right order, values in accepted formats, standardized country and currency codes.

For complex data (bills of materials, product variants, lots), the import may require a Python script rather than a simple CSV.

Step 4 — Test import in a staging environment

We never import data straight into production. We use a staging environment (a copy of Odoo used for testing) where we import the data, check the results, fix the errors, and rerun the import until everything is clean.

This test cycle can take three to five iterations for a complex import.

Step 5 — Production import and validation

Once the import is validated in staging, we replay it in production, ideally over a weekend to minimize the impact on the business. After the import, we run a full validation with the business owners: checking balances and spot-checking customers and stock.


Accounting: the most delicate part

Migrating the full accounting history to Odoo is often pointless and always complex. Our usual recommendation: migrate only the opening balances at the Odoo start date, and keep the old software or the Excel archives for earlier history.

Opening balances cover:

  • Customer balances (receivables) and supplier balances (payables) at the start date
  • The valued stock balance at the start date
  • Balance sheet accounts (cash, fixed assets, loans)

These balances must be validated by your chartered accountant before being imported. An error in the opening balances skews every financial statement Odoo produces afterwards.

If your accountant uses accounting software separate from Odoo, we can set up automatic invoice synchronization between Odoo and their software, without having to migrate the history.


How long does a migration take?

Durations depend on the volume of data and its initial quality:

ScopeClean dataData needing cleanup
Customers + products only1 week2-3 weeks
+ Stock2 weeks3-4 weeks
+ Accounting (opening balances)3 weeks4-6 weeks
+ Full accounting history4-6 weeks6-10 weeks

These durations include the audit, the cleaning, the test imports and the validation. Validation by the business teams (who need to check that "their" data is really there) often takes longer than anyone anticipates.


What should not be migrated

Sometimes the best migration decision is not to migrate. The cases where we recommend starting from scratch rather than migrating:

Very old sales history. Orders from 2015 in a 2026 Odoo have no operational use. They weigh the system down and create confusion. Keep the archive in Excel or in the old software.

Damaged or obsolete stock. If part of your stock is known to be expired or unusable, a physical inventory before the migration is the chance to clean house rather than migrate fictitious stock.

Poor-quality data that cannot be fixed. If a customer base is so degraded that it cannot be cleaned without disproportionate manual effort, it may be faster to rebuild it from real invoices than to try to salvage the existing files.

For the details of our full Odoo deployment process, see our Odoo ERP service. If you are weighing up which edition to choose, read our comparison Odoo Community or Enterprise. For sector projects, see Odoo for construction.


Frequently asked questions

Can we import data from proprietary software that only exports to PDF? It is possible but costly. Extracting data from PDFs requires optical character recognition (OCR) tools or manual entry. For large volumes, we assess with the client whether it is worth the effort or whether it is better to start from scratch.

What happens if we discover an error in the data after go-live? We fix it. In Odoo, data can be edited or deleted (subject to certain conditions tied to accounting regulations). The sooner an error is detected, the sooner it is corrected. That is why we plan an intensive validation period during the first two weeks after launch.

Can the data migration be done without stopping the business? For master data (customers, suppliers, products), yes: we can import outside working hours. For stock, you ideally need to pause logistics activity for the opening inventory and the import. For accounting, the start happens on a precise date (start of a month or start of a financial year) so that balances line up.

Do we need to validate the migration with our accountant? For anything that touches accounting (opening balances, aged customer and supplier balances), yes. The chartered accountant is the only one who can confirm that the balances imported into Odoo match the company's accounting reality.

We work with SMEs across Morocco, including in Mohammedia, Casablanca and Rabat.

Got a project in mind?

Let’s talk. Get a free quote within 24 h.