Skip to Content
How to Prevent Overselling on Multiple | ERP2MARKET
How-to Guide · March 2025 · 8 min read

How to Prevent Overselling on Multiple Marketplaces (2025)

Selling the same inventory on Amazon, Bol.com, Zalando and your own webshop simultaneously is powerful — until the last unit sells on two channels at once. Oversells damage your seller metrics, trigger cancellations, and cost you customer trust. This guide explains exactly why they happen and how real-time stock sync from Odoo eliminates them.

Why oversells happen on multiple channels

An oversell is not a stock problem — it's a synchronisation problem. You have the stock. The issue is that two channels sold from it at the same time, because neither knew the other just sold the last unit.

Here's the exact sequence that causes most multi-channel oversells:

The oversell scenario — manual stock management
You have 1 unit of Product A in stock. Amazon shows 1. Bol.com shows 1. Both are correct — at this moment.
A buyer on Amazon orders Product A at 14:03. Amazon confirms the order.
You update Amazon stock to 0 manually — but you do this at 16:00 during your daily stock update run.
At 14:47, a buyer on Bol.com orders Product A. Bol.com still shows 1 in stock — because you haven't updated it yet.
Two confirmed orders. One unit. You cancel one. Your seller metrics on both platforms take a hit.

The window between "stock changed in reality" and "all channels updated" is where oversells live. With manual stock management, that window is hours. With batch sync tools, it's minutes. With real-time sync from Odoo, it's seconds.


The real cost of an oversell

An oversell isn't just a frustrated customer — it has measurable consequences on every marketplace it touches:

ConsequenceImpact
Order cancellationCounts against your cancellation rate metric on every marketplace
Negative buyer reviewBuyer expected delivery — cancellation after purchase damages trust
Marketplace penaltyAmazon, Bol.com and Zalando all penalise high cancellation rates with reduced visibility
Amazon seller scoreOrder Defect Rate (ODR) is affected — above 1% triggers account review
Bol.com seller scoreCancellation rate above 2% triggers dashboard warnings
Lost revenueThe sale you had to cancel — and the repeat buyer you lost
Operational costCustomer service time to handle the cancellation and apology

One oversell per month at low volume is manageable. At 100+ orders per day across 5 channels, even a 0.5% oversell rate means multiple incidents weekly — each one damaging metrics on the channel it hit.


Three approaches — and why two fail

1. Manual stock updates (fails at any real volume)

Logging into each marketplace portal and updating stock levels manually works at 2–3 orders per day on one channel. At anything above that, the time cost is unsustainable and the synchronisation gap is too large. At 50+ orders per day across 3 channels, it's a guaranteed path to oversells.

