guide

Shopify Multi-Location Inventory Problems: Why Counts Drift Between Stores, Warehouses, and Pickup Locations

Learn why Shopify inventory drifts between stores, warehouses, pickup locations, transfers, and 3PLs, and how to investigate one SKU safely.

Updated

Your storefront offers a black rain jacket for pickup at the Queen West store. In Shopify, the location has two units Available. Then, a customer places the order, and a staff member walks to the rack: empty. What gives?

On the surface, your inventory looks healthy: the warehouse has 48 units, while your second store has 6. The 3PL location has 30. None of that helps the customer who chose Queen West because Shopify claimed the jacket was available there.

This is the confusing part of Shopify multi-location inventory: the total can be correct while the customer-facing inventory count is wrong. This is because Shopify doesn’t manage one shared pile of stock. It tracks separate quantities at separate locations, then uses inventory states, product activation, pickup settings, shipping profiles, and order-routing rules to decide what each location can do.

When those layers disagree, changing the total rarely fixes the underlying problem. Review one affected variant and location at a time, then trace the events that changed it.

In a rush? Here’s the short answer

Shopify multi-location inventory problems usually happen when one of five things is wrong:

  1. The quantity belongs to the wrong location.
  2. The product has stock at a location but is not active there.
  3. Inventory is Incoming, Committed, or Unavailable rather than Available.
  4. Pickup or order-routing rules promise stock from a different location.
  5. A 3PL, app, POS device, import, or staff adjustment changes a location-level count unexpectedly.

Shopify’s multi-location inventory documentation is explicit: each location’s inventory is independent and cannot be shared or pooled with another location. Investigate the SKU by location and event before correcting any quantity.

How Shopify multi-location inventory works

It helps to picture your inventory as a row of labeled bins, not one pile.

One bin is Queen West. Another is the warehouse. Another is the 3PL. Shopify can add up the row, but a pickup order, POS sale, or fulfillment assignment still depends on the contents and rules of a particular bin.

For each product variant and location, Shopify also tracks different inventory states:

StateWhat it means operationally
AvailableUnits Shopify considers sellable at that location
CommittedUnits attached to placed but unfulfilled orders
UnavailableUnits held for reasons such as damaged stock, quality control, draft-order reservations, safety stock, or app holds
On handAvailable, Committed, and Unavailable units Shopify records at the location
IncomingUnits expected from a transfer, purchase order, or app but not yet received

Incoming stock is not Available stock. Shopify’s inventory states guide says it becomes Available only after it is received, subject to product activation and any app-specific handling.

The location itself has rules too. A product can have an On hand quantity at a location while its Available value displays as a dash. That means the product is inactive there, so the location cannot sell or fulfill it. A retail-only location can also contribute to total inventory without contributing to the online quantity customers can buy.

This gives you several different questions that sound deceptively similar:

  • How many units does the business own?
  • How many units are sellable?
  • How many can be sold online?
  • How many can this location fulfill?
  • How many are physically ready for pickup right now?

The same number cannot clearly answer all five.

What the symptom usually means

Before changing a count, use the symptom to narrow the investigation.

What you seeWhat to check first
On hand has a number, but Available is a dashWhether the variant is active at that location
Incoming is positive, but Available is zeroWhether the transfer or purchase order has been received
Pickup is offered even though the store has zeroWhether pickup store transfers are enabled and another location is supplying it
Total inventory is positive, but the online store is sold outWhether the stock sits at a retail-only, inactive, or otherwise ineligible location
An order is assigned to an unexpected storeOrder-routing rules, shipping profiles, and location eligibility
A corrected count changes againApps, 3PLs, imports, POS activity, or another inventory writer

These are good starting points for investigation.

Why inventory appears at the wrong Shopify location

Sometimes the quantity was adjusted at the wrong location. This is easy to do when several locations have similar names, a bulk edit is filtered incorrectly, or an import maps stock to an unexpected location.

Other cases are correct in Shopify but wrong for the workflow. For example, a store can hold six units of a variant but be prevented from fulfilling online orders. Those units will count toward total inventory, yet the online store cannot use them. Similarly, receiving a transfer at a new store records the quantity, but it doesn’t necessarily activate the product there.

Shopify documents this exact pattern: when On hand has a value but Available shows a dash, the variant is inactive at the location. Activating it may be the right fix, but only if that store is supposed to sell or fulfill the item. Turning on activation just to make the dash disappear can create a routing or pickup problem.

Start with the business rule: what should this location do with this SKU? Then make Shopify match that rule.

Why pickup can show the wrong store

Pickup availability doesn’t always mean the unit is already on that store’s shelf.

