Skip to content

Marking inventory as unavailable in Shopify: when and how

Shopify's inventory states — available, committed, unavailable, on hand — and how to use the unavailable bucket for damaged stock, QC holds, and reserves without breaking your integrations.

Mehdi Mirza
web kraftz · toronto, canada
3 min read

Sometimes stock exists but shouldn't sell: a case of product damaged in transit, units held for quality control, inventory promised to a wholesale order or a pop-up, or a buffer you keep so the last few units never oversell. Shopify has a proper mechanism for this — the unavailable inventory state — and using it well beats the workarounds we still see, like zeroing out quantities or hiding products. We wrote about this years ago; here's the current version, because the inventory model has been rebuilt since.

How Shopify counts inventory now

Every product at every location has a set of inventory states rather than a single number. On hand is everything physically there. Committed is stock attached to placed but unfulfilled orders. Unavailable is stock you've deliberately set aside. Available — the only number your storefront sells from — is what's left: on hand minus committed minus unavailable. Incoming tracks stock on the way, and it never sells until it's received.

The unavailable state is itself split into named reasons: Damaged, Quality control, Safety stock, and Other. The reasons aren't cosmetic — they show up in reports and adjustment history, so six months later you can tell whether stock was set aside for a hold or written off as damage.

When to use it

  • Damaged goods you haven't processed yet — mark them Damaged instead of adjusting on hand down, so the physical count still matches the shelf.
  • Quality control holds — a batch you're inspecting before releasing to sale.
  • Reserved stock — units promised to a wholesale buyer, a marketplace order, a photo shoot, or an upcoming drop.
  • Safety stock — a permanent buffer so the storefront never sells your last units while a pick is already in progress.
  • Pending recounts — when the system says 40 and the shelf says 36, park the difference as unavailable until you've counted properly.

How to do it in the admin

  • Open Products → Inventory (or the Inventory section on a product page), pick the location, and click the product's quantity.
  • In the quantity breakdown, move units from Available to Unavailable and choose the reason that matches.
  • To release the hold later, move the units back — the adjustment history keeps who did what, when.

For bulk moves — a whole shipment into QC, or setting safety stock across a catalog — the GraphQL Admin API's inventory mutations handle quantities per state and per location, and most modern ERP and 3PL connectors can write to specific states. Which brings us to the traps.

What it changes — and what it doesn't

Marking stock unavailable stops the storefront from selling those units. It does not touch stock already committed to orders, and your on-hand counts stay honest for reporting and counting. Two things routinely undo people's careful holds, though. First: the product-level setting "Continue selling when out of stock" bypasses availability entirely — if it's on, customers can order past your hold, and the unavailable bucket protects nothing. Check it before relying on holds. Second: integrations. If your ERP, 3PL, or inventory app syncs a single quantity and writes it to available, it will silently flatten your unavailable buckets on the next sync. Confirm which quantity your connector writes — available or on hand — before you build a process around holds.

Multi-location notes

Unavailable is per location, which is what you want: damage at the warehouse shouldn't block sales from the retail store. But remember that order routing only looks at available quantities per location — if you hold everything at the location that normally fulfills online orders, orders will route to (or fail at) the others. When we set up reserves for clients running multiple locations, we map the routing order first and place holds with that in mind.

The pattern behind all of this: keep the physical truth (on hand) and the selling decision (available) separate, and let the unavailable states carry the explanation. Systems that overwrite that separation are the ones that oversell.

If your counts drift, your connector fights your holds, or overselling keeps happening during launches, that's usually an integration-design problem rather than a discipline problem — and it's fixable. It's the kind of scoped work we do alongside monthly store management.

// next step

Working on something like this?

A free consultation costs nothing, and you’ll get a straight answer — including ‘you don’t need an agency for that’ when it’s true. Fixed quotes, no obligation.

next

Back to the journal or keep browsing other posts.

all posts