Inventory Allocation: Where to Put Scarce Shopify Stock First
Inventory allocation assigns units you already own
Inventory allocation is the decision of where existing units of a SKU should sit so the next orders can ship without promising stock you do not have. It does not decide how many units to buy. That is replenishment.
On Shopify, the practical version is narrower than an enterprise allocation engine. You look at available and committed units at each location, compare recent demand and days of cover, respect shipping and pickup rules, then transfer units or set them aside before a channel oversells. Shopify can split an order across locations when no single location can fulfill it. Units in an unfulfilled order are committed. A draft order commits units only if you reserve them, and a fulfillment hold is not a separate inventory reservation. Shopify does not rank which location should receive scarce stock you already hold elsewhere.
Three jobs get mixed together in most allocation guides. Keep them separate:
- Allocation moves or assigns units you already own across locations, channels, or order types.
- Replenishment decides whether to buy more from a supplier. The reorder point and purchase quantity live in other posts, not here.
- Reservation means units are committed or set aside so another sale cannot take them. An unfulfilled order commits units. A draft order commits units only if you explicitly reserve inventory on it. A fulfillment hold blocks fulfillment of an existing order. It does not create its own inventory reservation.
If a bestseller is scarce, allocation answers "which shelf, warehouse, or sales channel gets the units first." Reordering answers "when do we buy the next carton." Mixing the two is how stores transfer stock into a slow location and still miss the purchase-order cutoff.
What allocation includes, and what it does not
A useful allocation covers physical locations you fulfill from, plus any channel that can sell the same units: the online store, a retail location with local pickup, a wholesale or draft-order channel, and a marketplace if that channel draws from the same Shopify inventory.
It excludes demand forecasting math, safety stock, and economic order quantity. Those decide future buys. If you need a demand estimate before you rank locations, use the projection in ecommerce demand forecasting, then come back with a number of units you can actually move.
It also excludes fixing a count that does not match the shelf. If On hand, Available, Committed, and Unavailable do not reconcile, stop and use the inventory discrepancy walkthrough before you transfer anything. Allocating a bad count just moves the error.
Check available and committed units at each location
Shopify tracks inventory per variant and per location. The states that matter for allocation are On hand, Committed, Unavailable, and Available. Shopify defines On hand as the sum of Committed, Unavailable, and Available. Available is what you can sell. Committed cannot be sold, and includes units in an unfulfilled order, units reserved on a draft order, and units on a transfer marked ready to ship. Unavailable is on hand but cannot be sold. Shopify's unavailable states are Damaged, Quality control, Safety stock, and Other.
Open the variant, then Inventory. For each active location, record On hand, Committed, Unavailable, and Available. Do not allocate from On hand alone. A location can show 40 on hand and 2 available if 38 are already committed or unavailable.
The same inventory states page defines the relationship directly: Available equals On hand minus Committed minus Unavailable when you track inventory at a location. Incoming is a separate state for units on the way from transfers, purchase orders, or apps. Incoming is not available to sell until it is received.
Also check these constraints before you pick a destination:
- A location covers web demand only if it is allowed to fulfill online orders. Turning that off removes its inventory from the online quantity.
- Order routing rules decide which eligible location is assigned. Default rules prefer a location that can fulfill the whole order, then stay within the destination market. Closest-location routing is not on by default. You add it as a rule if you want proximity to matter, and you can add a ranked-locations rule.
- If no single location can fulfill an order, Shopify can split it across locations, or the highest-priority location can oversell the product.
- Local pickup and local delivery only work from locations where those delivery methods are active, so a unit in a warehouse does not cover a pickup order at the store.
- A location in another market can lose priority under the stay-within-destination-market rule, even when its unit count looks fine. Do not assume Shopify will pick the nearest location unless you configured that rule.
Those assignment rules are in Shopify's location fulfillment guide and order routing guide. Moving units to another location does not reserve them for that location. If the destination still fulfills online orders, those units stay in the online quantity. Stock at any other eligible location can still fill an online order.
If you sell on multiple channels, confirm whether each channel uses the same locations. A marketplace app that syncs only the warehouse location will ignore units you just moved to a retail store. That is an allocation failure even if Shopify's own available count looks correct.
Pick one allocation rule, then apply the constraints
Enterprise systems name several allocation methods: fair share, top-down ranking, demand-weighted share, and channel priority. A small Shopify store rarely needs more than one rule at a time. Pick the rule that matches why the SKU is scarce, then let fulfillment constraints veto the result.
Protect the location that will stock out first
Rank locations by days of cover, not by raw units. Days of cover is available units divided by recent daily sales at that location or channel. The location with the shortest cover on a product that still sells gets the next units, up to a cover cap you choose.
This is the default for a two-location store with one online warehouse and one retail shop. It stops you from "balancing" counts so both locations look tidy while the faster location sells out midweek.
Give a fixed share to a channel you cannot easily refill
Use a reserved share when one channel has a hard promise: a wholesale drop, a retail event, or a pickup location that customers already expect to find in stock. Set the share in units, not a vague percentage. A location move is not that reserve. If the destination still fulfills online orders, the online store can sell the units you just moved.
To keep units unsellable, move them from Available into an Unavailable state such as Safety stock or Other. Shopify documents those states, along with Damaged and Quality control, in adjusting inventory quantities. Unavailable units stay on hand and cannot be sold. Move them back to Available when the event ends. That quantity change is not a purchase, and it is not a fulfillment hold.
If the promise is a draft order, reserve inventory on that draft. Shopify's draft-order guide says reserved units move to Committed, and you set the date and time when the reserve expires. If you do not reserve, the quantities stay Available and other customers can buy them. Creating the draft does not reserve inventory by itself.
A fulfillment hold is a different control. Shopify's hold guide says marking an order on hold changes fulfillment status to On hold and blocks fulfillment until you release it. Inventory on that order can already be reserved because the order exists. The hold itself does not reserve unallocated units for a channel.
Turning off online fulfillment for a location also fails as a channel reserve. Shopify says that setting removes the location's inventory from the online quantity, but the location can still fulfill draft orders and orders from other sales channels. Check whether those channels follow your inventory policies before you rely on it.
Rank locations when one of them must not run dry
If most orders ship from one warehouse, keep a floor there and only transfer the surplus. A retail location with slow sell-through should not receive units that would drop the warehouse below its floor, even if the store display looks thin.
Order routing does not replace this rule. Routing decides which eligible location fulfills an order after it is placed. Allocation decides where the units should sit before the order arrives. If the location you wanted is empty, Shopify can assign another location that has stock, split the order, or oversell the highest-priority location, as described in the location fulfillment guide.
Stop when the data is too thin
Do not build a demand-weighted split from a handful of orders. If a location has fewer than a couple of weeks of sales, or sales are lumpy because of one wholesale invoice, use a floor-and-surplus rule instead. A forecast you do not trust should not move physical stock. The forecast accuracy formula post is the check for whether a projection is stable enough to buy against. For allocation, unstable demand means smaller transfers and a shorter review cycle.
A two-location example with hypothetical numbers
These figures are an example, not a benchmark. A store sells one scarf SKU from a warehouse (ships online orders) and a retail shop (pickup and walk-in). Total owned units are 46. Nothing is incoming.
| Location | On hand | Committed | Unavailable | Available | Units sold, last 14 days | Daily rate | Days of cover |
|---|---|---|---|---|---|---|---|
| Warehouse | 30 | 6 | 0 | 24 | 28 | 2.0 | 12 |
| Retail shop | 16 | 2 | 0 | 14 | 21 | 1.5 | 9.3 |
| Total | 46 | 8 | 0 | 38 | 49 | 3.5 | n/a |
Daily rate is last-14-day units divided by 14. Days of cover is Available divided by that daily rate. Retail is not the larger pile, but it covers fewer selling days. Warehouse cover is 12 days. Retail cover is about 9 days.
The operator sets two constraints before moving anything:
- Warehouse floor: 14 available units, about 7 days of online cover, because most orders ship from there and a transfer back would miss weekend orders.
- Retail cap: 14 days of cover. There is no reason to push the shop past two weeks on a scarce SKU.
Retail needs 1.5 × 14 = 21 available units to hit the cap. It has 14, so the gap is 7. Warehouse can give 24 − 14 = 10 without breaking its floor. The transfer is the smaller of those two numbers: 7 units from warehouse to retail.
After the transfer, if no new orders land, warehouse Available is 17 (about 8.5 days) and retail Available is 21 (14 days). Both stay above a week. The 6 committed warehouse units and 2 committed retail units never moved. Committed stock belongs to existing orders.
Create that move as a transfer in Shopify, not as two unrelated adjustments. A draft transfer does not commit inventory. Mark as ready to ship commits units at the origin. Move to in transit marks them incoming at the destination, where they are not Available until you receive them. Shopify documents those statuses in creating and processing inventory transfers.
Adjustments are for quantity changes such as a wrong count or damage. Shopify's adjustment reasons are Correction, Count, Damaged, Promotion or donation, Received, Return restock, and Theft or loss. Using Correction to disguise a transfer makes the next discrepancy harder to diagnose.
If the same 7 units were needed for a weekend trunk show instead of ongoing retail demand, do not treat a location move or a fulfillment hold as the reserve. Move 7 units to Unavailable at the warehouse until the show inventory is picked, then transfer the picked units. Leaving them Available means the next online order can sell them from any location that still fulfills online orders.
How to read the result before you move stock
A location with short cover and steady recent sales is the first destination, up to your cap. A location with short cover and one unusual order is not. Check whether that spike was a wholesale invoice or a promotion before you treat it as a run rate. An unreserved draft order is not a completed sale and does not commit units.
A location with long cover and low sales is a source, not a destination, even if the shelf looks sparse. Display minimums are a merchandising choice. Write them down as a floor in units so they do not silently override the cover math.
If every location is under a week of cover, allocation cannot create units. Transfer only what keeps the primary ship-from location able to fulfill, then switch to replenishment. The Shopify reorder formula is the buy decision. The replenishment workflow is how that buy becomes a purchase order with a supplier cutoff. Allocation does not approve either one.
What to do at each cover range
Use the same window you used in the example, usually 14 or 28 days, and apply one action per location. These ranges are operating targets for a scarce SKU, not a promise that stockouts will stop.
- Under 7 days of cover, and the location fulfills current demand: it is the first destination, unless moving units would break the primary location's floor.
- 7 to 21 days: leave the units where they are. Do not transfer in or out unless a known event needs an Unavailable quantity or an explicit draft-order reserve.
- Over 21 days while another location is under 7: this location is the source. Transfer only the surplus above its floor.
- Zero available, with committed units still open: do not reallocate those committed units. Fulfill or cancel the orders first.
- Incoming units: do not count them as Available at the destination until the transfer is received. You can change the destination only while the transfer is still a draft.
Review scarce SKUs on a fixed cadence, twice a week during a promotion or peak season, weekly otherwise. Velocity changes faster than a monthly planning meeting. A winner that was balanced on Monday can be warehouse-out by Friday if ads keep sending orders to the default location.
Recheck velocity before the next transfer
After the transfer is received, wait for real orders before you move more. Compare units sold by location or by channel over the same 14 days, and recompute cover from Available, not from On hand.
Three checks stop a second, worse transfer:
- The source location still has its floor after new commitments. If weekend orders ate the floor, the next units stay put or come from a purchase order, not from another thin location.
- The destination is actually selling the units you sent. If cover is rising because sales stopped, reverse the surplus instead of feeding a dead shelf.
- No channel is overselling a location you cannot ship from. If a sales channel syncs the wrong location, fix the sync before you move more units.
SKU-level sales velocity and stock-cover warnings are enough to flag which products are scarce. They do not calculate a location split. Confirm location quantities, committed units, and which channel sold the units in Shopify before you create the transfer.
Skymetrics can surface scarce winners from sales velocity and stock-cover warnings so you know which SKU to open first. The location decision still happens in Shopify, against available and committed quantities, not inside an automatic allocation.
Common ways small stores mis-allocate
Equal units at every location feels fair and usually is not. If 80% of orders ship from the warehouse, an even split strands units in the shop and forces split shipments or delayed online orders.
Allocating incoming stock before it is received creates a second promise on the same carton. Leave incoming on the transfer. Sell it only after receipt posts to Available.
Using a storewide sales number to rank locations hides the actual drain. Shopify's inventory and order views can show which location fulfilled. If you only have a combined sales total, you do not yet have an allocation input. Split the history by fulfilling location or by channel before you move units.
Transfers also need a cutoff. A draft transfer does not commit inventory. Ready to ship commits units at the origin. In progress marks them incoming at the destination, and incoming is not Available until receipt. If the truck is two days out, the destination's cover math should not include those units as Available.
The weekly stock system in Shopify inventory management is where this check belongs: scarce SKUs first, location cover second, supplier buys only after you know the units you already own are in the right place.