Shopify lets merchants configure store transfers for pickup orders. If the selected pickup location has no stock, Shopify can source it from another location. The customer sees availability with an estimated pickup time that accounts for the transfer, and staff see a Transfer required badge in the fulfillment workflow.

That works when staff understand the transfer and the customer sees an accurate pickup promise. It breaks down when:

  • the customer interprets “available for pickup” as “on the shelf now”;
  • staff miss the transfer requirement;
  • the estimated processing time is shorter than the real transfer time;
  • someone marks the order as Ready for pickup before the item reaches the pickup store;
  • a store theme, custom pickup app, or operating procedure sets a customer expectation that conflicts with Shopify’s underlying state.

When investigating a pickup complaint, confirm three separate facts: where the unit is now, where Shopify intends to source it, and when the customer was told it would be ready. A positive business-wide total answers none of them.

Why Shopify transfers seem not to update inventory

A transfer has a lifecycle. Treating every status as “the stock moved” is where many discrepancies begin.

Shopify’s inventory transfer documentation distinguishes among draft, ready-to-ship, in-progress, and transferred statuses, and it supports partial receipts. Once inventory is in transit, the destination can show it as Incoming. Accepted units become Available when they are received, unless the product is not stocked or active there.

The important operational rule is: receiving means the item has arrived, has been evaluated, and has been accepted. It should not mean “the van left the warehouse” or “we expect all 12 cartons to be fine.”

Common transfer failures include:

  • receiving the full transfer before it physically arrives;
  • accepting 12 units when only 10 arrived;
  • ignoring rejected or damaged units;
  • receiving at the right destination while the product remains inactive there;
  • creating a transfer, then separately adjusting one of the same location counts;
  • assuming Incoming units are already sellable.

Partial receipts exist for a reason. If eight units arrive today and four tomorrow, receive eight. Do not make the inventory state more optimistic than the physical event.

How order routing creates retail and warehouse mismatches

Shopify assigns online orders according to available inventory and the merchant’s order-routing rules. Rules can prioritize a location, minimize split fulfillments, keep fulfillment within a market, or prefer a nearby location.

If no single location can fulfill an order, Shopify can split it across locations. Shopify’s location-fulfillment documentation also describes a less intuitive outcome: depending on the setup, the highest-priority location can oversell the item even when the business has positive inventory elsewhere.

Suppose the Queen West retail store has one jacket and the warehouse has two. A three-unit order may look supportable at the business level, but no single location has all three. The assignment now depends on routing, splitting, and fulfillment eligibility. If Queen West ends up at minus two, the warehouse’s two units did not silently move there. The locations remain independent.

When an order lands in the wrong place, inspect the assignment before moving inventory. Otherwise, a manual correction can hide a routing problem and leave the next order exposed. For a deeper look at this boundary, see How to Prevent Overselling on Shopify During Sales, Launches, and Multi-Channel Peaks.

How 3PLs and apps complicate the location model

Fulfillment apps and 3PLs can appear in Shopify as inventory locations. Their quantities remain separate from your merchant-managed stores and warehouses, and orders can be assigned to them through the same broader fulfillment model.

That is useful, but it adds another system with its own event timing and operational meaning. A 3PL can correctly report 30 units at its location while Queen West still has zero. A warehouse sync can also change a quantity after a staff member has corrected it manually.

For every location, document who is allowed to write inventory:

LocationExpected writers
Retail storeShopify POS and authorized staff
Merchant warehouseWarehouse system or designated operations staff
3PL locationThe 3PL integration
Returns or quarantine locationThe returns workflow or designated staff

If two systems can set the same location-level quantity, define which one wins and why. Otherwise, a correct manual adjustment may survive only until the next sync.

A realistic teardown: Queen West had two in Shopify and zero on the shelf

Return to the fictional black rain jacket incident. The variant is JACKET-RAIN-BLK-M, and Queen West is expecting a 12-unit replenishment from Warehouse East. Elsewhere, Junction has six Available and the 3PL has 30, but neither is the pickup location.

TimeEventShopify stateOperational reality
8:40Transfer T-1842 is in progressWarehouse East: 48 Available. Queen West: 12 Incoming, 0 AvailableThe 12 transferred units are on the road
8:52All 12 units are marked received at Queen WestQueen West: 12 Available, 0 IncomingThe vehicle has not arrived; Queen West still has 0 sellable units
9:12Ten pickup orders have been placedQueen West: 2 Available, 10 CommittedAll 12 units are still on the road
9:18Another customer orders one jacket for pickupQueen West: 1 Available, 11 CommittedStaff still have no jacket to pick
9:26Staff check the rack and back roomQueen West: 1 Available, 11 CommittedPhysical count at Queen West: 0; delivery ETA is 10:05

The 9:18 order exposed the problem, but it did not create it. The first bad event was the 8:52 receipt. That action changed 12 units from Incoming to Available before the physical event it was meant to record.

