Stock & inventory automation

Shopify products showing sold out but in stock: the full fix

You can see the boxes on the shelf, but the product page says sold out and the add-to-cart button is greyed out. I hear this from small retailers most weeks, and it's rarely a Shopify bug. It's one of six causes, and they're worth checking in a specific order because the first two account for most cases I see.

Run the free stock checker →

In short: If a Shopify product shows sold out despite physical stock, the inventory is usually recorded at a location that doesn't serve your online store, or the count sits on a different variant to the one displayed. Check the variant's inventory-by-location breakdown first, then "Continue selling when out of stock", then whether an app or feed is overwriting the number, then theme caching.

Cause one: inventory tracked at the wrong location

This is the big one. Shopify tracks inventory per location, and your Online Store channel only counts stock at locations that fulfil online orders. If your 12 units are recorded against "Warehouse" but the online store fulfils from "Shop floor", the storefront sees zero and shows sold out, while your admin totals look healthy.

Open the product, click the variant, and look at the "Inventory" section: it shows a quantity per location, not just a total. Then go to Settings > Locations and check which locations are active, and Settings > Shipping and delivery to see the fulfilment priority order. The tell is a product whose total quantity is positive but whose quantity at the online-fulfilling location is zero. Move the stock (Products > Inventory, filter by location, transfer or adjust) or add the location to online fulfilment, whichever matches physical reality.

This bites hardest after a change: you opened a second location, connected a 3PL, or installed a POS, and Shopify quietly created a new location that now holds some or all of the inventory. Nothing broke, the counting rules just changed underneath you.

Cause two: variant-level stock, product-level assumptions

Inventory in Shopify lives on the variant, never the product. A t-shirt with ten sizes has ten separate inventory records, and "the product is in stock" means nothing until you say which variant. The classic version: Medium is sold out, Medium is the default variant the page loads on, so the page opens saying sold out and the owner concludes the whole product is broken, while Large sits there with 30 units.

Check every variant's count in the admin, not just the first one. And if you bulk-edit inventory via CSV, watch the SKU column: a duplicated or mistyped SKU can land the count on the wrong variant entirely, which looks identical to "Shopify lost my stock". If your counts come in from a supplier file, the mapping between their SKUs and your variants is where this goes wrong, and I cover that end of it in the stock sync guide (the principles are platform-agnostic even though the walkthrough is WooCommerce).

Cause three: "Continue selling when out of stock" is doing something you didn't expect

On each variant there's a checkbox: "Continue selling when out of stock". It's a backorder policy, and it cuts both ways. Unticked, the variant stops selling at zero even if you actually have stock that's recorded in the wrong place (causes one and two above). Ticked, the variant keeps selling at zero, which papers over a wrong count until a customer orders something you genuinely don't have.

Don't use it as a patch. If the count is wrong, fix the count. Tick this box only when you deliberately take backorders on a line you can reliably reorder, and say so on the product page. One wrinkle worth knowing: even with it ticked, many themes still render a "Sold out" badge on collection pages because the badge logic reads the inventory number, not the policy. So you can end up purchasable but labelled sold out, which converts about as well as you'd expect.

Cause four: an app or feed is overwriting your inventory

This is the pattern that actually brings people to me. You correct the count, it holds for a few hours, then it reverts to zero on its own. Nobody touched it. At that point stop editing the number, because something else owns it: a supplier feed app, a marketplace sync (eBay, Amazon, Etsy), a 3PL integration, or a scheduled CSV import. Each of these writes inventory on its own timetable, and your manual edit lasts exactly until the next run.

Find the owner: open the product's timeline in the admin (it logs which app adjusted inventory and when), or Settings > Apps and sales channels to see what has inventory permissions. Then fix the source: the supplier file has zero for that SKU, or the app is mapped to the wrong location, or a channel sync (this is common on Shopify-to-eBay setups) is pushing the wrong direction. The fix lives upstream, and no amount of re-editing the Shopify field will hold.

Cause five: the theme is caching the sold-out state

If the admin shows correct stock at the correct location but the storefront still says sold out, suspect caching before you suspect data. Collection grids, featured-product sections, and quick-buy blocks are often served from CDN cache, and a stale fragment can carry a sold-out badge for minutes to hours after the fix. Check the page in an incognito window, hard-refresh, and give it fifteen minutes. Some themes also compute the badge in JavaScript from data embedded at render time, so a customer with the tab already open keeps seeing sold out until they reload.

If it persists past that, check the theme's own settings: some themes have a toggle to show sold-out badges based on the default variant only, which recreates the cause-two illusion even with healthy stock elsewhere in the variant list.

The ten-minute diagnostic order

  • Pick one affected product and open the specific variant shown on the page.
  • Check quantity per location, and whether the online-fulfilling location holds any of it.
  • Check every other variant's count, not just the default.
  • Check "Continue selling when out of stock" against your actual backorder intent.
  • Open the product timeline: has an app adjusted inventory recently, and on what schedule?
  • View the storefront in incognito after 15 minutes to rule out cache.

If the answer turns out to be step five, you have a sync problem, not a settings problem, and that's a different job. It's the same failure mode I see on WooCommerce stores, written up in the WooCommerce out-of-stock guide: the settings are fine, the thing writing to them isn't.

And check the mirror image while you're in there. In a manual scan of 135 UK online shops I found 4 in 10 showing the opposite problem: genuinely sold-out products still live and ranking on Google. If your inventory data is loose enough to show sold out on in-stock items, it's almost certainly loose in the other direction too, and that version costs you clicks that land on dead pages. I've written up what to do about sold-out pages Google still ranks and when hiding sold-out products is the right call. The free stock checker scans your live store for both directions in one pass.

Why does Shopify say sold out when I have stock?

Almost always the stock is recorded at a location your online store doesn't sell from. Shopify only counts inventory at locations assigned to the Online Store sales channel, so units sitting at a warehouse location that isn't fulfilling online orders read as zero. Check Settings > Locations and the per-variant inventory-by-location breakdown first.

Does "Continue selling when out of stock" fix a sold out badge?

It makes the product purchasable at zero inventory, but it doesn't correct the underlying count, and many themes still show a sold-out badge based on the inventory number. Use it as a deliberate backorder policy, not as a patch for wrong stock data.

Why does my stock correction revert after a few hours?

An inventory app, supplier feed, or marketplace sync is overwriting the variant on its own schedule. Your manual edit is right, but the next sync run replaces it. Find the app that owns that SKU's inventory and fix the source data, not the Shopify field.

Can theme caching show a sold out badge on an in-stock product?

Yes. Collection pages, quick-buy sections, and CDN-cached fragments can keep serving a stale sold-out state after the inventory is corrected. Check the product in an incognito window and give edge caches a few minutes before concluding the data is wrong.

About the author

Jordan Bee builds automation for UK online retailers at GlideOps. In June 2026 he manually audited 135 UK online shops, finding 4 in 10 showing sold-out products still live and ranking on Google, research that underpins these guides and the free dead-listing checker. He has built stock-sync systems covering 91,000+ products for UK retailers.

See which of your products are affected right now

The free checker scans your live store and shows you which products are wrongly sold out, and which sold-out pages are still live and taking clicks, in minutes, no changes made.

Run the free stock checker →