We got tired of prepping client data in spreadsheets. So we built the tool.
OdooMap AI takes the export your client actually sent and walks it through to a verified Odoo import, with explained column mapping, a gap report you can work down, a read-only check against the live database, and a delivery that reads every record back before it calls itself done. We built it because we needed it on our own migrations, and it turns out other Odoo teams need it too.
(the compass is Mappy. more on that below.)
The sample import runs in your browser on synthetic data, so there's no account to create and nothing gets written anywhere.
- Add files
- Map columns
- Preview & fix
- Check Odoo
- Deliver
The export is rarely the end of the story.
Look at the seven phases of an Odoo migration and you'll find data migration budgeted at around 80 hours, and very few of those hours were ever spent in Odoo. They went into a spreadsheet: finding the three spellings of the same category, working out which column was really the SKU, and doing all of it again when the client sent a revised file.
We did that work by hand on enough projects to know exactly where it goes wrong. The decisions lived in tabs and notes that made perfect sense on the day they were written, the second export quietly undid the first, and the handoff to whoever actually ran the import was usually a Slack thread.
OdooMap keeps the source files, the mapping decisions, and the migration plan together, and it hands the parts a machine is good at, like matching, validating, ordering, and reading back, to the machine while leaving the decisions to a person. We use it on every Odoo migration we run, and it's now available to other implementation teams as a product.
Five stops. Every import walks the same rail.
The sequence is the same whether you're loading 200 contacts or 10,000 product variants, and the rail persists across sessions, colleagues, and revised source files, so you always know which stop an import is at and what's holding up the next one.
Add files
Upload the CSV or XLSX the client actually sent, pick the worksheet, and the original stays untouched. For a full SKU or contact list, choose “Prepare complete list” and OdooMap derives the related models (categories, attributes, variants, companies, addresses) from that one file.
Map columns
Every column gets a suggested Odoo field with the reason attached, whether that's a name match, an inferred type, a value pattern, or the fact that you confirmed the same pairing last time. You confirm, reject, or skip each one, and nothing is approved on your behalf.
Preview & fix
The gap report groups whatever is still wrong, from missing required fields to selection values that don't exist in Odoo to relationships that haven't resolved. Click a preview cell to correct a single record with a reason, or set a column rule for the repeat offenders, and the source values stay intact either way.
Check Odoo
A read-only preflight against the live target that materializes every proposed row, its before-values, the defaults it would pick up, and the order the dependencies will run in. If anything in Odoo moved since the last plan, this is where you find out.
Deliver
Download ordered import CSVs with a manifest, or have a project administrator approve the exact plan and let OdooMap run it against Odoo one row at a time, reading each record back before marking it applied. Either way, every outcome lands in a printable handover report.

An AI sidekick that drafts the plan and leaves the decisions to you.
OdooMap's built-in matching handles the obvious columns on its own, using names, inferred types, value patterns, and what your reviewers confirmed earlier in the same project. When you'd rather not grind through the leftovers by hand, choose Bring in Mappy.
Mappy reads the saved mapping and the gap report for one file and drafts a preparation plan: explained field matches, supported cleanup recipes (trim, case, date format, decimal separator, value maps), and custom-field requests for the columns that match nothing. Every action comes with a reason, you tick the ones you want, and the rest are rejected when you save.
- Never writes to OdooMappy only drafts. Approving an import and running it are separate actions, taken by a person and logged.
- Shows its homeworkOpen “What the AI sees” to inspect the exact request before you confirm.
- Values stay homeCell values are masked or tokenized by default, so headers and value shapes travel to the model and your rows don't.
- Quoted before it runsYou see the model, the columns being sent, and the maximum credits before anything runs or gets charged.
Good preparation should carry forward.
The first import is never the last one, so most of the design effort went into making the third and fourth deliveries uneventful.
Revised exports don't reset the work
When the client sends a new file three days later, you replace the source, review the added and removed columns, and every compatible mapping and rule carries forward. Changed key values get flagged as new identities rather than silently overwriting the old ones.
Stable IDs from day one
Pick a stable source key per file and OdooMap generates portable external IDs bound to the project, model, and key, which turns repeat deliveries and correction imports into reviewed upserts instead of a second set of duplicates.
Relationships you can trust
Products point at categories, addresses point at companies, and order lines point at orders, all resolved through keys or existing Odoo external IDs. Names and “close enough” matches are never resolved automatically.
Recovery you can reason about
Every row is marked as sending before the call goes out, so a timeout or crash can never leave a row eligible for a blind retry. “Reconcile with Odoo” reads the external IDs back and tells you exactly what landed and what didn't.
A playbook that grows
Column aliases and custom-field patterns that keep recurring across engagements can be promoted into an organization playbook, and later projects get the suggestion with a note that it was used in earlier implementations. Only the pattern is stored, never the client's rows.
Handover a colleague can pick up
Source files, mapping revisions, corrections with their reasons, approvals, and outcomes all live together, so when someone else takes over the project the decisions are on the screen rather than in your head.
What it's good at, and where it stops.
OdooMap is an import-preparation and delivery tool rather than a universal migration engine, and it's built to do that one job carefully. Test with representative data in a sandbox before the client's production run, the same way you would with any other tool.
- CSV and XLSX sources up to 50 MB; plans up to 10,000 rows and 50 steps per delivery
- Contacts, products, variants, attributes, categories, vendor prices, sales, purchase, accounting, stock, manufacturing, CRM, employees, and reference models
- Odoo external API access required; hosted plans without API access and private-network instances aren't supported yet
- Not in scope: binary attachments, posting invoices or validating transfers, destructive deletes, and universal rollback
Odoo partners and in-house teams who run more than one import a year.
A project per engagement, seats for the colleagues doing the work, and an organization playbook that gets smarter with every implementation. Plans start at $49 a month, with team and partner tiers that add seats, active projects, and AI credits.
Rather not run the import yourself? We do full Odoo migrations, and OdooMap is how we do the data phase.

