In this guide
Inventory problems rarely begin with the number on a product page. They begin when two systems disagree about what a unit means. A warehouse counts it on a shelf, Shopify has committed it to an order, an app reserves it as safety stock, or a supplier says it is available without guaranteeing your store can buy it.
This guide builds an inventory operating system for Shopify. It defines the source of truth, separates inventory states, maps each variant to a location and owner, and connects purchasing, receiving, selling, returns, and adjustments. Specialist guides cover reorder points and safety stock, inventory update failures, dropshipping stock synchronization, and multi-location order routing.
The objective is not maximum stock. It is dependable sellable availability with enough evidence to know when to buy, pause, transfer, investigate, or retire a SKU.
Fast summary
- Assign one source of truth for each variant-location quantity.
- Treat on hand, available, committed, unavailable, and incoming as different states.
- Separate purchase agreement, physical movement, receipt, inspection, and availability.
- Use cycle counts and specific reasons to expose recurring process failures.
- Replenish from demand, lead time, uncertainty, margin, and cash, then review exceptions weekly.
Recommended platform
Some links are affiliate links. We may earn a commission at no extra cost to you. Disclosure
Define the inventory contract before changing quantities
For every variant, name the system that owns sellable quantity, the location that fulfills it, and the event that changes it. Shopify can own stock you control. A dropshipping, print-on-demand, 3PL, ERP, or marketplace app may own another location. Two systems must not independently overwrite the same location without a conflict rule.
Use one stable SKU per operationally distinct variant and record a separate supplier SKU when it differs. Color, size, pack count, supplier version, bundle component, and warehouse item can require different identifiers even when customers see one product family.
Write a one-page inventory contract: source of truth, update direction, frequency, fallback buffer, negative-inventory policy, adjustment permissions, and reconciliation owner. This turns a vague integration into an operating agreement.
| Question | Required answer | Failure if unclear |
|---|---|---|
| What is it? | Unique variant and supplier SKU | Wrong item bought, counted, or fulfilled |
| Where is it? | Active Shopify or app location | Stock exists but is not sellable |
| Who owns quantity? | One authority per location | Apps and staff overwrite each other |
| When does it change? | Order, receipt, return, transfer, count, hold, or sync | Silent drift |
| Who investigates? | Named owner and escalation | Repeated refunds without a fix |
Swipe horizontally to compare every column.
Inventory accuracy is an ownership design before it is a counting task.
Read inventory as states, not one stock number
Shopify separates on-hand, available, committed, unavailable, and incoming inventory. On hand is physically recorded at a location. Available can be sold. Committed belongs to placed but unfulfilled orders. Unavailable can include reservations, damage, quality control, and safety stock. Incoming is expected but not sellable until received.
This distinction prevents common mistakes. Incoming stock cannot support an immediate-delivery promise. Committed units are not free stock because they remain on a shelf. Safety stock is intentionally on hand but unavailable. Shopify's inventory states documentation explains the current model.
Create saved views for low available, incoming, unavailable, negative, and highly committed stock. Investigate the transition that created the state instead of forcing available quantity to match a desired storefront number.
| State | Meaning | Not equivalent to |
|---|---|---|
| On hand | Physically recorded at a location | Fully sellable |
| Available | Eligible to sell now | A verified shelf count |
| Committed | Allocated to unfulfilled orders | Free inventory |
| Unavailable | Reserved, damaged, in QC, or safety stock | Missing inventory |
| Incoming | Expected through transfer, PO, or app | Ready to ship |
Swipe horizontally to compare every column.
Each state answers a different operational question.
Model locations around real fulfillment responsibility
A Shopify location can represent a store, warehouse, dropshipper, print provider, 3PL, or app. Activate a variant only where that location can genuinely fulfill it. Quantities are independent by location and are not automatically pooled.
Map every location to service area, processing time, shipping profile, cutoff, cost, return address, and fallback. Prevent retail-only or quarantine locations from fulfilling online orders. Test mixed carts and products available from multiple owners before relying on routing.
Use the multi-location inventory guide when one product can ship from a warehouse, retail store, supplier, or fulfillment app. Placement affects split shipments, promises, buffers, and margin.
Separate the commercial order from physical receipt
A purchase order records what the supplier agreed to provide: variants, quantities, cost, currency, terms, destination, and reference. An inventory transfer tracks physical movement. Shopify's purchase-order documentation keeps these as connected but distinct records.
Do not make stock available because an invoice arrived. Receive against the shipment, count by variant, inspect quality, and accept or reject actual quantities. Document shortages, substitutions, damage, and overages. Use partial receipts when only part arrives so the remainder stays incoming with a revised date.
This sequence preserves supplier performance evidence and prevents a receiving team from inventing balancing adjustments later.
- 1
Approve the buy
Record supplier, SKU, quantity, cost, terms, destination, and expected date.
- 2
Track movement
Create the transfer and add shipment references.
- 3
Receive by evidence
Count and inspect each variant, accepting or rejecting actual units.
- 4
Resolve discrepancies
Record damage, shortage, substitution, and supplier response.
- 5
Release stock
Make accepted units available only where they can be fulfilled.
Use cycle counts and adjustment reasons to control drift
A full annual count finds errors too late. Count high-value and fast-moving A items frequently, B items moderately, and low-impact C items less often. Add event-driven counts after receiving discrepancies, unusual returns, transfers, app incidents, or repeated cancellations.
When the physical count is known, use Set to. When recording a known movement, use Adjust by. Select a reason such as count, received, return restock, damaged, theft or loss, or promotion. Shopify records who or what changed inventory in its adjustment history.
Do not use a generic correction to close an unexplained gap. Repeated corrections by SKU, location, user, or app signal a process defect in receiving, picking, returns, bundles, permissions, or synchronization.
Watch out
A manual overwrite can make the storefront look correct while destroying the evidence needed to find the integration or process failure.
Replenish from demand, lead time, uncertainty, and cash
A reorder threshold should cover expected demand during supplier lead time plus a deliberate safety buffer. Purchase quantity must also respect minimum order quantities, case packs, shelf life, storage, cash, inbound capacity, promotions, and ordering cost. One global low-stock number cannot represent every variant.
Prioritize A items, but note that Shopify's ABC report is revenue-based and excludes costs and discounts from the grade. Add contribution margin, supplier risk, substitution, strategic role, and obsolescence before committing cash.
Use reorder points and safety stock for formulas and a weekly buy sheet. Forecasts are inputs, not permission to ignore supplier and campaign context.
Automate alerts, then run a weekly exception review
Shopify Flow can notify a team when inventory crosses a threshold, hide or republish products, and create low-stock collections. Configure threshold-crossing logic with before and after quantities so one SKU does not alert after every later sale. Shopify documents this pattern in its Flow examples.
Review stockout risk, excess stock, negative quantities, aged incoming, receiving discrepancies, adjustment variance, supplier delays, unfulfilled committed stock, and sync incidents each week. Assign every exception an owner and date.
Close the loop by changing a control: reorder rule, safety stock, supplier allocation, purchase quantity, location activation, routing priority, count frequency, sync schedule, or catalog status. A dashboard that produces no operating decision is decoration.
| Exception | Evidence | Decision |
|---|---|---|
| Likely stockout | Available, velocity, lead time, incoming | Expedite, transfer, substitute, preorder, or pause |
| Excess stock | Days remaining, margin, age, season | Stop buying, bundle, reprice, or retire |
| Quantity drift | Count, history, app and user | Correct with reason and repair process |
| Supplier delay | PO, transfer, promised date | Revise promise, source backup, or reduce exposure |
| Oversell | Order time, sync log, buffer, authority | Protect customer, stop listing, fix ownership |
Swipe horizontally to compare every column.
Every inventory exception should produce a named operational decision.
Frequently asked questions
Yes. Shopify tracks variants by location, separates inventory states, records adjustments, manages purchase orders and transfers, and provides analytics. More complex forecasting, manufacturing, supplier feeds, or multichannel operations may require apps.