How to Calculate Inventory Shrinkage from a WooCommerce Stocktake
Turn a stock count into a shrinkage figure: the formula, what counts as shrinkage, how to read the rate, and how to track it across counts.

A stock count gives you a pile of variances. Inventory shrinkage is what happens when you turn that pile into one number you can actually manage — and then watch it move.
This walks through the formula, where each input comes from in WooCommerce, what separates real shrinkage from ordinary data error, and why the single figure matters far less than its direction.
What shrinkage is — and what it isn’t
Shrinkage is the gap between the stock your records claim you have and the stock that physically exists, when the records claim more.
Three things it is not, all of which get lumped in and shouldn’t be:
- Positive variance is not negative shrinkage. Finding more than expected is almost never good news — it’s usually an admin error somewhere upstream. Netting a +12 against a −12 hides two separate problems and reports zero.
- Markdowns and write-offs you recorded are not shrinkage. If you knowingly binned damaged stock and recorded it, that’s a recorded loss, not an unexplained one.
- A single bad count is not shrinkage. One product off by 90 units is a mis-scan or a case-versus-unit mistake. Investigate outliers before they enter the calculation.
Shrinkage is specifically the unexplained shortfall. Keeping that definition tight is what makes the number worth tracking.
The formula
In units, per product:
Shrinkage (units) = Expected quantity − Counted quantity
In money, across the count:
Shrinkage value = Σ (shortfall in units × unit cost)
Then express it as a rate. There are two conventions, and the only real mistake is mixing them:
| Rate | Formula | Use when |
|---|---|---|
| Of inventory | Shrinkage value ÷ recorded inventory value × 100 | You want to know how leaky your stockholding is |
| Of sales | Shrinkage value ÷ total sales for the period × 100 | You want to benchmark against retail figures |
The sales-based version is the one most published retail benchmarks use. Pick one, write down which, and never switch — a change of denominator can halve or double your “improvement” without anything real happening.
A worked example
A count covering 64 products comes back with a net shortfall worth €427 at cost. Sales for the period since the last count were €38,000.
427 ÷ 38,000 × 100 = 1.12%
That’s your shrinkage rate for the period. On its own it means very little. Next quarter’s number is what makes it useful.
Getting the two numbers out of WooCommerce
The formula needs an expected quantity and a counted quantity for the same moment in time. That second requirement is where most manual attempts fall apart: if you export a stock report on Monday and count on Wednesday, the difference includes two days of trading and isn’t shrinkage at all.
This is what a snapshot-based count is for. When a stocktake session starts, expected quantities are frozen. Everything you count is measured against that baseline, so sales during the count don’t contaminate the result.

