Why inventory tracking matters in daily operations
Inventory tracking is the system that keeps your storefront availability, picking accuracy, and replenishment decisions aligned with reality. In Shopify, the goal is simple: the number customers can buy should match what you can actually ship from the correct place. Most overselling and “stock confusion” comes from four avoidable gaps: missing SKUs, variants not tracked, the wrong inventory policy (deny vs. continue), and inventory assigned to the wrong location.
Core Shopify inventory concepts (the ones you must get right)
SKU (Stock Keeping Unit)
A SKU is your internal identifier for a sellable item. It should be unique per variant, stable over time, and meaningful to your team (not customers). SKUs power receiving, cycle counts, and reconciliation with suppliers and warehouses.
- Good SKU:
TSH-CLSC-BLK-M(product-line + style + color + size) - Bad SKU:
shirt123(not unique or descriptive)
Variants
Variants are the distinct sellable versions of a product (size, color, material, pack size). Shopify tracks inventory at the variant level, not the product level. If you have a “T-Shirt” with sizes S/M/L, each size needs its own SKU and inventory quantity.
Inventory tracking (Track quantity)
When tracking is enabled for a variant, Shopify maintains an on-hand quantity per location and uses it to determine availability. If tracking is off, Shopify treats the item as always available (unless you manually limit sales another way), which is a common cause of overselling.
Inventory policy: Deny vs. Continue selling when out of stock
- Deny: Customers cannot purchase when available quantity is 0 (best for most physical products).
- Continue selling: Customers can purchase even when quantity is 0 (use only when you intentionally accept backorders or preorders and have a clear operational promise).
Operational rule of thumb: default to Deny unless you have a documented backorder process and supplier lead times you trust.
Continue in our app.
You can listen to the audiobook with the screen off, receive a free certificate for this course, and also have access to 5,000 other free online courses.
Or continue reading below...Download the app
Multiple locations
Locations represent places where inventory is stored and fulfilled (warehouse, retail store, 3PL, pop-up). Shopify tracks inventory per location and can route fulfillment based on location rules. If inventory is assigned to the wrong location, you’ll see “in stock” but can’t pick it where the order is being fulfilled.
Setup: make inventory reliable before you scale
1) Create and standardize SKUs
Before entering quantities, decide a SKU format and apply it consistently.
- Choose a pattern your team can read quickly (category/style/color/size/pack).
- Make SKUs unique per variant (no duplicates across products).
- Keep SKUs stable: don’t change SKUs unless you have a controlled migration plan.
Step-by-step in Shopify:
- Go to Products and open a product.
- In Variants, click a variant.
- Enter the SKU field (repeat for each variant).
- If you have many items, use Bulk editor to edit SKUs across variants.
2) Enable tracking and set the right inventory policy
Step-by-step:
- Open a product variant.
- In the Inventory section, enable Track quantity.
- Set Continue selling when out of stock to off for “Deny” behavior (typical), or on only if you intentionally accept backorders.
- Confirm the variant is stocked at the correct locations (see next section).
Practical check: pick one top-selling variant and simulate the edge case. Set quantity to 0 and confirm the storefront behavior matches your policy (sold out vs. purchasable).
3) Assign inventory to locations (so fulfillment pulls from the right place)
Shopify can only allocate and reduce inventory correctly if each variant has quantities in the correct location(s).
Step-by-step:
- Go to Settings > Locations and ensure each physical/fulfillment site is created and active.
- For each location, confirm whether it fulfills online orders (enable only where you actually pick/ship).
- Go to Products > select a product > open a variant.
- In Inventory, set quantities per location (e.g., Warehouse A: 30, Retail Store: 5).
Operational tip: avoid “phantom locations.” If a location exists but should never ship online orders, disable fulfillment from that location to prevent misrouting and false availability.
4) Set reorder points (operationally) and create a replenishment routine
Shopify doesn’t enforce reorder points as a universal built-in rule for every workflow, but you can run reorder points operationally using a simple method: define a minimum on-hand threshold per variant and review it on a schedule.
How to calculate a basic reorder point:
- Average daily sales (units/day) × supplier lead time (days) = lead-time demand
- Add a safety stock buffer (to cover spikes and delays)
- Reorder point = lead-time demand + safety stock
Example: You sell 4 units/day, lead time is 10 days, safety stock is 15 units. Reorder point = 4×10 + 15 = 55 units. When on-hand drops to 55, reorder.
Practical implementation:
- Maintain a reorder point list in a spreadsheet or inventory system (SKU, variant, location, reorder point, supplier, lead time).
- Weekly: export inventory by variant and location, compare to reorder points, and generate purchase orders.
- For multi-location: set reorder points per location if each location replenishes independently; otherwise set at the primary stocking location and transfer stock as needed.
Operational routines that prevent overselling and stock confusion
Receiving stock (inbound shipments)
Receiving is where inventory accuracy is won or lost. The goal is to increase on-hand quantities only after verifying what physically arrived.
- Before receiving: confirm SKUs and variants match the supplier packing list.
- During receiving: count units per SKU/variant; note shortages, overages, and damage.
- After receiving: update Shopify quantities at the correct location and record the reason.
Step-by-step (manual receiving into Shopify):
- Go to Products and search the SKU/variant.
- Open the variant and go to Inventory.
- Adjust the quantity at the receiving location (e.g., Warehouse).
- In the adjustment details, enter a clear reason (e.g., “PO 1042 received: +120”).
Receiving checklist (printable logic): verify SKU → verify variant attributes → count → inspect damage → assign to location → document discrepancy.
Cycle counts (small, frequent counts)
Cycle counting is counting a subset of inventory regularly instead of doing infrequent full counts. It catches drift caused by picking errors, damage, theft, and unrecorded transfers.
Recommended cadence:
- A items (top sellers): weekly
- B items: monthly
- C items: quarterly
Step-by-step cycle count workflow:
- Pick a location (count locations separately).
- Print or export a list of SKUs to count (include variant details).
- Count physical units and record results.
- Compare to Shopify on-hand for that location.
- Make adjustments with standardized reasons (see below).
Damaged stock and quarantine
Damaged items should be removed from sellable inventory immediately to prevent accidental fulfillment and customer complaints.
- Best practice: create a dedicated “Quarantine/Damaged” location if your workflow supports it, or adjust inventory down at the selling location and track damage separately.
- Rule: if it cannot be shipped as new, it must not remain in sellable on-hand.
Step-by-step:
- Identify damaged units during receiving, picking, or returns processing.
- Move units to a quarantine area physically.
- In Shopify, either transfer quantity to a quarantine location (if used) or reduce on-hand at the selling location.
- Record the reason: “Damaged during receiving,” “Damaged in warehouse,” “Customer return damaged,” etc.
Inventory adjustments: always use clear reasons
Adjustments are normal, but undocumented adjustments create confusion and hide process problems. Use consistent reason codes so you can analyze patterns.
| Reason code | When to use | Example note |
|---|---|---|
| RECEIPT | Stock received and verified | PO 1042 received +120 |
| COUNT | Cycle count correction | Cycle count Jan Wk2: -3 |
| DAMAGE | Unsellable units removed | Damaged in picking: -1 |
| LOSS | Missing/unaccounted shrink | Investigation complete: -2 |
| TRANSFER | Moved between locations | WH-A to Store-1: 10 |
| SUPPLIER_CREDIT | Returned to supplier | RTV 778: -15 |
Operational rule: if you can’t explain an adjustment in one sentence, pause and investigate before changing numbers.
Scenario-based operations: what changes inventory (and what doesn’t)
Scenario 1: Moving inventory between locations (transfer) and avoiding “double counting”
Situation: You move 20 units of TSH-CLSC-BLK-M from Warehouse A to Retail Store.
What should happen:
- Warehouse A on-hand decreases by 20.
- Retail Store on-hand increases by 20.
- Total across all locations stays the same.
Common mistake: adding 20 to the store without subtracting 20 from the warehouse, inflating total inventory and causing overselling later.
Practical transfer routine:
- Create a transfer request (even if informal) listing SKUs, quantities, from/to locations.
- Pick and pack the transfer like an order (to reduce picking errors).
- Update Shopify as a location-to-location move (or two adjustments with matching
TRANSFERnotes if your process is manual). - On receipt at the destination, verify counts and confirm the transfer.
Scenario 2: Partial fulfillments and how they affect available stock
Situation: An order contains 3 units of a variant. You only have 2 units available at the chosen location, so you fulfill 2 now and 1 later.
Key inventory behaviors to understand:
- On-hand decreases when items are fulfilled (and/or when allocated depending on your apps/settings).
- Available is what customers can still buy, typically on-hand minus any reserved/committed quantities.
- Partial fulfillment can leave committed quantities that reduce availability even if on-hand exists elsewhere.
Operational safeguards:
- Before splitting, check other locations: can the remaining unit be fulfilled from another location without causing delays?
- If you move stock from another location to complete the order, perform a proper transfer (don’t just “borrow” physically without updating Shopify).
- When backordering is not allowed (inventory policy = deny), ensure the remaining unit is not promised unless you have a confirmed inbound or transfer.
Practical example:
- Warehouse A on-hand: 2
- Store on-hand: 5 (but store does not fulfill online orders)
- Order needs: 3
If the store cannot fulfill online orders, you must either (a) transfer 1 unit from store to warehouse and then fulfill, or (b) enable store fulfillment intentionally and update routing rules. Otherwise, you risk showing “in stock” while the shipping location cannot pick it.
Scenario 3: Bundles and multipacks (preventing mismatched counts)
Bundles and multipacks create inventory confusion when the storefront sells one thing but the warehouse picks multiple components. The risk: Shopify shows the bundle in stock while one component is out, or component inventory doesn’t decrement correctly.
Approach A: True bundle SKU with its own inventory (pre-kitted)
Use when: you physically assemble bundles ahead of time (kitting) and store them as a separate item.
- Create a bundle product with its own SKU (e.g.,
BND-SKINCARE-SET-01). - Track inventory for the bundle variant.
- When you kit 10 bundles, reduce component SKUs and increase bundle SKU by 10 (with clear
TRANSFERorKITTINGnotes).
Benefit: simplest picking and most accurate storefront availability.
Approach B: Virtual bundle that decrements components (made-to-order)
Use when: you assemble bundles during picking and want availability based on components.
- Ensure each component has accurate tracked inventory at the fulfillment location.
- Use a bundling method/app that links the bundle to component SKUs so component inventory decrements when the bundle sells.
- Define the bundle’s available quantity as the limiting component (e.g., if A=12, B=5, C=20, bundle availability is 5).
Operational routine:
- Cycle count bundle components more frequently (they drive bundle availability).
- When a component is damaged or moved locations, update immediately; bundle availability changes instantly.
Multipacks (same SKU, different pack size)
Common pitfall: selling a “3-pack” while tracking inventory as individual units without a conversion rule, leading to overselling.
Two reliable methods:
- Track multipack as its own SKU (pre-packed): create variant
WGT-ABC-3PKwith its own inventory. - Track as components (each sale consumes 3 units): use a system that decrements 3 units of the single item per multipack sale.
Example: If you have 20 single units and sell a 3-pack, your system must reduce singles by 3. If it reduces by 1, your storefront will overstate availability by up to 2 units per order.
Quick reference: daily and weekly inventory reliability checklist
Daily
- Receive inbound stock with verified counts; update the correct location with a
RECEIPTnote. - Quarantine damaged items immediately; adjust with
DAMAGEreason. - Confirm any location moves are recorded as transfers (no “silent” moves).
Weekly
- Run cycle counts for top sellers and high-variance SKUs; adjust with
COUNTnotes. - Review low-stock list against reorder points; trigger replenishment or transfers.
- Audit bundle/multipack components for drift (especially if made-to-order bundles are used).