Why does my Shopify store say sold out when I have plenty of stock?
If a product has inventory but customers see 'sold out,' the cause is almost always a mismatch between where stock lives and where your shipping and sales channel settings expect it to be.
What's going on
A merchant will look at a product in Shopify admin, see a positive quantity on the variant, and still watch the storefront display 'Sold out' or hide the Add to Cart button for customers. This is disorienting because the inventory count in the product list looks completely normal -- the disconnect isn't in the number itself but in whether that inventory is reachable for the specific order Shopify is trying to fulfill.
Shopify decides whether an item is purchasable by checking a chain of settings, not just the raw quantity: which location the stock sits at, whether that location is active and enabled to fulfill the Online Store channel, and whether a shipping profile exists that can quote a rate to the customer's shipping address. If any link in that chain is missing -- a location added but never connected to Online Store, a shipping profile that never picked up the new location, or a customer whose country isn't covered by any rate -- the storefront falls back to unavailable, even while the admin's inventory view shows stock on hand.
This tends to surface right after a merchant adds a second warehouse or 3PL location, migrates POS-only stock into a location not wired into online sales, or edits shipping zones and doesn't propagate the change across every profile. Forum threads on this topic consistently point back to rebuilding shipping rates and re-verifying which location is actually serving the order as the fix, rather than anything wrong with the product listing itself.
Why it happens
Shopify treats 'available to sell' as a function of location, not just a global stock number. A quantity can exist at a location that either isn't marked active, isn't authorized to fulfill the Online Store sales channel, or was never linked into the shipping profile that covers the buyer's address -- in any of these cases checkout can't resolve a fulfillment path and rate, so the product is treated as unavailable regardless of the count shown in the admin product list.
This is especially common after multi-location changes: adding a new warehouse, splitting inventory between a retail location and a fulfillment center, or connecting a third-party logistics provider. Each of those requires the new location to be explicitly added to shipping profiles and channel permissions -- steps that are easy to miss because the inventory count itself updates correctly and looks fine at a glance.
5 ways to fix it
Check that stock is actually assigned to an active, order-fulfilling location
In Shopify admin, open the variant and look at Inventory to see which location(s) show quantity greater than zero. Then go to Settings > Locations and confirm the location holding that stock is active and has fulfillment of online orders turned on. Inventory sitting at a location that's deactivated, or that's excluded from serving online orders, will not be offered to shoppers even though the number on the product page looks correct in the admin list view.
Make sure the stocked location is included in a shipping profile that covers the customer's destination
Go to Settings > Shipping and delivery and open your shipping profiles. Each profile lists which locations ship which products to which countries/zones. If the location holding your inventory isn't attached to any profile, or the profile doesn't have a rate for the customer's shipping zone, checkout has no way to calculate delivery and Shopify falls back to treating the item as unavailable to that customer even though inventory exists. Add the location to the relevant profile and confirm a rate exists for every zone you sell into.
Confirm the product/variant itself is set to track quantity and isn't capped by an inventory policy
On the product's Variants section, check that 'Track quantity' is on and that the quantity field matches what you expect, and review whether 'Continue selling when out of stock' is enabled or disabled as intended. If tracking is on and available quantity is genuinely zero at every connected location (for example stock was only entered at a location not connected to the online store's sales channel), the storefront will correctly show sold out until quantity or channel connections are fixed.
Check the Online Store sales channel is connected to the same inventory location
Under Settings > Locations, each location has a list of channels it can fulfill for (Online Store, POS, etc.). If the location with stock isn't checked to fulfill the Online Store channel, the storefront can show zero available even though POS or another channel sees inventory fine. Re-enable that channel for the location and give inventory a few minutes to sync.
Rebuild or re-save shipping rates if a profile edit didn't take effect
Occasionally a shipping profile or custom rate edit doesn't propagate cleanly, especially after adding a new location or splitting inventory across locations. Re-open Settings > Shipping and delivery, remove and re-add the affected location's shipping rates (or duplicate the profile and rebuild it from scratch), then test checkout with an address in the affected zone to confirm the item now shows as purchasable.
Bottom line
Most 'in stock but shows sold out' cases trace back to inventory being assigned to a location, sales channel, or shipping zone combination that doesn't line up end to end -- fix the location/channel/shipping-profile connection first before assuming it's a code or theme bug. If you've checked all of the above and rates or fulfillment routing keep breaking as you scale to more locations, that's a sign your shipping setup has outgrown Shopify's native profile editor and a dedicated shipping/rates app may be worth evaluating.
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.