Technical guide · Odoo 17, 18 and 19

Stop Multichannel Overselling in Odoo

Why you sell units you no longer have when you're live on several marketplaces, how to spot the problem, and how to close it for good with real-time stock synchronization.

Overselling (selling a unit that's no longer in the warehouse) is rarely a one-off human error: it's a structural problem in how stock is synced between Odoo and your sales channels. While you sell only on your own website the risk is low, because there's a single source of truth. The moment you add Amazon, a Mirakl marketplace or ManoMano, you get several copies of the same stock that all have to stay in sync — and that's where the problems start.

Symptoms: are you overselling?

If you recognize two or more of these, you have a synchronization problem, not bad luck:

Why it happens: the three real causes

1. Stock not synced in real time

Each channel holds its own available quantity. If a sale on channel A doesn't immediately deduct from channel B, both can sell the same unit during those seconds or minutes. This is the root cause in 90% of cases.

2. Marketplace-side latency

Even if you send the update instantly, the marketplace still takes time to process it. Amazon, for instance, queues inventory feeds and can take anywhere from minutes to over half an hour to apply them during load peaks. That window is enough to sell more than you have.

3. Manual or batch updates

Uploading a CSV every morning, or a cron that syncs "every hour," guarantees that published stock is stale for the whole interval. On 1-2 unit, high-turnover products, an hour is an eternity.

The mechanism, step by step

Picture a product with 1 unit listed on both Amazon and a Mirakl marketplace:

  1. 10:00:00 — A customer buys the unit on Amazon.
  2. 10:00:02 — Odoo receives the order (if the connector works by webhook), or doesn't find out until the next cycle (if it works by polling).
  3. 10:00:05 — Another customer buys the same unit on Mirakl, because it still shows as available there.
  4. 10:00:30 — Odoo tries to push "0 stock" to Mirakl, but it's too late: you now have two orders and one unit.

The result is an order you'll have to cancel. The longer any of those delays run, the more likely the collision. That's why the goal isn't "sync more often" — it's shrinking the window to its minimum.

What doesn't fully fix it (let's be honest)

The fix: event-driven, real-time synchronization

To close overselling at the root, you need Odoo to be the single source of truth for stock, with every change propagated to all channels on an event, not on a clock. In practice, a well-built connector does three things:

To be fair and honest: no connector removes the marketplace's internal latency (cause #2). What it does remove is the latency that's on you (causes 1 and 3), which is the majority of it. Combined with a minimum buffer of 1 unit on your most critical SKUs, overselling goes from weekly to anecdotal.

Webhook vs. polling: what to demand from your connector

Not every marketplace offers real-time notifications. Here's what you're actually dealing with:

On Mirakl (Decathlon, Leroy Merlin, El Corte Inglés, etc.) you mostly work through its offers and orders API; on Amazon, through SP-API and its inventory feeds. Each has its own timing, and a serious connector should document it instead of promising you "real time" with no caveats.

Causes and fixes at a glance

Cause Typical symptom Fix
Stock not synced in real time Two channels sell the same unit Event-driven sync, Odoo as the single source of truth
Marketplace latency The feed takes time to apply Minimum buffer on critical SKUs (can't be fully removed)
Manual / batch updates Stock stale for the whole interval Automated connector, no CSV or hourly crons

Alternatives: are there free OCA modules?

Yes, and it's worth knowing about. The OCA community maintains the connector repository and connectors like connector_woocommerce or pieces for prestashop, free and AGPL-licensed. If you sell on those channels and have in-house technical staff to install, configure and maintain a job queue, they're a perfectly valid and honest option.

The practical limit: for Amazon, Mirakl or ManoMano there is no maintained, production-ready OCA connector, and building event-driven sync with error handling, retries and SKU mapping is real engineering work. That's where a proven proprietary connector saves you weeks. It's not magic — it's code someone has already written, tested and maintains.

Sync stock by event and stop cancelling orders

Mirakl connector for Odoo 17, 18 and 19. Reads orders, deducts stock in Odoo and pushes the available quantity to every channel. Built and maintained by engineers in Barcelona.

See the Mirakl connector (€100)

Not sure which connector you need for your channels? We'll tell you in 1 minute, free and with no signup:

Take the connector test

FAQ

Why does overselling happen with several marketplaces?

Each channel keeps its own copy of stock. If sales aren't deducted instantly on the rest, there's a window where two channels sell the same unit. The root cause is the latency between the real sale and the available-stock update reaching the other channels.

How often do you need to sync to avoid it?

Ideally by event (when the quant changes in Odoo), not on a fixed interval. If interval-based sync is the only option, every 5-15 minutes cuts the risk a lot, but doesn't eliminate it on low-stock, high-turnover SKUs. Only real time closes the window completely.

Are stock buffers enough?

They reduce the odds but don't eliminate them, and they leave inventory unsold. They work as a temporary patch or as a safety net on your 5-10 most critical SKUs, not as a standalone fix. On 1-2 unit products, a buffer stops you from selling them at all.

Is Odoo's standard Inventory enough?

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