Miko for Odoo
Magento 2 Connector for Odoo
Magento 2 and Odoo, kept in step.
Most Magento connectors are a connector for some other platform with the endpoints swapped. This one is written around how Magento actually models a shop. Configurable products are shells, so it is the sellable simple products that reach Odoo. SKU is the business key, so it is carried and URL-encoded everywhere stock is written. Shipments are real objects, so a validated Odoo delivery creates a Magento shipment with its tracking number.
It runs on a schedule against the Magento 2 REST API using an integration access token, and is deliberate about the places where a wrong guess costs money.
What syncs, and which way
Product and customer export from Odoo back to Magento is not implemented, so the direction setting does not offer it. A setting that can be chosen and silently does nothing is worse than one that is not offered at all.
| Record | Direction | Notes |
|---|---|---|
| Orders | Magento → Odoo | Checked against the total Magento actually charged |
| Products | Magento → Odoo | Simple children imported; configurable shells skipped |
| Customers | Magento → Odoo | Carried with the order |
| Stock | Odoo → Magento | SKU URL-encoded on every write |
| Shipments and tracking | Odoo → Magento | Created when the delivery is validated |
How it works
- Create the API credentials in your store. Read and write access to products, customers, orders and inventory.
- Add the store in Odoo and press Test Connection. It verifies the credentials, names the store back to you, and says exactly what to fix if anything is wrong.
- Import, then look at what arrived. Products, then customers, then orders. Nothing is confirmed or invoiced yet: those switches start off on purpose.
- Turn on the schedule and the write-back. Once you are happy with what came in, enable the scheduled sync, stock publishing and fulfilment individually.
What it will not do
- It never imports the same order twice. Identity goes through the mapping table before anything is written.
- It never invents a tax. An unmapped rate stops the order rather than quietly producing an invoice short by the tax.
- It checks every imported order against the total Magento actually charged, leaving anything that disagrees as a quotation with the difference spelled out.
Written for how Magento models a shop
- Configurable products are shells, so the sellable simple children are what reach Odoo, on both the catalogue and the order.
- An optional store view code scopes every call to one storefront.
- Pagination is sorted by
entity_idascending, so a record cannot shift between pages mid-import and be read twice or skipped. - SKU is the business key and is URL-encoded everywhere stock is written.
When something fails, you are told what to fix
- Failed is transient: a dropped connection, a rate limit, a 502. It is retried automatically with exponential backoff.
- Needs attention means something has to change before it can work: a tax with no mapping, a product not in Odoo, a revoked key. These are never retried on a timer, because a timer cannot fix them, and each one carries the sentence saying what to do.
- Every job keeps the exact payload that caused it, so a retry replays the failure without asking the store for the data again.
- There is a Retry button on every job, and a dashboard filtered to what still needs a person.
Requirements
- Odoo 16, 17, 18 or 19, Community or Enterprise.
- The free E-Commerce Connector Engine.
- Magento 2 with the REST API reachable over HTTPS, and an integration access token with Catalog, Sales and Customers granted and the integration activated.
- Odoo Online cannot run third-party modules that contain Python, which is Odoo's rule rather than ours. Odoo.sh and self-hosted installs are both fine.
Questions
Why can I only sync from Magento to Odoo?
How are configurable products handled?
What happens if an import is interrupted?
Which Odoo versions are supported?
Does it work on Odoo Online?
How do I get help?
Other Miko apps for Odoo
Live on the Odoo App Store, published by Tripster Developers.