Guides · Multi-location

Multi-location inventory on Shopify: why one threshold across locations is the wrong number

Shopify totals your stock across locations, and that total is what most alerts look at. Here is why the total hides the stockout that costs you the sale, and how to get alerts that know which shelf is empty.

Turn on a second location in Shopify and one number quietly changes meaning. The inventory figure on the product page becomes a sum across locations, and every tool that reads it inherits the assumption that stock in one place is stock everywhere.

For a warehouse and a shop, that assumption is wrong in the only situation you care about.

The failure, concretely

You sell a jacket. You hold 14 in the warehouse and 0 in the retail shop.

  • Shopify says 14. Healthy.
  • Your low stock alert threshold is 5. Nothing fires.
  • A customer in the shop asks for it. You do not have it.
  • The website offers same-day pickup at that shop. Shopify's inventory rules may still let the order through depending on how the location is configured, and someone has to ring the customer.

Nothing went wrong technically. The number was accurate. It was just the wrong number: a total tells you whether you own enough units, not whether they are where the demand is.

What Shopify gives you natively

The Inventory page does break stock down per location. Open Products → Inventory and use the location selector at the top. Everything there is per-location and correct. It is a pull view: it helps on the day you open it.

Shopify Flow does not, by default. The Product variant inventory quantity changed trigger is, in Shopify's own words, not location-specific: it fires on a change at any location, and the quantity your condition sees is not scoped to one shelf.

You can get at the per-location numbers inside Flow, but you have to walk down productVariant / inventoryItem / inventoryLevels / available and match on location id yourself. That works. It also means a workflow per location, hand-written property paths, and a maintenance job every time you add a shop.

Analytics reports are per-variant, not per-location, for the inventory reports most merchants use. They will tell you a variant is running down. They will not tell you which building it is running down in.

Three rules that fix most of it

1. Set the threshold where fulfilment happens

A location that only ships online orders and a location that serves walking customers do not need the same cushion. The shop needs cover for a customer standing in front of you, who does not come back tomorrow. The warehouse needs cover for the supplier's lead time, which you can plan around.

In practice this means the retail location's threshold is higher relative to its sales rate than the warehouse's, even though the shop holds far fewer units.

2. Alert on the location, not the sum

The rule you want is "warn me when this location drops below its level", evaluated per location, with the location named in the message. Anything that starts from the aggregate cannot express that, no matter how you tune the number.

3. Watch for the transfer that never happened

The most common multi-location stockout is not a supplier problem at all. It is stock you already own, in the wrong building, because nobody moved it. That is invisible to any system watching the total, and it is fixable the same afternoon — which is exactly why it is worth being told about.

Where the aggregate is fine

Being fair to the total: if all your locations are warehouses feeding the same online channel and Shopify routes orders between them, the sum is the right number and this whole page is theoretical for you. Split thresholds start mattering when a location has its own demand — a shop, a pop-up, a market stall, a fulfilment partner in another country with its own delivery promise.

How StockPilot handles it

StockPilot evaluates each rule per location. A variant that is healthy in the warehouse and empty in the shop produces an alert that names the shop, and the daily digest groups by location so a store manager reads their own list rather than everyone's. Thresholds can be set globally, per location, or as days of cover computed from that location's own sales velocity.

There is a free plan; it is $9/month after that. If your locations are all warehouses on one pool, save your money and use Shopify Flow's free template instead — it is covered in Shopify low stock alerts: the free way, and the four places it breaks.


Flow trigger behaviour checked against Shopify's trigger reference on 3 August 2026.

StockPilot watches this for you

One email when a variant drops below the level you set, per location, based on real sales velocity. No alert storms. Free plan, then $9/month.

Install on Shopify