inventory

Cycle counts and physical inventory

PROFESSIONALEstimated read: 10 min· Updated 2026-06-05

Cycle counts and physical inventory

ProfessionalAdmin

Cycle counting is the discipline that keeps the on-hand quantity in the system aligned with the on-hand quantity on the shelf. An annual physical inventory is the catch-net — but with a healthy cycle-count program, the annual is largely a confirmation rather than a discovery. The Count surface covers both: rolling cycle counts cadenced by ABC class + targeted recounts triggered by exceptions, plus the single-event physical that closes the year.

TL;DR — Open Inventory → Counts → New count. Pick the scope (location, bin range, category, or a single SKU). The count sheet generates with the system's on-hand. Counters count, post the counted quantity, and the variance is shown. Significant variances route to a recount; approved variances post adjustment journals.

Before you start

  • The count's scope matters. A bin-level count is fast; a whole-site count needs scheduling + a movement freeze for that site for the duration.
  • For an annual physical, freeze receipts + shipments for the count period. Last-minute movement during a physical is the #1 source of variance you can't reconcile.
  • Counters should have scanners or tablets with the count sheet loaded; paper counts are supported but produce slower recount cycles.

Cycle count cadence by ABC class

FieldWhat it doesAccepted values / default
A itemsHigh-velocity + high-value — biggest contribution to inventory value.Count monthly. Every A item should be counted at least once per quarter.
B itemsMid-velocity / mid-value.Count quarterly. Every B item at least twice a year.
C itemsLow-velocity / low-value — long tail.Count annually (the physical typically covers them).
Exception triggersTargeted counts outside the cadence.Negative on-hand, large adjustment in last 30 days, suspicious shrink pattern, missing-lot lookup — all trigger a recount.

Run a cycle count

  1. Open Inventory → Counts → New count

    The new-count form opens.

  2. Pick the scope

    Location / zone / bin / category / SKU / ABC class — or a combination (e.g. "A items at Site 3"). The platform builds the count list from the scope.

  3. Choose blind vs informed

    Blind — counter sees the SKU + bin but not the system quantity (preferred for accuracy). Informed — counter sees the system quantity (faster but biases toward agreement). Blind is the default.

  4. Assign counters

    One or more workers. Counter pairs (counter + verifier) are a stronger control on high-value items.

  5. Counters count + submit

    On the scanner / tablet, counter scans the bin + each item + enters the counted quantity. Submission posts the count record; the variance against the system quantity is computed.

  6. Review variances

    The count list shows each line's variance + a recount flag where the variance exceeds the threshold. Significant variances default to recount before posting an adjustment.

  7. Approve adjustments

    Approved variances post adjustment journals (on-hand updated + a cost adjustment to inventory + a charge to the variance GL account). Approval is required + logged.

  8. Close the count

    The count moves to Completed. Any items with persistent variance after recount route to root-cause analysis (theft, receipt error, mis-pick, etc.).

Annual physical inventory

  1. Plan the count window

    Pick the window. Year-end is common but any month-end fits if your fiscal year doesn't align. Communicate to finance, operations, and procurement.

  2. Freeze movement during the count

    No receipts + no shipments at the site for the count duration. Pending movements are queued until the count closes.

  3. Run the count

    Use the cycle-count flow with whole-site scope.

  4. Reconcile + adjust

    Counters first pass; review; recounts on variances; final adjustments. The whole reconciliation should fit within the planned window — overrun calls for unfreeze + late reconciliation.

  5. Generate the year-end report

    A consolidated report shows opening on-hand, year's transactions, count-adjustment value, and ending on-hand. Finance signs off; the report attaches to the close package.

Variance handling

FieldWhat it doesAccepted values / default
Within toleranceVariance is small enough that the count posts directly.Default tolerance ~0.5-1% by quantity, configurable per category. A items often have tighter tolerance.
Outside tolerance — recountVariance exceeds the threshold but is plausible.A second count is ordered. Two counters or a counter + verifier eliminates miscounts.
Outside tolerance — confirmedSecond count confirms the variance.Adjustment journal posts. Root-cause investigation opens.
Negative on-handSystem shows fewer than zero — impossible physical state.Triggers an exception count; usually the result of an unposted receipt or a back-dated shipment.

Every field, explained

FieldWhat it doesAccepted values / default
ScopeWhat's being counted.Location, zone, bin, category, SKU, ABC class, or combination.
CountersWho's doing the count.One per line, or paired for verification.
Blind / informedWhether counter sees the system quantity.Blind preferred for accuracy on high-value scopes.
Counted quantityWhat the counter recorded.Posted before variance is shown to the counter.
VarianceSystem minus counted.Positive = system over, negative = system under (shrink).
Variance reasonRoot-cause classification.Shrinkage / mis-pick / receipt error / damaged / other. Drives operational follow-up.
Adjustment GLWhere the variance hits the income statement.Finance configures; typical accounts are 'inventory shrink' or 'inventory adjustment'.
ApproverWho signed off on the adjustment.Required for adjustments above a configurable threshold (often $500 / $5,000 / $50,000 tiers).

Common gotchas

  • "Counters agreed; system is still off." Double-check that the bin was empty of unaccounted items (back-stock, pre-staged pick, in-transit transfer). Counts assume the bin contains what's named — anything else needs a transfer first.
  • "The recount agrees with the first count, system disagrees." The system is wrong. Post the adjustment; open a root-cause investigation (was there an unprocessed receipt? a phantom shipment? a duplicate item?).
  • "Variance is huge but I'm sure it's real." Walk the bin before signing. Large variances are usually real but worth a manual sanity check before posting (a one-decimal-point error in the unit of measure is easy and embarrassing).
  • "Year-end is in 2 weeks and I've been skipping cycle counts." Catch up the high-A items now. A physical with no prior cycle coverage tends to produce huge year-end adjustments and a finance team that wants to know why they didn't see this coming.
  • "The same bin has variance every count." Open a process review — bin labeling, neighboring overspill, scanner accuracy, staff training. Persistent single-bin variance is rarely random.

Troubleshooting

Error codeWhat it meansFix
COUNT_SCOPE_LOCKED_MOVEMENT_FROZENReceipts or shipments attempted during a frozen scope.Wait for the count to close, or reduce the scope so the movement can proceed elsewhere.
COUNT_VARIANCE_RECOUNT_REQUIREDVariance exceeds threshold; auto-recount queued.Run the recount; do not post the adjustment from the first count alone.
COUNT_ADJUSTMENT_REQUIRES_APPROVALAdjustment value exceeds threshold.Route to the configured approver before posting.
COUNT_NEGATIVE_ON_HANDSystem on-hand went negative pre-count.Trace recent transactions — usually an unposted receipt or a back-dated shipment.

How this is recorded

Every count, every counted-quantity entry, every variance, every recount, every adjustment journal — all written to the count ledger and reflected in the inventory + finance ledgers. The count ledger is what finance reads during the audit to confirm the year-end inventory balance is defensible. Retention follows the audit-log retention FINANCE floor.

Related