ClearStock is live on the Shopify App Store.Install free →

← All blogs

Guides7 min read

Products showing 'Sold Out' on Shopify when you have stock: the 6-cause diagnostic

Shopify showing sold out when you have stock? The six causes, a 10-minute diagnostic table, and the state math that explains almost every case.

InventoryX is in development and not available today. ClearStock is the live Shopify app.

Short answer: the storefront shows Sold Out when a variant's available quantity at the location that fulfills online orders is zero — not when your shelf is empty. Available excludes units committed to unfulfilled orders and draft-order holds, excludes anything an app has set aside, and is counted per variant, per location. That single sentence explains nearly every "but I have stock!" support ticket. Six causes cover the field, and the diagnostic table below runs from fastest to check to rarest. The first two take under five minutes.

What the storefront is actually reading

Shopify's Help Center defines the states cleanly (as of November 2026): on hand is everything physically at a location, and it's the sum of available (sellable), committed (units reserved for unfulfilled orders, draft orders, or transfers marked ready to ship), and unavailable (units set aside by apps or held for reasons like damage or quality control). Incoming stock — on a transfer or PO — isn't sellable until it's received. (The full state breakdown lives in the Shopify inventory states explainer.)

The storefront sells from one number: available, per variant, per location. Two consequences follow, and they explain most confusion:

  • Variants hold stock independently. A product with three sizes showing "in stock" can have its Medium at zero, because Medium's available count is what the Medium customer sees.
  • The fulfilling location is the only one that matters for the online store. Shopify states it directly: if an item is at zero (or below) at the location that fulfills online orders while a location without online fulfillment holds stock, "that item is still displayed as out of stock to customers on your online store."

So "Sold Out" is rarely a glitch. It's the storefront faithfully reporting an available count of zero — and the diagnostic is finding which subtraction made it zero.

The six causes

Work down the table. The signature column tells you what you'll see; the fix column tells you what to do. Everything here is fixable in the admin or the offending app — no code, no theme surgery.

# Cause Signature Fix
1 The specific variant is genuinely at zero Product looks stocked; one size/color says Sold Out; siblings sell fine Open the variant page → per-location Available; restock it — a true sellout is a reorder decision
2 All on-hand units are committed On hand > 0 but Available = 0 on the variant Check unfulfilled orders, draft orders reserving stock, and transfers marked ready to ship; fulfill, cancel, or release the hold
3 An app set units to Unavailable On hand > 0, Available 0, Committed 0; Unavailable carries the difference Find the holding app (safety stock, damage holds, reservation apps) and release or reduce the hold
4 Stock sits at a location that doesn't fulfill online orders Available > 0 at the warehouse/store location, Sold Out online Move stock to the online-fulfilling location via transfer, or add stock there — per Shopify's own guidance on the out-of-stock display rule
5 Dropshipping/app location missing shipping rates Products show Sold Out "even though inventory is available," per Shopify's docs, and a dropshipping app manages the location Fix the missing shipping rates on the app's location so the storefront can offer delivery
6 You're looking at a cached page Sold Out for you; fine in a private window or on another device Hard-refresh or check incognito; if incognito also shows Sold Out, it's data — back to cause 1

Cause 1 deserves one honest guardrail: check the variant row, not the product row. Merchants routinely read "12 units" off a product-level summary that spreads across three sizes, while the size the customer wants has been zero since Sunday. And when the whole parent is genuinely at zero everywhere, the Sold Out page is telling the truth — that's a reorder decision, not a bug hunt. This is the variant-level version of the problem, and it has its own ripple effects into feeds and channels beyond the storefront.

And one boundary, in a single sentence: if the numbers in the admin themselves look wrong — stuck, not updating, or wildly off the shelf — that's the admin-side failure, not a storefront display question, and the inventory-not-updating diagnostic owns it.

A worked triage: 12 bags on the shelf, Sold Out on the store

Illustrative case, Monday morning. A coffee roaster's product page for a Kenya lot shows Sold Out on the 250g size — but the shelf rack holds 12 bags and nobody remembers selling out.

Run the table. Cause 6 first, because it costs ten seconds: incognito window, product page still says Sold Out — it's data, not cache. Cause 1: the variant page shows the per-location breakdown, and here's the arithmetic that ends the mystery —

On hand 12 = Available 0 + Committed 12 + Unavailable 0.

Twelve bags physically present, zero sellable, twelve committed. Cause 2. The committed units trace to a draft order: the roaster reserved the whole rack for a café account on Friday and never completed the order. The storefront did nothing wrong — it refused to sell bags that were already promised. The fix is a decision, not a repair: complete the draft order and receive the replacement stock before reopening the size, or delete the draft to release the hold. Total diagnosis time: about four minutes, all of it spent reading the state breakdown the variant page was already showing.

The general lesson in that example: when On hand and Available disagree, the difference is always Committed plus Unavailable. Those two rows answer the question before you've opened a single order.

When it's genuinely zero

Sometimes Sold Out is just true, and the questions change: hide the product, badge it, or let it sell the waitlist? Those are storefront-strategy decisions with real trade-offs — hiding costs SEO, badges convert disappointment into signups — and they're covered properly in the hiding sold-out products guide. What matters operationally is only this: make the choice deliberately before the next traffic spike arrives, because a bestseller at zero is attention you're currently spending on an apology.

Common questions

Why does one variant show Sold Out when the product has stock? Shopify counts available inventory per variant, per location. A product-level total of 12 can be 12 units of Medium and zero of Small — and the Small page shows Sold Out because that variant's available count is genuinely zero. Check the variant page's per-location Available number, not the product summary.

Can a draft order make a product sell out? Yes. Committed inventory includes units reserved in draft orders, per Shopify's Help Center, and committed units are subtracted from available. A draft order that reserves your entire on-hand quantity drives Available to zero and the storefront to Sold Out — complete or delete the draft to release the stock.

Why does my store say Sold Out when another location has stock? The online store sells from the location that fulfills online orders. Shopify states that when the fulfilling location is at zero while a non-fulfilling location holds stock, the item still displays as out of stock to online customers. The fix is moving stock to the fulfilling location or restocking it there.

What does "Unavailable" inventory mean when my shelf is full? Unavailable units are stocked but not sellable — Shopify's definition covers units set aside by apps or held for reasons like damage, quality control, or safety stock. An inventory or reservation app holding units shows up exactly this way: full shelf, zero available. Release the hold in the app that created it.

If Sold Out shows in a private window too, is it a caching problem? No — a private window bypasses your browser cache, so Sold Out there means the storefront is receiving Sold Out data. Cache explains the opposite case: sold out for you, fine for everyone else. If the private window still says Sold Out, work the diagnostic table from cause 1.

Next step

Make the private-window check the first move every time — it splits cache problems from data problems in ten seconds and sends everything else down the table. And when the answer turns out to be "genuinely sold out on a page getting real traffic," put a waitlist on that product so the demand the Sold Out badge is turning away becomes a count you can buy against.