WooCommerce stock going out of sync isn’t usually one bug — it’s the predictable result of several systems all trying to be the source of truth for the same number at once. A typical setup has WooCommerce reducing stock when an order is placed, an ERP updating stock hourly, a warehouse system updating after fulfillment, a supplier feed updating overnight, and staff manually correcting stock during the day — five separate write paths to the same field, with nothing coordinating between them.
Where the Overselling Actually Happens
The timing problem is the sharpest version of this: when multiple customers order the same product simultaneously and WooCommerce doesn’t update stock quickly enough between those orders, it can sell more units than actually exist. Sub-5-second sync is now the standard serious multichannel sellers work toward, and anything slower than about a minute creates real overselling risk specifically during peak traffic — exactly when it’s most visible and most costly to unwind.
The Three Main Failure Modes
| Cause | What happens |
|---|---|
| Multiple conflicting write sources | ERP, warehouse system, supplier feed, and manual edits each update stock independently with no single authority, creating a loop nobody fully controls |
| Sync latency during concurrent orders | Two or more orders for the last unit(s) of a product process before stock is decremented and re-checked, both succeeding when only one should |
| Caching stale stock counts | A page cache serves an old “in stock” count after real inventory has already changed, showing availability that no longer exists |
What Actually Fixes This
- Establish one authoritative source of truth for stock — every other system should read from and write to that source, not maintain its own independent count.
- Move to webhook-based sync where possible rather than scheduled polling — a webhook-triggered update propagates in seconds when a sale happens, instead of waiting for the next hourly (or slower) sync cycle.
- Exclude stock counts from page caching, or use a short, deliberate TTL specifically for inventory data — a fast-loading page showing wrong stock is worse than a marginally slower one showing correct availability.
- Add a hard stock check at the point of payment, not just at add-to-cart, as a last line of defense against a race condition slipping through everything else.
When to Bring in Dedicated Sync Tooling
Manual reconciliation and spreadsheet corrections work at small scale, but once a store is running multiple sales channels or supplier feeds, a dedicated inventory sync solution connecting those sources directly — rather than each system independently polling and writing — is usually what actually eliminates the overselling problem rather than just reducing its frequency.
This connects to the broader performance picture in WooCommerce Performance in 2026: How to Speed Up Your Store. Want your store’s inventory sync setup reviewed? Get in touch.
Frequently Asked Questions
Is hourly stock sync good enough for most stores?
For low-volume products, often yes. For anything selling in meaningful concurrent volume or with limited stock, hourly sync leaves a wide window for overselling — sub-minute, ideally sub-5-second, sync is the safer standard.
Does page caching really cause overselling by itself?
Combined with fast-moving stock, yes — a cached page showing a stale “in stock” badge can let a customer add an item to cart that’s already sold out, even if the actual checkout process later catches the discrepancy.
What’s the single most common root cause of stock sync issues?
Having more than one system that considers itself the authoritative source for stock levels, rather than one source that everything else reads from and writes to.
Featured image: original illustration.
