Integrations & automation
Syncing stock across Shopify, WooCommerce and Bol.com without overselling
Why stock drifts between sales channels, and the design choices that keep Shopify, WooCommerce and Bol.com in sync without overselling.
· 4 min read · AKANTIO
Selling the same products on your own shop and on marketplaces multiplies reach, and also the number of places where stock can be wrong. Overselling (accepting an order for something you no longer have) costs a refund, an unhappy customer and, on marketplaces like Bol.com, damage to your seller performance.
Overselling is rarely caused by one bug. It comes from how the systems are wired together. These are the design choices that prevent it.
Why stock drifts
Imagine one item left, listed on Shopify, WooCommerce and Bol.com. A customer buys it on Bol.com. Until the other two channels hear about it, they still show one in stock. That window is where overselling happens. It grows when:
- stock is synced on a schedule (every 15 or 60 minutes) instead of on each change
- each channel is updated by a different plugin, each with its own idea of the truth
- returns, cancellations and manual corrections update one system but not the others
- updates fail silently because of an API error or rate limit, and nobody notices
1. Choose one source of truth
Exactly one system owns the stock count: a warehouse system, an ERP, an inventory tool like CommerceOS, or one of the shops. Every other channel receives its numbers from there and never decides stock on its own.
Most overselling setups have no single owner. Plugins sync shop A to shop B and B to the marketplace, and the result depends on which update arrived last.
2. Sync available stock, not physical stock
The number a channel should show is not what is on the shelf. It is what you can still promise:
available = on hand − reserved for open orders − safety buffer
- Reserved covers orders that are paid but not yet shipped. They are still physically on the shelf but already sold.
- Safety buffer is a small number per product, or per channel, that absorbs the sync window. For fast sellers or items with low stock, showing one or two fewer than you have on a marketplace is cheaper than a cancellation.
3. Push changes as they happen
Use each platform's events instead of polling:
- WooCommerce can send webhooks on order creation and update, and exposes
stock_quantityper product and variation through its REST API. - Shopify tracks inventory per location as inventory levels, and sends webhooks when orders are created or inventory changes.
- Bol.com's Retailer API lets you update the stock of each offer and retrieve new orders.
When an order arrives on any channel, update the source of truth first, then push the new available number to every other channel. Do not wait for a scheduled job.
4. Make every update safe to repeat
Webhooks are delivered at least once, which sometimes means twice. Network calls time out after succeeding. Design for it:
- Idempotent order processing. Store each channel's order ID when you process it, and skip it if it arrives again. Otherwise one order can reserve stock twice.
- Send absolute numbers, not differences. "Set stock to 4" can be repeated safely. "Decrease by 1" cannot.
- Queue and retry. Put outgoing updates in a queue, retry with backoff when an API is down or rate-limited, and keep the latest value per product so a backlog does not send outdated numbers.
5. Reconcile, and alert on differences
Even a well-designed sync misses something eventually: a webhook that never arrived, a manual edit in a marketplace dashboard. Run a reconciliation job that compares the stock on every channel with the source of truth, corrects differences, and reports when a difference was found. A difference that appears regularly for the same product or channel points to a bug.
6. Handle the edges
- Bundles and variants: a bundle's available stock is the minimum of its components. Variants (size, colour) each need their own number.
- Multiple warehouses: decide which locations feed which channels.
- Returns: a returned item goes back into available stock only after inspection, if that is your process.
- Pre-orders and backorders: make them an explicit setting per channel, not an accident of negative stock.
Build, buy, or both
If your channels and processes are standard, an inventory tool that connects them is the fastest route. That is what we built CommerceOS for: one stock count across Shopify, WooCommerce, Bol.com and Lightspeed. If you have an ERP or warehouse system that must stay the source of truth, the integration around it is custom work, which our integrations service does, including Bol.com and WooCommerce integrations.