For the money column you need unit costs. If you have WooCommerce Cost of Goods data set, the variance value is calculated for you at cost. If you don’t, you have two options: set costs for your A items only (the ones that dominate the total anyway), or run the calculation on units and apply an average cost per category in a spreadsheet. The second is rough, but a rough shrinkage figure you track quarterly beats a precise one you never produce.
Before you call it shrinkage: clean the data
Run this filter over the variance report first. It usually removes a surprising share of the total.
- Pull the outliers. Anything wildly off is a counting or data event, not loss. Recount it.
- Separate positives from negatives. Report them as two figures. A count with +180 and −190 is not a €10 problem; it’s two processes that are both broken.
- Check the recently-changed products. If an item was imported, edited or synced since the last count, treat its variance as suspect.
- Look for whole-category patterns. A category uniformly short by small amounts is usually receiving, not theft — and it’s fixable.
What survives all four is your shrinkage.
Reading the rate
Published retail benchmarks put typical shrink in the region of 1–2% of sales; the US National Retail Federation reported an average around 1.4% in its 2021 survey. Treat those as orientation rather than a target — they’re dominated by large US chains, and a small online-and-shop WooCommerce business has a very different risk profile from a supermarket.
What the benchmark is genuinely useful for is a sanity check on your method. If your first calculation comes out at 11%, you probably have a data problem rather than a theft problem. If it comes out at 0.02%, check whether you’re counting blind — an open count that shows the expected quantity tends to produce reassuring numbers that mean nothing.
Where shrinkage actually comes from
The NRF’s 2023 figures attribute retail shrink roughly as: external theft including organised retail crime about 37%, employee theft about 28.5%, administrative and paperwork error about 21.3%, and vendor fraud about 5.4%. Again — US retail at scale, not a small WooCommerce store.
But that third slice is the one worth your attention, because it’s the one you can fix from a keyboard. Administrative error covers receiving the wrong quantity, refunds that never restocked, imports that overwrote stock, and units counted as cases. For a small store running its own operation, that share is often larger than the survey suggests, simply because there are fewer people and more manual steps.
Which is good news: it means your first shrinkage number probably contains a chunk of fixable process error, not just unavoidable loss. The eight common causes of wrong stock levels is a reasonable place to start hunting.
Tracking it across counts — the number that matters
One shrinkage figure is a data point. It cannot tell you whether things are getting better or worse, whether the change you made worked, or whether a particular category is bleeding.
So keep a simple table, one row per count:
| Date | Scope | Lines counted | Accuracy | Net variance (cost) | Rate |
|---|---|---|---|---|---|
| 31 Mar | A items | 64 | 92% | −€427 | 1.12% |
| 30 Jun | A items | 64 | 96% | −€180 | 0.47% |
Same scope, same method, same denominator, quarter after quarter. Two rows already tell you something no single count can. Export the count sheet each time so you can rebuild the numbers later if you need to.
If you’re counting a slice of the catalogue at a time rather than everything at once, a cycle-counting rota gives you these rows automatically — one per session.
Reducing it
In rough order of effort-to-benefit for a small store:
- Fix receiving. Count deliveries in against the packing note, on arrival, every time. This is the highest-yield habit in the list and it costs minutes.
- Fix the refund path. Decide what happens to a returned item and who marks it restocked. Refunds that don’t restock, and restocks of items that went in the bin, are both pure invented variance.
- Stop overwriting stock with imports. Remove the stock column from any CSV you didn’t intend to change.
- Count more often, in smaller slices. Frequency beats thoroughness — an error found in three weeks is traceable, the same error found in eleven months is not.
- Count blind. Everything above depends on measurement, and an open count doesn’t measure anything.
Notice that four of the five are process changes, not purchases. Shrinkage in a small store is usually an operations problem wearing a security-problem costume.
Shrinkage FAQ
What is the formula for inventory shrinkage?
In units it is expected quantity minus counted quantity, per product. In money it is the sum of each shortfall multiplied by its unit cost. As a rate it is the shrinkage value divided either by recorded inventory value or by total sales for the period, times 100 — pick one denominator and stay with it.
What is a normal shrinkage rate?
Published retail benchmarks put typical shrink in the region of 1 to 2% of sales, and the US National Retail Federation reported an average around 1.4% in its 2021 survey. Those figures are dominated by large US chains, so treat them as orientation rather than a target for a small store.
Do I need cost data to calculate shrinkage?
To express it in money, yes — that is what WooCommerce Cost of Goods data provides. You can start without it by tracking the shortfall in units, or by setting costs only for your highest-value products, which dominate the total anyway.
Is a positive variance the same as negative shrinkage?
No. Finding more than expected is usually an administrative error upstream, not a gain. Netting a plus twelve against a minus twelve reports zero and hides two separate problems — report positive and negative variance as two figures.
How often should I calculate shrinkage?
Every time you count, using the same scope and method. A single figure tells you almost nothing; the comparison between consecutive counts is what shows whether a process change worked.
What is the biggest fixable cause of shrinkage for a small store?
Administrative error — receiving the wrong quantity, refunds that never restocked, imports that overwrote stock, units counted as cases. It is a smaller slice of published retail figures than theft, but for a small operation with manual steps it is often larger, and it is the slice you can fix without buying anything.