The numbers remain internally consistent:

  • Shopify believed Queen West had received 12.
  • Ten earlier orders committed ten units, leaving two Available.
  • The next order committed one more, leaving one Available and 11 Committed.
  • The physical store still had zero because the transfer was still in transit.

At that point, the known facts are the transfer status changes, order times, Shopify quantities, and physical count. The likely explanation is a premature full receipt. What remains unknown is why it happened: a misunderstood workflow, an accidental action, or another process.

Whatever the reason, the workflow allowed a future event to be recorded as if it had already happened. That is the control gap the team needs to address.

How to investigate a multi-location inventory discrepancy

Use a narrow investigation. One variant, one affected location, one time window.

1. Freeze the customer-facing risk

If the count cannot be trusted, pause or limit the affected SKU at the affected location while you investigate. Avoid a catalog-wide shutdown when only one variant and one pickup store are in question.

2. Capture the current state before editing

Record the variant ID or SKU and the exact values for Available, Committed, Unavailable, On hand, and Incoming at every relevant location. Note which locations can fulfill online orders, offer pickup, and stock the product.

Take a physical count, but classify what you find. A unit can be physically present and still be damaged, reserved, committed, or waiting for inspection.

3. Gather the event evidence

Review:

  • inventory adjustment history;
  • the affected orders and their fulfillment locations;
  • open and recently received transfers;
  • pickup configuration and transfer requirements;
  • order-routing rules and shipping profiles;
  • POS transactions;
  • 3PL, warehouse, and app logs;
  • recent imports or bulk edits.

Shopify’s native history is a useful starting point, but a complete incident may span several screens and external systems. How to Build a Shopify Inventory Audit Trail explains how to preserve the evidence as one usable timeline.

4. Reconstruct the arithmetic

Start from the last quantity both Shopify and the physical operation support. Then walk forward event by event.

For each event, record:

  • timestamp;
  • variant and location;
  • state before and after;
  • quantity change;
  • source or actor, when that evidence exists;
  • the real-world event the change was supposed to represent.

Stop at the first change that the evidence cannot support. That is usually more useful than staring at the final wrong number.

5. Separate fact from inference

Write three short lists:

  • Known: directly supported by Shopify, app logs, order records, transfer records, or a physical count.
  • Likely: the explanation that best fits those facts.
  • Unknown: attribution, timing, or physical details you still cannot prove.

This keeps the investigation blame-free and prevents a plausible story from hardening into a false one.

6. Correct the smallest wrong state

If the transfer was received too early, correct the affected location-level inventory state and document why. If the transfer record cannot be reversed, preserve it and record the compensating correction. If the product should be active at the location, activate it. If a writer is sending stale quantities, stop or correct that writer before making another manual adjustment.

Do not spread the discrepancy across locations only to make the total match. That produces a tidy total and a broken fulfillment model.

7. Verify the workflow that failed

After the correction, check the same surfaces that produced the incident:

  • location-level inventory states;
  • the product’s online availability;
  • pickup availability and promised timing;
  • order assignment;
  • POS behavior;
  • the next 3PL or warehouse sync.

If Shopify is not reflecting a change you know should have happened, use the workflow in Shopify Inventory Not Updating? A Practical Troubleshooting Guide rather than repeatedly overwriting the count.

How to prevent the same location drift from returning

The strongest controls are usually operational:

  1. Give every location a clear purpose: online fulfillment, retail sales, pickup, storage, returns, or 3PL fulfillment.
  2. Define which system or team may change inventory at each location.
  3. Receive transfers only after units arrive and are evaluated; use partial receipts when necessary.
  4. Test product activation, pickup timing, shipping profiles, and routing whenever a location or 3PL is added.
  5. Reconcile high-risk SKUs by location, not only by business-wide total.
  6. Sample incident timelines regularly so the team knows where evidence lives before a customer is waiting.

The aim is not to eliminate every inventory mistake. It is to keep one mistake from becoming an unexplained count across four locations.

Consider Retrace

Shopify can show the current inventory state and recent adjustment history. Multi-location incidents become difficult when the explanation is scattered across orders, transfers, manual edits, refunds, and app-driven changes.

Retrace works alongside Shopify to record inventory changes from the time it is connected. Each SKU gets a timeline of tracked events, and Retrace compares Shopify’s current quantity with its own record of those changes. When Shopify provides attribution evidence, Retrace preserves it; when it does not, the event should remain unattributed.

Retrace cannot see what is physically on a shelf, and it does not decide which location should own a unit. It gives operators a longer, more coherent Shopify-side history for finding when a count stopped adding up and choosing a correction deliberately.

Install Retrace, review pricing, or browse all Shopify inventory guides.