Notes

Cycle counting: the total is right, the bins are wrong

The stock report and physical count both show 180 pieces. Two bins still disagree. A worked cycle count shows how to measure record accuracy and investigate the difference.

The warehouse report shows 180 pieces. The physical count finds 180. At the next pick, someone walks to a bin that contains fewer pieces than the screen promised.

The total was correct. The location records weren't.

Cycle counting means checking selected inventory repeatedly through the year, rather than leaving every check to one full stocktake. Count the stock, compare it with the records, then resolve the differences. Oracle's cycle-count guidance describes this periodic approach and using item classes to set different counting frequencies.

A count can correct today's balance. It can also reveal how the record became unreliable, if we keep enough detail to investigate it.

Count at the level people use

Our fictional warehouse holds one bracket item across five bins. At 09:00 on 14 October 2026, the team compares the system balance with a checked physical count for that same moment. Everything is measured in individual pieces. There are no held or reserved quantities in this example.

Bin System pieces before review Counted pieces Count minus system
A 100 100 0
B 50 45 −5
C 20 25 +5
D 10 10 0
E 0 0 0
Total 180 180 0

Bin E was actually checked and found empty. Its zero is evidence, not a blank cell filled in to finish the sheet.

B is five short against its record. C has five more. Adding the differences gives zero, but it doesn't make either record right. A picker asking for 50 pieces from B still has a problem.

That is why inventory accuracy needs a stated record level. Here it is one item in one bin at one time. A warehouse-wide total answers a different question.

Calculate record accuracy before making adjustments

For this count, a record matches only when its quantity agrees exactly. Three of five records match: A, D and E.

Exact-match accuracy for these five records

Matching item-bin records ÷ checked item-bin records × 100

3 ÷ 5 × 100 = 60%

This is a result for the five records we checked. They aren't a random sample that lets us estimate the whole warehouse's accuracy.

Some businesses use quantity or value tolerances. If you do, show the rule alongside the percentage. A result based on “within five pieces” won't mean the same thing as our exact-match result. Keep the underlying differences available too, particularly where a small discrepancy can stop a pick.

The data quality note explains why a valid-looking quantity can still be inaccurate. Cycle counting supplies the physical evidence that a file check cannot.

Reconcile the difference without erasing it

The equal and opposite differences suggest a possible missed transfer. They don't prove one. The team should also check the count, item identity, units and movements around the cutoff.

In the next part of our fictional example, a recount and transfer record T17 confirm that five pieces moved from B to C before 09:00. The movement wasn't posted. An authorised posting brings B to 45 and C to 25. The physical stock hasn't changed.

One item, five checked bins

Zero net difference. Two wrong records.

Checked at 09:00 on 14 October 2026. Exact matches only. The confirmed transfer changes the records, not the stock on the shelf.

Exact matches in this count3 / 560% of checked item-bin records

Net quantity difference0 pieces180 counted and 180 recorded

Scroll sideways to inspect the variance scale and the full ledger.

B is five pieces short; C is five pieces overBin A: counted 100, system 100, difference 0 pieces. Bin B: counted 45, system 50, difference −5 pieces. Bin C: counted 25, system 20, difference +5 pieces. Bin D: counted 10, system 10, difference 0 pieces. Bin E: counted 0, system 0, difference 0 pieces. Net difference zero in both stages.BinFewer than recordMore than record−50+5Bin A: 100 counted, 100 recorded, 0 difference.A0Bin B: 45 counted, 50 recorded, −5 difference.B−5Bin C: 25 counted, 20 recorded, +5 difference.C+5Bin D: 10 counted, 10 recorded, 0 difference.D0Bin E: 0 counted, 0 recorded, 0 difference.E0Counted minus system quantity, in individual pieces. Hollow dot = exact match.

B and C cancel only in the total

Equal and opposite differences suggest a transfer to investigate. They do not establish the cause. B still holds five fewer pieces than its record promises.

Both stages retained. All values are individual pieces.
BinOriginal systemPhysical countSystem after T17
A100100100
B504545
C202525
D101010
E000
Total180180180

Count finding: 3/5 exact matches (60%). After verified correction: 5/5 (100%). The original finding remains.

Count boundaries

One item, five selected bins and a common cutoff; all stock is released and unreserved. Bin E is a verified empty bin, not missing data. The second view assumes the transfer has been confirmed and authorised. The five records do not estimate accuracy across the warehouse.

Fictional count of one item in five bins at 09:00 on 14 October 2026. All quantities are pieces. The second view includes a confirmed, authorised posting of transfer T17, five pieces from B to C before the cutoff. Both stages remain in the table. A matching total alone is not evidence of that transfer.

After reconciliation, all five balances match this count. Keep the original 60% finding in the count history. Replacing it with 100% would hide the errors the count discovered and make repeated misses hard to track.

Microsoft's cycle-count workflow separates counting from reviewing differences. Its warehouse implementation also allows open count work while stock remains available for outbound processing. Creating a count task doesn't necessarily freeze movements; check how your own process handles them.

Choose a common cutoff. Either control movements during the count or reconcile them so the system and physical quantities refer to the same time. Comparing a morning balance with an afternoon shelf count can create a discrepancy that is only a timing difference.

Choose the next count around the risk

A full physical inventory covers a defined scope at one point in time. Cycle counting spreads selected checks across a schedule. Whether it can replace a required full stocktake depends on the requirements and controls that apply to your business.

ABC/XYZ analysis can help you distinguish high-value stock from demand variability. For counting, also consider movement frequency, repeated discrepancies and the consequence of a wrong balance. A cheap spare can still stop production.

Set a manageable schedule, with someone responsible for reviewing exceptions. Counting more locations while unresolved differences accumulate gives you more findings and the same unreliable records.

For bins B and C, the next action is to investigate why T17 wasn't posted. Was the scan missed? Was the transaction rejected? Did the transfer reach the wrong location? Each answer needs its own evidence. The 5 Whys example shows how to work from a specific failure to a cause worth testing.

Keep three things from each count: the original discrepancy, the approved correction and the follow-up. On the next count, check whether the same failure returns. That gives the counting effort a purpose beyond repeatedly editing the balance.

Sources

  • Oracle. Cycle Count Criteria. Periodic counting and class-based selection.
  • Microsoft Learn. Cycle counting. Count, review and adjustment workflow; movement behaviour in its warehouse implementation.

The bins, quantities, transfer and investigation are fictional. The 60% result uses exact matches in five selected item-bin records, including one verified empty bin. It is not a warehouse-wide estimate or a claim of financial loss.

NextCycle service level vs fill rate: count cycles and units separately

Working on something like this?

I work with operations and transformation teams on operational excellence, digital transformation programs, supply chains and industrial AI. If this sounds like your line, your program or your problem, I’d be glad to compare notes.

Abolfazl ShirkavandImage preview unavailable