A cycle count tells you the number is wrong. It doesn't tell you when it went wrong.
So the fix is another count. And the same SKUs drift again next quarter, because nothing in the process ever identified the event that caused it. We find the day, the event type and the amount — for every SKU, not just the five you had time to investigate.
Three months of movement logs, matched event by event. $1,600 — $800 for the first three.
Two lines by email · no obligation · answered by the person who would do the work
Eight things we hear in the same week
The same SKU families
Variance lands on the same product groups every count, and nobody can say whether it's receiving, picking or returns.
Counts as the control
The answer to a bad count is another count. That finds the size of the gap again, never the cause.
Adjustments with no reason
Stock adjustments posted during a count with no reason code, so the history can't be read backwards.
Two systems, both sure
The WMS and the ERP each show a confident number. Neither is wrong from where it sits.
Stock in physical stores
Transfers between the warehouse and shops, and counts done at store level, are the same seam with one more side to it — and usually the least instrumented one.
Lots and expiry dates
Food, drink, supplements and cosmetics carry a second identity per unit. When the lot or the best-before travels on one side only, the variance shows up as a quantity problem and is really a traceability one.
Returns that never came back
The warehouse received it. The store system never heard. The unit is refunded and invisible at the same time.
Oversells you can't explain
You sold what you didn't have, which is a symptom of drift rather than a separate problem.
Why the drift survives every nightly job
Integrations reconcile balances. If the same event is written twice on one side and once on the other, both systems remain internally consistent — there is nothing for the integration to flag, because from its point of view nothing failed. The totals still disagree.
That's why the gap doesn't show up in any error report and only surfaces at the count, weeks later, by which point the trail is cold and the honest answer is "we don't know".
The causes are boring and findable. Four of the five below are invisible in a balance report and obvious in a movement log. That's the whole trick: stop comparing totals, compare events.
| Cause | Where it hides |
|---|---|
| Receipt posted twiceonce at the door, once when the PO was closed | Balances agree with themselves |
| Return received, never posted backwarehouse has it, store system doesn't | No error anywhere |
| Transfer written on one side onlystock moved in the WMS, not the ERP | Both look complete |
| Pick cancelled downstreamallocation already written upstream | Cancellation isn't a failure |
| Count adjustment with no reason codethe correction erases the evidence | History can't be read back |
The ten-minute version
You don't need us to find out whether this is worth pursuing. Take the five SKUs with the worst variance from your last count. Pull their movement history from both systems. Put them side by side and sort by date.
In most brands the divergence starts on one specific day, in one event type. Once you see which, it stops being a mystery and becomes a process fix. If the two histories agree and the variance is real shrink, that’s a different problem with a different owner — also worth knowing.
Whatever is doing it now will be in the next count too. That's the only urgency here, and it's a real one: the drift compounds quietly between counts, and the trail gets colder the longer nobody looks at the movement log.
See the day the stock started drifting, not just the size of the gap
The same script we run on client exports, pointed at its sample files. The interesting part is the bottom: two SKUs written two ways, which is the single most common reason two stock figures disagree.
One row per SKU that drifted, with the day it started, the event type behind it and the evidence. The last column is the process fix, which is the part that stops it recurring.
What you get
Plus the line-level detail behind every row: SKU, date, event, both systems' values, and the difference. The summary is for the meeting; the detail is so somebody can actually fix the process.
Two exports, no access
The movement history from both sides — typically the WMS or 3PL transaction log and the ERP or store ledger: NetSuite against a 3PL export, Cin7 or Brightpearl against a WMS, Shopify against ShipStation or ShipHero. Same period on both, plus your last count results if you have them.
No system access, no admin accounts, no customer data. If your export includes customer names, strip the column before sending; the matching runs on SKU, date, event type and quantity.
If the join key between the two files doesn't line up above 90%, we tell you that and stop, rather than printing a confident number built on a bad match.
Fixed, published
- Every unexplained unit, traced to a day and an event type
- Ranked by units and by cost
- The process fixes that would stop each one
- Written method, so your team can repeat it
Ongoing monitoring — the same check run every morning on yesterday's movements — starts at $800 per month. Full pricing →
The ones that come up
Our WMS and ERP are integrated. Doesn't that cover it?
Integration keeps balances in step. It has no opinion about an event that was written twice on one side — both systems stay consistent with themselves and the totals still disagree. That's precisely the class of drift we're looking for.
Isn't this just shrink?
Sometimes. The point of the exercise is to separate the two: units that left the building without a transaction, versus units that are on the shelf but wrong in a system. They have different owners and different fixes, and most teams have never had them split apart.
We count quarterly. Is that enough history?
Counts are the symptom, not the input. We work from movement logs, which exist continuously — so we can usually show the drift accumulating between your counts, which is more useful than the count itself.
What if we find nothing?
Then you have a documented answer for the next time somebody asks why the count was off: it isn't the systems. That is worth having, and it is the reason the ten-minute version above exists — to find that out before anyone pays for anything.
The neighbouring seams
Two lines by email. No form, no calendar link.
Which two systems, roughly what size, what you have already tried. You get a straight answer the same working day — including “this is not something we would help with”, when that is the honest one.
Two lines by email · no obligation · answered by the person who would do the work