Odoo data migration is the work of moving your business data from a source system into Odoo without losing accuracy, history, or relationships between records. It sounds straightforward. In practice it is the phase most implementations underestimate, and the one where source data quality determines whether the project succeeds or requires expensive rework.
📋 Key Takeaways
- Odoo data migration is specifically about extracting, transforming, and loading data from a source system into Odoo. It is not a version upgrade and not a platform switch.
- Three data categories must be handled separately. Master data covers customers, products, and accounts. Open transactions include unpaid invoices and pending orders. Historical data requires a deliberate strategy.
- Dirty source data is the cost driver, accounting for 30 to 50 percent of total migration effort.
- Historical data does not always need to migrate. Opening balances capture the financial position and the source system stays as a read only archive.
- Scripted migration is repeatable and testable. For anything above 500 records, use scripts rather than manual import.
📑 Table of Contents
- Data Migration vs Version Upgrade vs Platform Migration
- Master Data and Its Role in Odoo Migration
- Open Transactions That Must Transfer to Odoo
- Historical Data Strategy for Your Odoo Migration
- Why Dirty Source Data Is the Cost Driver
- Deduplication Before Import
- Validation After Import
- Opening Balance Strategy
- Manual Import vs Scripted Migration
- A Migration Readiness Checklist
- FAQs
Data Migration vs Version Upgrade vs Platform Migration
- Data migration (this article). Moving data from a source system such as Tally, Zoho, SAP, or Excel into Odoo. The source and target are different platforms. The scope is extract, transform, clean, load, and validate. This is what most Indian SMEs face when switching to Odoo via a structured Odoo migration engagement.
- Version upgrade. Moving from one Odoo version to another within the same platform. Data stays in the same database and custom modules need compatibility updates. This is not an odoo data migration in the traditional sense.
- Platform migration. The full project of switching from one system to Odoo. It includes odoo data migration as one phase alongside Odoo implementation, configuration, user training, and go live support.
Master Data: The Foundation of Every Odoo Migration
What master data includes
- Customers. Names, addresses, GSTINs, payment terms, credit limits, and contact persons. The customer record connects to every sales transaction in Odoo.
- Vendors. Supplier records with GSTINs, payment terms, TDS categories, and bank details. Linked to all purchase transactions.
- Products. Product names, internal references, HSN/SAC codes, units of measure, tax rates, categories, and sale and purchase prices.
- Chart of accounts. Ledger structure mapped to Odoo account types. Must be approved by your CA before any other data is imported.
- Warehouses and locations. Warehouse structure, storage locations, and zones. Must exist in Odoo before stock data is imported.
Open Transactions: What Is Still In Flight
Open transactions are records not yet completed as of the migration date. These must be in Odoo from day one.
Open transactions that typically migrate
- Unpaid customer invoices. Outstanding receivables as of migration date. Imported as open invoices so ageing reports and payment tracking work from day one.
- Unpaid vendor bills. Outstanding payables as of migration date. Imported as open bills so payment scheduling and TDS tracking continue.
- Pending sales and purchase orders. Confirmed but unfulfilled or unreceived orders so delivery and goods receipt can be processed in Odoo.
- Opening stock. Inventory quantities and valuations per warehouse and product. Must match the source system exactly on the cutover date.
Historical Data: Migrate, Archive, or Leave Behind
Three strategies for historical data
- Migrate selectively. Import key historical transactions such as the last one or two years of invoices and major customer orders for reference. Effort is high and cost ranges from Rs 1,00,000 to Rs 3,00,000 depending on volume and source complexity.
- Archive in the source system. Keep the old system accessible as a read only archive. Historical lookups happen in the old system while Odoo starts fresh with opening balances. This is the most common approach and balances cost with operational continuity.
- Leave behind. Export historical data to PDF or CSV files for document retention and decommission the source system entirely. This minimises effort but removes system access to old records.
Why Dirty Source Data Is the Real Cost Driver
What dirty data looks like in practice
- Duplicate customers. The same company appears as three separate records under slightly different names. These must be merged into one clean record before import.
- Missing GSTINs. Hundreds of customers with no GSTIN on file. Every invoice to these customers will fail validation in Odoo.
- Products without HSN codes. Products with no HSN assigned will produce incorrect GST calculations from day one.
- Inconsistent units of measure. Odoo needs one consistent UOM per product. Multiple representations of the same unit create import failures and inventory discrepancies.
- Discontinued products still active. Products that have not been sold in two years but remain in the active catalogue add noise to every product lookup and report.
Deduplication Before Import
- Customer deduplication. Match on GSTIN first for B2B records, then match on name and address. Merge duplicates into a single record with the most complete data.
- Product deduplication. Match on internal reference or barcode. Flag similar names with different references for manual review.
- Vendor deduplication. Match on GSTIN and merge payment terms and bank details from all duplicates into one master record.
- Automated vs manual review. Automated matching handles 70 to 80 percent of duplicates. The rest require human judgment.
Validation After Import
Every validation check must pass before go live is approved. Run all validation on a staging database first.
Validation checks that must pass before go live
- Record count. Number of customers, vendors, and products in Odoo matches the cleaned source count exactly.
- Balance reconciliation. Trial balance in Odoo matches the source system trial balance on the cutover date to the rupee.
- Receivable and payable match. Sum of open invoices and bills in Odoo matches the source system outstanding figures.
- Stock match. Total stock value in Odoo matches the source system stock value per warehouse.
- Mandatory fields. No customer without GSTIN where required. No product without HSN code. No vendor without payment terms.
- Relationship integrity. Invoices link to the correct customer. Bills link to the correct vendor. Stock belongs to the correct warehouse.
Opening Balance Strategy
- Opening balances cover asset, liability, equity, receivable, payable, bank, and stock valuations per warehouse.
- They are posted as a single set of entries on the migration date. For Indian businesses, April 1 is the cleanest cutover date because it aligns with the financial year start and avoids GST complications from split periods.
- After posting, Odoo's trial balance matches the source system trial balance. All subsequent transactions are recorded in Odoo.
- Your Odoo accounting configuration must be complete before opening balances are posted. Chart of accounts, tax rates, and fiscal positions must all be in place first.
Manual Import vs Scripted Migration
When manual CSV import is appropriate
- Under 500 records per model and data is already clean and formatted
- Simple field mapping where source columns map directly to Odoo fields
- No relational data that requires linking records across models
- A single import where repeatability is not needed
When scripted migration is the right choice
- 500 or more records per model
- Complex field mappings where source and Odoo data structures differ significantly
- Data transformations needed such as date format conversion or currency recalculation
- Relational imports where invoices must link to correct customers and products must link to correct categories
- Multiple test cycles required before production, making repeatability essential
Odoo Data Migration Readiness Checklist
Complete every item before migration begins.
- Chart of accounts approved by CA and created in Odoo
- India fiscal localisation activated
- Tax rates and fiscal positions configured
- Warehouse and location structure created
- Customer data deduplicated and GSTINs validated
- Vendor data deduplicated with TDS categories assigned
- Product data cleaned with HSN codes, UOMs, and categories assigned
- Discontinued products removed from active catalogue
- Opening balance figures agreed with CA
- Cutover date confirmed as April 1 or first of month
- Source system data exported in agreed format
- Staging Odoo database available for test imports and validation
An Odoo ERP audit before migration identifies configuration gaps and data quality issues before they become import failures.
Need Clean, Validated Odoo Data Migration?
Tatvamasi Labs handles odoo data migration with scripted imports, deduplication, GSTIN validation, and balance reconciliation. Staging tested before production. India compliance validated throughout.
Discuss Your Migration
