On Shopify, “online” inventory is not a per-store count. It is a rollup that sums available stock across every location set to fulfill online orders. A shopper sees the combined total, so an item can read “in stock” while the store they want to collect from holds none. That gap is the root cause of pickup oversells.
This post explains how the rollup works, the two independent switches on every location, and why the mismatch sends shoppers to empty shelves.
What is the difference between location inventory and online inventory?
Location inventory is the real number: how many units physically sit at a given store right now. Online inventory is a calculated number: the sum of available stock across every location you have enabled to fulfill online orders.
Per Shopify’s multi-location inventory documentation, the “online” quantity a shopper sees on a product page is this rollup. It is not tied to any one store.
The arithmetic is simple and that is exactly the trap. If your downtown store has eight of an item and your suburban store has zero, the shopper sees eight online. Nothing on the storefront tells them all eight are downtown.
For a single-location store this never matters, because the rollup and the store are the same shelf. The moment you add a second location, the online number starts describing a total that no individual store can actually fulfill.
What are the two switches every Shopify location has?
This is where most confusion starts, so it is worth being precise. Every location in Shopify Admin carries two separate, independent settings:
Switch one: “fulfill online orders.” When this is on, the location’s stock feeds the online rollup. Its units are counted in the number shoppers see and can buy. When it is off, that location’s stock is invisible to online shoppers entirely.
Switch two: “offers in-store pickup.” When this is on, per Shopify’s pickup documentation the location appears as a collection option at checkout. This is about whether shoppers can pick up there, not about the online stock total.
Because the two switches are independent, four combinations exist, and three of them cause confusion:
| Fulfills online orders | Offers pickup | What shoppers experience |
|---|---|---|
| On | On | Stock counts toward online total and store accepts pickup, but the shopper still sees the rollup, not this store’s count |
| On | Off | Stock inflates the online number, yet shoppers cannot collect here |
| Off | On | Shoppers can collect here, but its stock is invisible to the online total |
| Off | Off | Location is invisible to the storefront entirely |
The first row is the one that causes oversells, and it is also the most common configuration. Pickup is on, the stock counts, and the shopper still cannot see how much is actually at the store they chose.
Why does the rollup cause pickup oversells?
Walk the shopper’s path. They see “in stock” online, that number being the rollup. They add the item, choose a nearby store for pickup, and pay. The order is placed.
But Shopify’s pickup logic requires the entire order to be in stock at one location, or it falls back on store transfers. If the store they chose actually has zero, the order cannot be collected there. It either stalls waiting on a transfer, or the shopper drives over to an empty shelf. We cover that rule in the entire-order-at-one-location guide.
The shopper never had the information to avoid this. They were shown a combined total and asked to make a per-store decision against it. The mismatch is structural, not a bug in their behavior.
The cost is real. Accurate stock visibility consistently outperforms hiding the gap: when a nearby store is genuinely out, shoppers shown an accurate status are far more likely to switch to buying online than to abandon — a pattern reflected across Baymard’s e-commerce UX research. The reverse, a false “available” that ends in an empty shelf, is the fastest way to lose a pickup customer for good.
And the underlying data is often shakier than merchants assume. Unit-level inventory accuracy is a known retail weak spot — a meaningful share of counts are simply wrong. Layer a misleading rollup on top of imperfect counts, and the storefront makes confident promises about stores it cannot actually verify.
Can’t I just turn off “fulfill online orders” to fix it?
It is the tempting move, and it usually makes things worse. If you flip off the online switch for a store, its stock stops feeding the rollup, so shoppers can no longer buy those units online at all. You have hidden sellable inventory to avoid a display problem.
The clean fix is not subtracting stores from the total. It is showing the shopper per-store stock so they decide against the real shelf, not the rollup.
That means surfacing live availability for each store in the cart, then letting the shopper pick where to collect. Out-of-stock or full stores stay visible but unselectable, greyed and ranked below the available ones, so the shopper understands the full picture rather than seeing a store vanish. For the broader pattern of fixing multi-location sync gaps, see multi-location inventory sync issues.
This is also why the storefront experience matters more than the admin view. You can already filter inventory by location inside Shopify Admin; what is missing is showing that per-store reality to the shopper at the moment they choose where to collect.
How complete BOPIS replaces the rollup with per-store truth
BopiSafe is complete multi-location BOPIS for Shopify, and the per-store stock problem is exactly what it solves first. Instead of the combined online number, shoppers see real-time availability for each store in an in-cart store picker and choose where to collect, sorted by priority then distance.
Out-of-stock or over-capacity stores stay visible but unselectable rather than disappearing, so the shopper always sees their real options. When a cart mixes fulfillment types, it groups them by pickup, local delivery, and shipping and runs each group through its own native Shopify checkout as a real order, never a draft order, which keeps the per-store stock promise intact through to payment.
It reads Shopify’s own inventory and writes back to it, so there is one source of truth rather than a second number to reconcile, and it runs on Shopify Functions with no slowdown at checkout and no theme rewrite. For how this shows up on the product side, see showing per-store stock for pickup.
Written by the BopiSafe team — we build BOPIS infrastructure for Shopify merchants. Our Shopify pickup integration work dates back to 2023, before the product launched.
Next steps
- See the bigger picture: what BOPIS means across multiple stores
- Compare your options: native local pickup vs complete BOPIS
- Fix the storefront display: showing per-store stock for pickup and the in-cart store picker explained
- Or install BopiSafe to show live per-store stock instead of the online rollup
Confused about why your online stock and your shelf counts disagree? Email support@bopisafe.com — we will walk through your location setup with you.