Store migration and import to Odoo — Shopify, WooCommerce, PrestaShop, Wix, eBay: products, variants, customers, orders, categories, images. CSV field mapping, trial run rolled back, rejection report with the reason, resume where it stopped, no duplicate on re-run. Migrate your shop catalog, one-off, free base.
Overview
Store import to Odoo — the base module
Migrating a catalog from Shopify, WooCommerce, PrestaShop, Wix or eBay almost always goes the same way: a spreadsheet, a sleepless night, and duplicates discovered three weeks later. Existing import modules import — they do not migrate: they cannot resume after an interruption, they do not tell you what they rejected, and re-running them doubles the catalog.
This module sets up the mechanism once, and knows no platform.
Also searched as: Shopify import Odoo, WooCommerce migration Odoo, PrestaShop import Odoo, migrate store to Odoo, CSV product import Odoo, catalog migration Odoo.
Never a duplicate, even when rerun
Every imported record keeps the ID it had in its source store, in a searchable register. A second run finds what already exists and updates it: it recreates nothing. This is the module's first promise, and the first of its tests. Delete a product by hand and run it again: it comes back. Run it again: it is not duplicated.
A migration that really migrates
An import of twenty thousand products interrupted at twelve thousand resumes at twelve thousand. Each step stores its cursor after every page actually written — never before, which would skip records on resume.
Test mode writes for real, then rolls back
Everything is replayed — reading, matching, writing, Odoo's checks — inside a rolled-back transaction. You get the full report without a single line entering the database. A trial run that merely simulated would lie precisely where you rely on it: a missing tax, an unknown currency, a field made mandatory by another module cannot be guessed, they have to be observed. This is the default state of a new migration.
The report, line by line
What went through, what was rejected and why, with the source ID and the offending field. Exportable to CSV, groupable by reason: “412 lines rejected for missing price” can be fixed; “412 lines rejected” cannot. Unchanged records are counted separately from updated records, which makes the second run readable.
Field mapping is data, not code
Which source field maps to which Odoo field, with the conversion to apply and whether it is required. Editable on screen, checked on entry: a non-existent Odoo field is rejected immediately, not at the three-thousandth product of an overnight migration.
No network calls in a process that serves a page
Everything goes through a queue: timestamped batch, manual resume as the only way back, orphaned batches flagged and never restarted on their own. An import therefore never blocks the use of Odoo while it runs.
Useful on its own, with no connector
The foundation reads CSV and JSON files, with encoding and delimiter detection. A merchant who has already exported their catalog needs nothing else: they drop in the file and import it, with the same idempotency, the same dry-run mode and the same report.
What the module does not do
It does not connect to any store on its own: each platform is provided by a satellite module. It does not run a permanent synchronization — it is a migration tool, not a sales connector. It transfers nothing from Odoo to a store: it imports, it does not export.
Specifications
| Price | Free |
|---|---|
| License | LGPL-3 |
| Odoo series | 19.0: published on the Odoo Apps Store; 20.0: published on the Odoo Apps Store |
| Version | 1.0.0 |
| Edition | Odoo Community / on-premise |
| Technical name | dyo_import_boutique |
| Domain | Connectors and automation |
Price excluding VAT as displayed on the Odoo Apps Store; purchase and installation are done on the Store or through your Omnifloo instance.