Moving from 1C to Odoo: a data migration checklist
What to migrate, what to archive, how to verify the result, and why a parallel run matters more than any technical decision. A practical checklist from our projects.
Project facts
Migrations fail on decisions that were not made in time, not on technology. This is the checklist we run on every 1C to Odoo project.
Step 1. Decide what NOT to migrate
The most common mistake is trying to migrate ten years of history. Usually you need:
- master data — products, partners, contracts, employees, warehouses;
- balances at the cut-off date — stock, cash, settlements;
- open documents — unfulfilled orders, work in progress;
- 1–2 years of history, if it is genuinely needed for analytics.
Everything else stays in a read-only archive copy of 1C. Cheaper, faster and safer.
Step 2. Object mapping
Build a table: 1C object → Odoo model → transformation rule → owner. Typical mappings:
| 1C | Odoo |
|---|---|
| Products | product.template / product.product |
| Counterparties | res.partner |
| Contracts | sale.order or a custom model |
| Bills of materials | mrp.bom |
| Warehouses, bins | stock.warehouse, stock.location |
| Stock balances | stock.quant (inventory adjustment) |
Decide separately how to handle product characteristics: in 1C they are often a separate catalogue, while Odoo uses product variants (product.attribute). Copying them mechanically explodes the number of items.
Step 3. Clean the data BEFORE migrating
Moving garbage into a new system is pointless. The mandatory minimum:
- duplicate partners by tax ID;
- products without units of measure or with empty names;
- items with no movement for 3 years — archive them;
- partners without legal details.
The client does the cleaning — only they know what is alive. We provide ready-made reports on problem records.
Step 4. Idempotent loading
Write the loader so it can be repeated any number of times without duplicates: every record gets an external identifier such as 1c_import.partner_00123. On a repeat run Odoo updates the record instead of creating a new one.
In practice we run at least three full loads on a test database before the real cut-over.
Step 5. Reconciliation
Control points that must match to the cent:
- total stock by warehouse;
- settlement balance per partner;
- cash balances;
- number of active product items.
Find discrepancies with a reconciliation script, not by eye.
Step 6. Parallel run
One month of working in both systems. Yes, it doubles the load on people — and it is the only way to surface process mismatches before they become problems. Typically 5–10 nuances nobody mentioned during the audit appear in weeks two and three.
Step 7. Train before go-live
Not after. Role-based sessions: warehouse, sales, purchasing, manufacturing, accounting. Each role gets a short guide for its own scenarios, not a 200-page manual.
How long it takes
From our experience: a small trading company takes 4–6 weeks; manufacturing with BOMs and warehouse management takes 3–5 months. Most of the time goes into agreeing the target processes, not into moving the data.
Similar challenge?
Describe your process — we will estimate the scope and timeline.
Related publications
Migrating from 1C:UPP to Odoo 17: a steel structures plant
We moved manufacturing accounting from 1C:UPP to Odoo 17 — master data, stock, BOMs and work in progress. One month of parallel run, zero data loss.
Odoo from scratch in food manufacturing: lots, shelf life, costing
The company grew without an ERP: orders in messengers, warehouse in a paper notebook. In 10 weeks we deployed Odoo 18 with manufacturing, lot tracking and full traceability.
Custom accounting reports in Odoo: how we build them
Trial balance, reconciliation statements, purchase/sales ledgers and management P&L. Which Odoo mechanism fits each report type — and where not to invent your own.
