Why can customers add more units than I have in stock and still check out?

Why shoppers can add more units than you actually have and reach checkout, and how to stop it using Shopify's own inventory settings before reaching for anything custom.

inventorycheckoutvariantsoversellingstock management

What's going on

A merchant notices that a product shows, say, 3 in stock, but a customer manages to add 8 to their cart and complete checkout anyway — or worse, ten customers all "buy" the last unit within minutes of a drop. The store owner is left with orders they can't fulfill, refunds to issue, and no clear sense of whether it's a Shopify bug, a theme problem, or something they configured wrong.

This is a recurring theme in Shopify merchant discussions, and it almost never turns out to be a platform bug. Shopify's inventory system has several independent settings — tracking on/off, continue-selling on/off, per-location stock — and if any one of them is misconfigured, the storefront will happily let a shopper check out past what's actually on the shelf. The fix is usually a settings audit, not a new app.

Why it happens

Shopify's inventory model has three separate switches that all have to be set correctly for a hard stop at zero: whether quantity tracking is enabled at all for a variant, whether "continue selling when out of stock" is checked, and which locations are counted toward the storefront's available quantity. Any variant where tracking is off is treated as infinite stock no matter what number appears in a spreadsheet or app dashboard, and any variant with continue-selling enabled will keep accepting orders past zero by design — that setting exists specifically to allow backorders and pre-orders, so it's not a bug when it does its job, it's just easy to leave on for products that shouldn't have it.

Multi-location selling adds a second failure mode: the storefront shows available quantity summed across whichever locations are marked to fulfill online orders, so if a location's count is stale (a POS location that hasn't synced, a warehouse feed that updates once a day) the number a shopper sees can be higher than what's truly available anywhere reachable.

Genuine checkout-race conditions — two shoppers both grabbing the literal last unit at the same instant — are the rarer cause, since Shopify reserves inventory briefly once someone reaches checkout. When merchants report this pattern at scale, it's almost always the settings or sync-lag causes above rather than a checkout-level flaw.

5 ways to fix it

1

Turn off "Continue selling when out of stock" on the variants that are overselling

This is the setting almost always behind the symptom. On each variant, under Inventory, there's a checkbox that lets Shopify keep accepting orders past zero on hand — it's meant for backorders and made-to-order items, but it's easy to leave checked by accident (it's on by default for some import/CSV workflows and duplicated products). Go to Products > the variant > Inventory, confirm "Track quantity" is on, and untick "Continue selling when out of stock" for anything that should hard-stop at zero. For stores with many variants, check this in bulk via the inventory CSV export/import rather than clicking through each one.

2

Confirm inventory tracking is actually enabled, not just quantity set

If tracking is off for a variant, Shopify treats it as infinite stock regardless of what number is entered elsewhere (a spreadsheet, a legacy field, a note) — customers can add any quantity and reach checkout because there's nothing to check against. This is common after supplier feed imports or app migrations that create variants without inventory management turned on. Fix it once per variant and it stays fixed.

3

Audit stock by location, not just the total

If you sell from multiple locations (a warehouse plus a retail store, or several 3PLs) and one location shows available stock while another shows zero, Shopify sums available quantity across locations that are eligible to fulfill online orders. If a location that shouldn't sell online still has stock allocated to it, or if a POS location's counts lag behind reality, customers can check out against stock that isn't actually reachable. Review Settings > Locations for which locations fulfill online orders, and reconcile counts location by location rather than trusting the storefront total.

4

Know the limits of checkout-time reservation

Shopify does briefly reserve inventory once a customer reaches checkout, and finalizes the deduction on payment, which is why true double-sells of the very last unit at the very same second are rare on native Shopify. Most "oversold" reports actually trace back to one of the settings above, or to a delay between a third-party system (ERP, marketplace, POS) updating Shopify's count and the storefront reflecting it. If you sync inventory from an external system, check how often that sync runs and whether it's the lag — not checkout itself — that let quantity go negative.

5

For custom hard rules, a developer can enforce them at checkout

If your business needs stricter behavior than the native settings offer — for example, blocking checkout entirely for certain variants once stock hits zero regardless of the continue-selling setting, or capping quantity per customer — that logic can be added with a cart/checkout validation rule built by a developer. This is a build, not a toggle, so it's worth trying the free settings above first and only reaching for custom logic if a real gap remains.

Bottom line

Most "customers can order more than I have" reports come down to one overlooked setting — Continue selling when out of stock — or inventory tracking not being switched on for a variant, both fixable for free in a couple of minutes per product. Multi-location mismatches and slow third-party sync explain most of what's left. True checkout-level double-sells are uncommon on native Shopify; if you've ruled out the settings above and still see it, that's a signal to look at custom checkout validation rules with a developer rather than assume Shopify's checkout itself is broken. This isn't an area BesPoP's apps target directly, so start with the native fixes.

Still Stuck?

Browse the rest of the problem library, run a free storefront scan to catch issues like this automatically, or email us and we'll work out a custom solution for it.