Technical guide · Odoo 17, 18 & 19

Sync Stock Across Marketplaces and Odoo

How to keep one single source of truth for inventory across Amazon, Mirakl, ManoMano, Shopify and Odoo: why CSV files and manual updates always lag behind, and how to fix it with a connector.

When you sell the same product on several channels, the core problem isn't having stock, it's having one figure for stock that every channel respects. The moment Amazon, a Mirakl marketplace (Decathlon, Leroy Merlin, El Corte Inglés…), ManoMano, your Shopify store and your Odoo each keep their own copy of inventory, those copies start to drift apart. This guide explains how to build a source of truth in Odoo, why manual methods can't keep up, and what you should demand from a connector for the sync to be reliable. No empty promises: we also tell you where a connector can't help you.

The key concept: a single source of truth

"Source of truth" means there is one single place that decides how many units there are, and everything else follows suit. In an e-commerce setup running on Odoo, that place has to be Odoo, for a simple reason: it's the only point where every event that changes stock converges.

The golden rule: stock is calculated in Odoo and pushed outward; a marketplace is never allowed to dictate the quantity. The direction of stock information is always Odoo → channel. (The opposite direction, channel → Odoo, is only for orders and returns.)

Why CSV files and manual updates fail

Almost everyone starts the same way: exporting a stock CSV from Odoo and uploading it to each marketplace's dashboard, or adjusting quantities by hand. It works with 30 SKUs and one channel. It breaks the moment you grow. Here are the concrete failures you'll run into:

The CSV is stale on arrival

It's a snapshot of stock at the second you export it. Between generating it, uploading it and the marketplace processing it, minutes or hours go by. By the time it's applied, the figure is no longer real because you've kept selling.

Silent mapping errors

A SKU that doesn't match, a shifted column, a decimal comma instead of a point, or an odd encoding, and you publish wrong quantities across hundreds of listings at once, without anyone noticing until the complaint arrives.

It doesn't scale or hold up

With 4 channels and 500 SKUs, reconciling by hand takes hours every day. It falls apart during holidays, staff absences or Black Friday spikes, exactly when a mistake is most expensive.

And the mistakes aren't cosmetic. If you overstate quantities, you sell what you don't have (overselling, cancellations, penalties). If you understate them out of caution, you leave dead inventory unsold. CSV forces you to choose between the two bad options.

The classic collision, step by step

A product with 3 units, listed on Amazon and on a Mirakl marketplace, synced by CSV every hour:

  1. 9:00 AM — You upload the CSV. Amazon and Mirakl show 3 units.
  2. 9:20 AM — You sell 2 on Amazon. Odoo (if the connector reads Amazon) is down to 1. Mirakl still shows 3.
  3. 9:40 AM — You sell 2 on Mirakl, because it still lists 3. You've just sold 4 units while holding 3.
  4. 10:00 AM — You upload the next CSV showing "1 unit". Too late: you already have an order to cancel.

The CSV interval is exactly your risk window. The longer it is, the more likely the collision. That's why the goal isn't "upload the CSV more often", it's eliminating the CSV and syncing event by event.

The right approach: event-driven sync

The reliable alternative is that every stock change propagates by event, not by clock. With Odoo as the source of truth, a well-built connector does three things in a single flow:

That way the CSV disappears, SKU mapping is configured once, and the figure every channel sees always comes from the same calculation. The risk window shrinks from "one hour" to "however many seconds the marketplace takes to apply the change".

What to demand from a connector (an honest checklist)

Not all connectors are equal. Before buying one, ask:

Be wary of anyone who promises "real time" without qualifying the marketplace's own latency. An honest vendor tells you where they can, and can't, fully close the window.

What a connector does NOT fix (let's be honest)

Sync methods compared

Method Latency / risk window Maintenance effort Who's it for?
CSV / manual Hours. Stale on upload. High and daily. Doesn't scale. Few SKUs, a single channel.
Batch cron (every X min) The cron interval. Medium. Needs monitoring. Medium volume, low turnover.
Event-driven connector Seconds (+ channel latency). Low once configured. Several channels, high turnover.

Are there free OCA alternatives?

Yes, and it's worth knowing about them. The OCA community maintains the connector repository (the queue/job framework) and connectors such as connector_woocommerce or pieces for prestashop, free and AGPL-licensed. If you sell on those channels and have a technical team to install it, configure the job-queue and maintain it, they're a perfectly valid and honest option. Event-driven sync can be built on top of them.

The practical limit: for Amazon, Mirakl or ManoMano there is no production-ready, maintained OCA connector. Building order import, pushing available stock, error handling, retries and SKU mapping takes weeks of real work. That's where a proven proprietary connector saves time. It's not magic: it's code someone has already written, tested and maintains for every Odoo version.

One single stock figure, across all your channels

Mirakl connector for Odoo 17, 18 and 19: reads orders from each marketplace, deducts stock in Odoo as the single source, and pushes the recalculated available quantity to every channel. Built and maintained by engineers in Barcelona.

See the Mirakl connector (100 EUR)

Selling on Amazon, Shopify or ManoMano and not sure which connector you need? We'll tell you in 1 minute, free and with no sign-up:

Take the connector test

FAQ

What should be the source of truth for stock?

Odoo. It's the only place where purchases, adjustments, returns and sales from every channel converge, so it's the only one that knows the real quantity. The rule: stock is calculated in Odoo and pushed to each marketplace, never the other way round.

Why does CSV or manual adjustment fail?

A CSV is a stale snapshot: between exporting it, uploading it and the channel processing it, minutes or hours pass during which the figure is no longer valid. It's also prone to mapping errors (SKU, columns, decimals) that publish wrong quantities all at once. It doesn't scale past a few dozen products.

What if it sells at the same time on Amazon and Mirakl?

Without event-driven sync, both can sell the same unit before Odoo deducts it and notifies the other channel: overselling, cancellation and a penalty. The fix is that every sale deducts stock in Odoo instantly and the new available quantity is pushed to the rest immediately.

Is Odoo's standard Inventory enough?

Odoo Inventory manages internal stock, but it doesn't talk on its own to Amazon, Mirakl, ManoMano or Shopify. You need a connector that reads sales from each channel, records them in Odoo, and pushes the available quantity back out. Without that layer, neither Odoo nor the marketplaces know what's selling elsewhere.