Quick Answer
To migrate Excel data to Odoo successfully: (1) Export a "Golden Template" from Odoo with the exact column headers it expects, (2) Map your Excel data to this template using External IDs for relational fields, (3) Import in the correct hierarchy (parents before children), (4) Test in a Sandbox database with small batches first, (5) Run final import in Production with validated data. Never change Odoo's column headers—only the data below them.
Why Most Excel-to-Odoo Migrations Fail
Most users try to mold Odoo to fit their Excel sheet. You must do the opposite.
Odoo has specific expectations for column headers, data formats, and relational links. If you just upload your existing Excel file, you'll get errors, duplicates, or worse—corrupted data that takes weeks to clean up.
The Reality: A successful migration isn't just about moving data; it's about cleaning it. Use this opportunity to purge old leads and dead stock.
Step 1: Create the "Golden Template" (The Secret)
This is the technique that separates successful migrations from disasters.
The Golden Template Strategy
Go to the Odoo App
Navigate to the model you want to import (e.g., Contacts or Products)
Create 1 Perfect Record
Manually type in one dummy customer with all the fields you care about (Name, Phone, Tags, Salesperson)
Export It
Select the record → Click Actions → Export → Check "I want to update data (Import-compatible export)" → Select the fields you filled in
Download: This is Your Golden Template
This Excel file has the exact column headers Odoo expects. Fill in your data below these headers.
💡 Pro Tip: Never change the column headers generated by Odoo (e.g., id, name, street). Change only the data below them.
Step 2: Clean and Map Your Data (The Hard Part)
Standardize Your Data
Clean data means consistent data. Odoo uses specific values for relational fields.
The Fixes You Must Make
States/Countries: Your Excel might have "New York" and "NY." Odoo needs ONE standardized format. Pick one and apply it consistently.
External ID (Critical): Every record needs a unique ID. If you have an old ERP ID or legacy Excel ID (e.g., CUST-001), put this in the External ID column (often labeled id in the template). This prevents duplicates and allows updates later.
Relational Fields (The Trap)
This is the biggest failure point. Odoo doesn't want the name of the sales rep; it wants the sales rep's External ID.
| Your Excel Column | Odoo Template Header | Data to Use |
|---|---|---|
| Sales Rep Name (John) | user_id/id | External ID of John's user record |
| Product Category (Apparel) | categ_id/id | External ID of "Apparel" category |
⚠️ Common Mistake: Using "John Smith" instead of "user_john_smith" (the External ID). Odoo will reject the import or create orphaned records.
Step 3: Import in Order (The Hierarchy)
Odoo is a relational system. You must load the "parent" record before the "child" record that relies on it.
The Mandatory Import Order
Users
So you can assign things to them
Chart of Accounts / Tax Rates
If migrating accounting
Contacts (Customers/Vendors)
So you can link orders to them
Product Categories
So products have a home
Products
Links to Categories
Inventory Stock Levels
Links to Products
Open Sales/Invoices
Links to Contacts and Products
⚠️ Warning: Never try to import "Sales Orders" before "Products." Odoo won't know what you are selling. The import will fail or create broken records.
Step 4: The Test Run (Validation)
The Mandatory Sandbox Test
Never import directly into your Production database.
The Validation Workflow
1. Duplicate Your Database
Create a "Staging" or "Sandbox" copy of your Odoo Production database
2. Import Test Batch
Import 5 records of each major model (5 Customers, 5 Products, 5 Stock Moves)
3. Check for Errors
If an error occurs, the message is clearer with a small batch. Fix the template, not the data
4. Full Dry Run
Once the small batch is perfect, import all 10,000 records into the Sandbox. Check totals match your Excel reports
Step 5: The Final Import (Go Live)
When running the full import in your Production database, pay close attention to the logs.
Final Import Checklist
In the target Odoo model, click Favorites → Import Records
Upload your "Golden Template" (now filled with real data)
Click Test—Odoo will run validation
If it says "Everything seems valid"—proceed
If you get errors—go back to Step 2
Click Import—the final step
Time the process and immediately check the model's list view
Frequently Asked Questions
How many records can I import at once?
We recommend splitting files into batches of 1,000 to 2,000 rows. While Odoo can handle more, larger files are harder to debug if an error occurs. Smaller batches = faster error identification.
Can I undo an import?
No. There is no "Undo" button for imports. This is why testing in a Staging Database (Sandbox) first is mandatory. If you mess up in Production, you have to manually delete thousands of records or restore a backup.
How do I import product images?
You cannot upload image files directly via Excel. You must provide a public URL for the image (e.g., https://mysite.com/images/shoe.jpg) in the image_1920 column. Odoo will download and save it during import.
What if I get "duplicate key" errors?
This means you're importing a record with an External ID that already exists. Either (a) you're accidentally re-importing, or (b) your External IDs aren't unique. Check your id column for duplicates before importing.
Can I update existing records via import?
Yes. If you include the External ID of an existing record, Odoo will update it instead of creating a duplicate. This is why External IDs are so important—they enable both initial import and ongoing bulk updates.
Why Braincuber for Data Migration?
Data migration is tedious, error-prone, and risky. Braincuber offers:
Automated Data Cleaning
Migration Execution
Conclusion: Data is the Lifeblood
A successful migration isn't just about moving data; it's about cleaning it. Use this opportunity to purge old leads and dead stock.
Dreading the Excel cleanup? We have pre-built Python scripts that clean and validate data automatically. Let us handle the mess so you don't have to.
Book a Data Migration Service
Get your Excel data cleaned, validated, and imported into Odoo—without the headaches. We handle the technical complexity so you can focus on your business.
We handle the mess so you don't have to.

