Slippage → Checks → Inventory drift

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.

Write, with the questions filled in
oleksii@slippagehq.com

Two lines by email · no obligation · answered by the person who would do the work

Sound familiar

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.

Mechanism

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.

CauseWhere it hides
Receipt posted twiceonce at the door, once when the PO was closedBalances agree with themselves
Return received, never posted backwarehouse has it, store system doesn'tNo error anywhere
Transfer written on one side onlystock moved in the WMS, not the ERPBoth look complete
Pick cancelled downstreamallocation already written upstreamCancellation isn't a failure
Count adjustment with no reason codethe correction erases the evidenceHistory can't be read back
Do it yourself first

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 it run

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.

Store: 28 rows store_inventory_sample.csv Warehouse: 29 rows 3pl_inventory_sample.csv Key: store["SKU"] ↔ warehouse["Item Code"] Key match: 75% ✓ key looks right [i] 25% of items did not match — that is the subject of the conversation, not a data problem ================================================================== STOCK: STORE ↔ WAREHOUSE ================================================================== SKUs in total (union): 36 ---------------------------------------------------------------- In the store, not at the warehouse 7 you are selling what the warehouse does not know about At the warehouse, not in the store 8 stock that cannot be sold Quantities disagree 5 a real difference in units ================================================================== SIMILAR SKUs — almost certainly one product written two ways (2): TWL-BLU-SET ~ TWL_BLUE_SET 95% ROB-WHT-KING ~ ROB_WHITE_KING 91% That is the drift itself: the connector never matched them, so the two stock figures walked apart.
sample data Console output of the same script that runs on client files, translated from its working language. The numbers come from the sample files shipped with it — no client data appears anywhere on this site.
Sample findings file — inventory driftCSV

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.

Deliverable

What you get

inventory-drift-findings.csv — sample shape, not real client data
1,284
units unexplained
$31,900
at cost
61%
traced to one event type
9
SKU families involved
Double receipt — PO closed after goods already posted14 SKUs · first seen 3 Feb · recurs on every PO closed late612 units
Return received, never posted back23 SKUs · runs continuously since the returns portal changed287 units
Transfer written in WMS only2 warehouses · 6 dates, all month-ends240 units
Adjustment without reason codeflagged, not explained — needs a human at your end145 units

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.

What we need

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.

Price

Fixed, published

Inventory drift audit
$1,600
one-off, three months of movement history
  • 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 →

Questions

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.

How to start

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.

Write, with the questions filled in
oleksii@slippagehq.com

Two lines by email · no obligation · answered by the person who would do the work