Cycle Counting Inventory on Shopify Without Stopping Sales
What cycle counting inventory means for a Shopify store
Cycle counting inventory is a repeating process of counting a subset of SKUs on a schedule, then reconciling physical counts against system records, instead of shutting the warehouse for one annual physical inventory. A Shopify store should use it when stock moves often enough that a yearly count leaves weeks of bad availability, wasted ads, and surprise stockouts between counts.
The goal is inventory record accuracy you can trust for reorders and selling, not a perfect warehouse photo taken once a year. For most product-driven Shopify merchants, a weekly or monthly cycle count on the SKUs that drive revenue is more useful than waiting for a full wall-to-wall count.
Count the products that can lose you money first. Do not pause checkout to prove the rest of the catalog is fine.
A full physical count still has a place: after a warehouse move, a theft event, a major system migration, or when accuracy has collapsed across the catalog. Cycle counting is the ongoing control that keeps those events rare. If you already see gaps between shelf and Shopify, start with a clean investigation process for existing gaps, then use cycle counts to stop new ones. The workflow in how to investigate a Shopify inventory discrepancy pairs well with the schedule below.
Step 1: Choose SKUs and set a count frequency
Do not count every SKU at the same pace. Rank products by how much a wrong count would cost you, then assign a frequency. ABC classification is a common way to do that: A items are counted most often, C items least often.
For a Shopify catalog, rank by a mix of units sold, revenue, and stockout cost, not by SKU count. A low-priced accessory that sells hundreds of units a week can deserve an A slot more than a high-priced item that sells twice a month. If you have not classified the catalog yet, use ABC analysis for Shopify inventory before you lock a calendar.
| Class | How to assign it | Count cadence to start | What "done" looks like |
|---|---|---|---|
| A | The small set of SKUs that drive most of your sales value | Weekly, or more often for fast movers | Every A SKU counted at least once in the period |
| B | The next tier of meaningful sellers | Monthly | Full B list covered each month |
| C | The long tail | Quarterly, or when a bin looks off | Sample or full count on a rotating bin list |
Treat those classes as a starting point you set from your own sales, not as fixed industry shares. If 40 SKUs produce most of your orders, those 40 are your A list. Recalculate the split from your orders rather than copying a textbook percentage.
Build a count list you can finish
- Cap a count session at what one person can finish in 60 to 90 minutes. Unfinished lists create half-updated records.
- Count by location (bin, shelf, or tote), not by jumping around the admin product list. Location-based counts catch items that are in the wrong place.
- Include variants as separate count lines. A wrong size is a wrong available quantity for that variant.
- Add any SKU that stocked out, was adjusted, or was returned in the last 14 days, even if it is a C item.
- Exclude digital products, gift cards, and items you do not physically hold.
Write the cadence down as a recurring calendar block with an owner. "We count when we have time" is how A items go uncounted for a quarter.
Step 2: Record a stock snapshot while orders continue
You do not need to pause sales to cycle count. You do need a timestamped snapshot of what Shopify believed was on hand at the location you are counting, plus a rule for every unit that moves after that timestamp.
Shopify tracks inventory quantities in states. On hand is the total units at a location. Available is what can still be sold. Committed covers units reserved for orders and other reservations, and those committed units still count toward on hand until they are fulfilled or otherwise removed. Unavailable and incoming are separate states. Confirm the definitions your store is using in Shopify's inventory states documentation before you train staff. Mixing committed, unavailable, and incoming on a count sheet is how a correct shelf count becomes a bad adjustment.
Take the snapshot
- Pick a count window with a named counter and a named reviewer. Morning, before inbound is put away, is usually cleaner than mid-afternoon.
- Export or copy On hand, Available, Committed, Unavailable, and Incoming for every SKU on today's list, for the location you are counting. Note the exact time.
- Freeze putaway and transfers for those bins only. Leave checkout on.
- Log every unit that leaves the counted location after the snapshot, and every unit that arrives. A pick that only moves stock from a bin to a pack station inside the same location has not left the location.
- Do not edit Shopify quantities until the count and the movement log are both finished.
The simplest control is a paper or spreadsheet movement log with five columns: time, SKU, quantity, direction (picked for an order, received, returned to a bin, transferred), and whether the unit left the Shopify location or only moved inside it. If two people can change the same bin during the count, the reconciliation will be a guess.
Multi-location stores should snapshot one location at a time. A count at the warehouse does not explain a quantity sitting at a retail location or at a 3PL. If a fulfillment app or 3PL is the system of record for a location, count against that location's quantity, not against a blended total.
Step 3: Count, investigate differences, and reconcile records
Decide the count scope before anyone touches a bin. A bin-only count is not the same number as Shopify On hand. On hand is the full quantity recorded at that location, including units already committed to unfulfilled orders if those units are still at the location.
Define the scope in writing for that session. Either count every unit still at the location, including staged picks, pack-station totes, and other unfulfilled units that have not shipped, or count sellable bin stock only and add the staged units back before you compare to On hand. Do not treat a unit that moved from a bin to a pack station as gone from On hand. It has left the bin. It has not left the location until it is fulfilled and removed from inventory, or transferred to another location.
Reconcile the location, then adjust
Count the physical units in scope. Then compute what On hand at that location should be if the snapshot and the movement log are both right.
- Start from snapshot On hand for that location, not from Available.
- Subtract only units that left the location after the snapshot: fulfilled and shipped, transferred out, or otherwise removed.
- Add units that arrived at the location after the snapshot: receipts, returns put back into the location, and transfers in.
- Do not subtract picks that are still unfulfilled and still physically at the location. Those units remain part of On hand and usually sit in Committed.
- If you counted bins only, add the staged and unfulfilled units you set aside, plus any other units at the location that were outside the bins, before you compare to On hand.
Expected On hand = snapshot On hand − units that left the location after the snapshot + units that arrived at the location after the snapshot. Compare that expected figure to the full physical quantity still at the location. The gap is the variance. A difference between a bin count and live Available is not a variance, and it is not a reason to lower On hand.
Investigate before you adjust
- Recount any variance above your own threshold before you post a change. A practical starting rule is to recount every A-item miss, and to recount other misses that are large relative to the quantity you expected.
- Check the wrong bin, the bin above, the pack station, and recently returned totes before you assume theft or a system bug.
- Match open, unfulfilled orders for that location. A unit in a pack station is still on hand until the order is fulfilled.
- Check recent purchase receives. A receipt posted to the wrong variant creates a clean-looking variance.
- Look at the adjustment history for that variant. Repeated manual edits usually mean the process is broken, not the shelf.
- Confirm you are adjusting the same location you counted. A second location can still hold or fulfill the same variant.
Shopify lets you adjust the on-hand quantity at a location and records the change as an inventory adjustment. Use a reason your team can filter later, such as "cycle count," and keep the count sheet. Set On hand to the reconciled full-location quantity, after you have accounted for units that actually left or arrived. Do not set On hand to a bin-only count, and do not set it from yesterday's Available quantity.
If the same SKU misses in the same direction three counts in a row, stop adjusting and fix the cause. Common causes are a barcode mapped to the wrong variant, a bundle that decrements the wrong component, a location that is not decremented on fulfillment, or receiving that never gets scanned. Adjustments hide those causes. They do not remove them.
For the broader operating setup around locations, tracking, and who owns the number, see Shopify inventory management. Cycle counting sits on top of that setup. It cannot repair a store that does not track inventory at the variant and location you actually fulfill from.
Step 4: Track accuracy and adjust the next count schedule
A count that is not scored will drift back into a yearly scramble. Track two numbers after every session, at the SKU level and at the session level.
- Count accuracy: SKUs whose full-location physical count matched expected On hand, divided by SKUs counted. This tells you whether records are clean.
- Unit variance: absolute units over or short, divided by units expected. If the expected quantity is zero, use the absolute unit difference instead of a percentage. This tells you how large the misses are, which an accuracy percentage can hide.
- Hit rate: share of the scheduled list actually counted. A perfect accuracy score on a partial list is not control.
Set an operating target for your own store, not a borrowed industry bar. Start by requiring every scheduled SKU to be counted, then tighten how often A items are counted until misses become rare enough that you trust the quantity for reorders and ads. If the team is already skipping bins, shrink the list before you add SKUs.
Review the log on a regular cadence you choose. SKUs that miss more than once can move up a class for the next couple of months. SKUs with several clean counts can move down. That keeps the schedule tied to risk instead of to a static spreadsheet from last January.
Tie the result to selling decisions. An A item that just failed a count should not get more ad spend until the quantity is trusted. A clean count on a fast mover is a better reorder signal than a report that has not been checked in months. Continuous stock monitoring, like the alerts in Skymetrics stock intelligence, is useful between counts: it flags a bestseller trending toward zero, while the cycle count tells you whether the on-hand number itself is real.
Common counting mistakes that create new discrepancies
Most new discrepancies come from the count process, not from the shelf. Avoid these.
- Editing from Available, or lowering On hand because units were picked but not yet fulfilled. Available moves as orders are placed. On hand still includes committed units that have not left the location.
- Counting bins only and posting that number as On hand, while staged or unfulfilled units sit at the pack station.
- Counting while someone else receives the same bin, with no movement log.
- Posting the adjustment, then also receiving the same units, which double-counts inbound.
- Blindly accepting a scanner count without a spot recount on high-value misses.
- Counting cases as units, or units as cases, on a mixed pack SKU.
- Updating the primary location and forgetting a second location that still fulfills orders.
- Using one annual shutdown as a substitute for a cadence. Accuracy decays as soon as sales resume.
- Writing off every variance as shrinkage. Uninvestigated write-offs train the team to skip root cause.
Run the next count this week on your top revenue SKUs only, at one location. Snapshot On hand, log which units actually leave the location, add back anything still staged for unfulfilled orders, reconcile the full location quantity, and record accuracy. Expand the list only after that session finishes the list you scheduled.