Cycle counts and physical inventory
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
| Field | What it does | Accepted values / default |
|---|---|---|
| A items | High-velocity + high-value — biggest contribution to inventory value. | Count monthly. Every A item should be counted at least once per quarter. |
| B items | Mid-velocity / mid-value. | Count quarterly. Every B item at least twice a year. |
| C items | Low-velocity / low-value — long tail. | Count annually (the physical typically covers them). |
| Exception triggers | Targeted 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
Open Inventory → Counts → New count
The new-count form opens.
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.
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.
Assign counters
One or more workers. Counter pairs (counter + verifier) are a stronger control on high-value items.
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.
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.
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.
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
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.
Freeze movement during the count
No receipts + no shipments at the site for the count duration. Pending movements are queued until the count closes.
Run the count
Use the cycle-count flow with whole-site scope.
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.
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
| Field | What it does | Accepted values / default |
|---|---|---|
| Within tolerance | Variance 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 — recount | Variance exceeds the threshold but is plausible. | A second count is ordered. Two counters or a counter + verifier eliminates miscounts. |
| Outside tolerance — confirmed | Second count confirms the variance. | Adjustment journal posts. Root-cause investigation opens. |
| Negative on-hand | System 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
| Field | What it does | Accepted values / default |
|---|---|---|
| Scope | What's being counted. | Location, zone, bin, category, SKU, ABC class, or combination. |
| Counters | Who's doing the count. | One per line, or paired for verification. |
| Blind / informed | Whether counter sees the system quantity. | Blind preferred for accuracy on high-value scopes. |
| Counted quantity | What the counter recorded. | Posted before variance is shown to the counter. |
| Variance | System minus counted. | Positive = system over, negative = system under (shrink). |
| Variance reason | Root-cause classification. | Shrinkage / mis-pick / receipt error / damaged / other. Drives operational follow-up. |
| Adjustment GL | Where the variance hits the income statement. | Finance configures; typical accounts are 'inventory shrink' or 'inventory adjustment'. |
| Approver | Who 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 code | What it means | Fix |
|---|---|---|
COUNT_SCOPE_LOCKED_MOVEMENT_FROZEN | Receipts 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_REQUIRED | Variance exceeds threshold; auto-recount queued. | Run the recount; do not post the adjustment from the first count alone. |
COUNT_ADJUSTMENT_REQUIRES_APPROVAL | Adjustment value exceeds threshold. | Route to the configured approver before posting. |
COUNT_NEGATIVE_ON_HAND | System 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