2. Batch sync (reduces but doesn't eliminate)

Many integrations sync stock in batches — every 15 minutes, every hour, or twice daily. This reduces the synchronisation gap but doesn't close it. A batch sync every 15 minutes still leaves a 15-minute window where a fast-moving product can oversell across channels. For products that move 10+ units per day, 15 minutes is enough time for an oversell.

3. Real-time sync from a single stock source (eliminates oversells)

The only reliable solution is a single source of truth for inventory — your Odoo instance — with every stock movement immediately propagated to all connected channels. When an order arrives from any channel and reduces Odoo stock, all other marketplace listings update within seconds. There is no synchronisation gap to exploit.

The same scenario — with real-time sync from Odoo
You have 1 unit of Product A in Odoo. Amazon shows 1. Bol.com shows 1.
Amazon order arrives at 14:03. ERP2MARKET imports it to Odoo as a sale order. Odoo stock decrements to 0.
ERP2MARKET immediately pushes stock=0 to all connected marketplace listings — including Bol.com.
By 14:04, Bol.com shows 0 in stock. The listing is no longer orderable.
No oversell. One order, one unit, one happy customer.

How real-time stock sync from Odoo works

ERP2MARKET's stock sync reads directly from Odoo's stock.quant table — the actual inventory module, not a mirrored copy. Every stock movement in Odoo triggers a sync event:

  • Marketplace order imported → Odoo stock decrements → sync fires immediately
  • Purchase receipt validated → Odoo stock increments → sync fires immediately
  • Manual inventory adjustment → Odoo stock changes → sync fires immediately
  • Return restocked → Odoo stock increments → sync fires immediately
  • Scheduled sync → every 5–15 minutes as a safety net, regardless of movements

Every connected marketplace channel receives the updated stock level simultaneously. Amazon, Bol.com, Zalando and any other active channel all update from the same Odoo stock figure at the same time — there's no priority ordering or sequential update that could leave one channel briefly out of sync.

💡
Odoo as the source of truth: The key architectural point is that Odoo's inventory module is the authoritative source — not a copy of marketplace stock. All channels read from Odoo. No channel writes stock back to Odoo independently. This single-source architecture is what makes real-time sync reliable at scale.

Safety stock buffers — when to use them

Even with real-time sync, there's a small latency between Odoo updating and the marketplace listing reflecting the change (typically 1–5 minutes, depending on marketplace API response times). For most products, this latency is inconsequential. For fast-moving products at low stock levels, it creates a small residual oversell risk.

A safety stock buffer subtracts a fixed number from the stock level published to each marketplace. Odoo stock of 5 with a buffer of 1 publishes as 4 on all channels. When Odoo stock hits 1, channels see 0 and the product becomes unorderable — before the last unit is actually gone.

SituationRecommended bufferWhy
Slow-moving products (<5 sales/day)0 (no buffer)API latency is negligible vs. order frequency
Medium-moving (5–20 sales/day)1 unitCovers API latency on busy days
Fast-moving (>20 sales/day)2–3 unitsHigher order frequency = higher simultaneous order risk
Same product on 5+ channels1–2 unitsMore channels = more simultaneous order exposure
Peak sales periods (e.g. Black Friday)Increase by 1–2Spike order volume increases simultaneous order risk
⚠️
Buffer trade-off: A larger buffer reduces oversell risk but also means you stop selling earlier than necessary. A buffer of 3 on a product with 3 units in stock means you publish 0 and the product appears out of stock even though you have stock. Size your buffer to your actual order velocity — not as large as possible.

Zero-stock auto-deactivation

When Odoo stock hits zero (or your buffer threshold), ERP2MARKET can automatically deactivate the listing on each marketplace — not just set it to 0, but pause it entirely. This prevents the listing from accepting orders even if there's a brief API delay in the stock update reaching the marketplace.

Different marketplaces handle zero-stock differently:

MarketplaceZero-stock behaviourERP2MARKET action
AmazonListing suppressed at 0 stockPushes 0 — Amazon auto-suppresses
Bol.comShows "not available" at 0Pushes 0 — Bol.com prevents ordering
ZalandoSize suppressed at 0 (per-size stock)Pushes 0 per size — Zalando suppresses that size
KauflandListing deactivated at 0Pushes 0 or explicit deactivation
eBayOut of stock or listing endsPushes 0 or ends listing depending on config

Oversell prevention checklist

Use this checklist before going live on any new marketplace channel:

  • Single stock source confirmed: All channels read from Odoo inventory — no separate stock figures per channel.
  • Real-time sync active on all channels simultaneously: Not just the new channel — every active channel must be syncing from Odoo before going live with a new one.
  • Safety buffer configured: Buffer sized to your order velocity per product, not a blanket figure.
  • Zero-stock behaviour verified: Test with a product at 0 stock — confirm all channels show unavailable.
  • All active SKUs mapped on new channel: Unmapped products don't sync stock — verify mapping is complete before activation.
  • Multi-warehouse stock rules set: If selling from multiple locations, confirm which locations contribute to marketplace stock — accidental double-counting inflates published stock.
  • Return restock flow tested: Confirm that when a return is processed in Odoo, stock increments and the increment is pushed to all channels.