New stores: 14 days of Protector freeFirst 25 stores.Uptime, daily scans, Slack and Telegram alerts. No card.See what’s included

Technical

Overselling out-of-stock variants: the inventory sync bug that forces order cancellations

Richard K.

Richard K. · October 7, 2026 · 8 min read

Overselling out-of-stock variants: the inventory sync bug that forces order cancellations

A customer buys the last unit of a popular variant. Thirty seconds later, someone else buys the same unit on a different channel, or through a different browser tab that hadn't refreshed yet. Both orders go through. Both customers get a confirmation email. Only one of them is getting the product. Now you're the one writing the apology.

Why overselling happens even when your stock count is right

Most store owners assume overselling means someone fat-fingered a number in inventory. Usually it doesn't. The product record says zero, but a customer still checks out successfully, because the system that decrements stock and the system that renders the buy button aren't updating in the same instant.

This is a sync lag problem, not a data entry problem. Shopify, WooCommerce, and BigCommerce all update inventory counts after an order is placed, not before the page is served. If two people load the product page while one unit remains, both see "in stock." Only one checkout can actually win the unit; the platform is supposed to reject the second, but under load, with apps in the middle, or across sales channels, that rejection doesn't always happen cleanly.

Add multi-channel selling into the picture and the lag compounds. A store selling on its own site plus Amazon, eBay, or a POS terminal has to push stock changes between systems, often through a third-party connector polling every few minutes rather than reacting instantly. A ten-minute sync window is enough for a popular variant to sell through twice before either channel knows the other made a sale.

Where the sync actually breaks

A few specific failure points cause most overselling incidents:

App middleware delays. Inventory apps, dropship connectors, and multi-channel listing tools often pull and push stock on a schedule rather than in real time. If your connector syncs every 15 minutes and a variant sells out in minute two, it stays listed as available everywhere else for up to 13 more minutes.

Cached storefronts and CDNs. Aggressive page caching can serve a stale "add to cart" button even after the backend inventory hits zero, particularly on high-traffic product pages during a sale.

Oversell settings left open. Shopify and BigCommerce both let you explicitly allow overselling on a variant (useful for made-to-order or pre-order items), and it's easy to forget that setting was left on for a product that's no longer pre-order only.

Webhook failures. If the webhook that tells your inventory app "an order was placed, decrement stock" fails to fire or gets delayed, the stock count never drops, and the item keeps selling until someone notices manually. This is closely related to the webhook reliability issues covered in duplicate orders from webhook retries, where the same infrastructure weak point causes a different symptom.

Flash sales and traffic spikes. A surge of simultaneous checkouts on a limited-quantity item is the classic overselling scenario, because the race condition between "check stock" and "decrement stock" gets exercised by dozens of shoppers at once instead of one or two.

The real cost of an order cancellation email

Overselling doesn't just cost you the item. It costs you the customer's trust in the moment they were most excited about your product. You charged their card, sent a receipt, maybe even a shipping estimate, and then had to walk it back. That reversal reads very differently than a simple "out of stock" label ever would have.

There's also the operational cost: a support ticket, a manual refund, sometimes a goodwill discount to keep the customer, and the staff time to sort out which of the two conflicting orders gets fulfilled. For a store running lean, a handful of these a month adds up to real hours. During a flash sale or holiday peak, the same sync gap that causes a trickle of overselling on a normal day can cause a flood, which is one reason capacity planning for sales events matters as much as the countdown timer itself; see how to load test your store before a flash sale without breaking it for the related load-side risks.

Overselling is the mirror image of a stockout nobody noticed: instead of losing a sale you could have made, you're refunding one you already booked.

How to catch overselling before the cancellation email goes out

You can't eliminate the race condition entirely, but you can shrink the window it has to work in and catch it fast when it slips through.

Reduce your sync interval. If your multi-channel app offers a configurable polling frequency, set it as tight as your plan allows. A two-minute sync window is meaningfully safer than a fifteen-minute one for high-velocity SKUs.

Set buffer stock on fast movers. Listing a popular variant with one or two units held back as a buffer absorbs the sync lag without a customer ever noticing. This matters most on the SKUs selling fastest, the same ones covered in [inventory counts that drift: why your channels disagree and how to catch it](/blog/inventory-counts-that-drift-why-your channels-disagree-and-how-to-catch-it).

Audit oversell settings quarterly. Check which variants have "continue selling when out of stock" enabled and confirm each one is intentional (pre-order, made-to-order) rather than a leftover default.

Watch for the symptom, not just the cause. A spike in order cancellations, a sudden run of refund requests on one SKU, or a support ticket thread mentioning "I never got my item" are all signals worth checking immediately, not at the end of the week. Continuous monitoring of order flow and stock levels, the kind Cassian™ runs in the background through Order Pulse and stock-out alerts, flags the gap between what your store says is in stock and what's actually moving through checkout, so you find out within the hour rather than from an angry email.

Test your webhook reliability. If the connection between your order system and inventory system has ever silently dropped, it will again. The same principles that apply to catching broken order webhooks apply here, as detailed in the order that never arrived in your admin: webhook and integration failures explained.

Frequently asked questions

Why did Shopify let a customer buy an item that was already out of stock?
Shopify decrements inventory after checkout completes, so if two customers check out within the same short window, both can succeed before the system registers the first sale, especially when apps or sales channels add polling delays to the count. Shopify also has a per-variant "continue selling when out of stock" setting that, if left enabled, allows unlimited overselling regardless of the stock number shown.
How do I stop overselling across multiple sales channels?
Tighten the sync interval on your multi-channel or inventory management app so stock counts update across channels in minutes rather than tens of minutes, and keep a small buffer of units held back on your fastest-selling variants so a brief sync gap doesn't result in a sold-out item appearing available. Regularly auditing which SKUs have overselling explicitly enabled also prevents accidental allowances on products that should be strictly limited.
What should I do if I already oversold an item and have to cancel an order?
Contact the affected customer as soon as you detect the oversold order, explain plainly that inventory counts didn't sync in time, and offer a full refund along with a gesture like a discount code or priority restock notice. Acting within hours rather than days preserves far more goodwill than a delayed, generic cancellation email, and reviewing your sync settings afterward reduces the odds of a repeat on the same SKU.

Closing the gap for good

Overselling and silent stockouts are two sides of the same monitoring problem: your stock count and your storefront disagreeing without anyone noticing in time. You can't manually watch every variant across every channel, but you can make sure something is watching continuously, catching the sync lag before it turns into a canceled order and an apology email. That's a far better use of your attention than discovering the gap from a customer's inbox.

Keep reading