Useful Tools

Reference

The inventory shrinkage formula, with real numbers

Shrinkage rate = (recorded inventory value − counted inventory value) ÷ recorded inventory value × 100. What each term means, a fully worked cost example, the causes behind the gap, and how to measure it from a Shopify count.

By Bastien HugonFounder & Engineer9 min readPublished July 10, 2026

TL;DR

Inventory shrinkage rate = (recorded inventory value − counted inventory value) ÷ recorded inventory value × 100. Shrinkage is the gap between the stock your system thinks you own and the stock a physical count actually finds, expressed as a percentage of the value on the books. You get the number by counting real units, valuing the difference at cost, and dividing by the recorded value — everything on the right-hand side comes from a stocktake plus your per-variant cost.

Shrinkage is not a mystery metric; it is subtraction. Your records say you own a certain amount of stock, a count says you own less, and the difference — valued in money — is what shrank. The formula is one line. The hard part is producing the two numbers honestly and then reading the result without lying to yourself about the cause. This page keeps the arithmetic on the surface: every term defined, a worked example from recorded value to margin impact, the classes of cause behind the gap, and the exact path from a Shopify count to a shrinkage figure you can defend.

The two terms

Recorded inventory value

What your system believes you own, valued in money: on-hand quantity × unit cost, summed across the variants you are measuring. In Shopify this is the on-hand quantity at a location multiplied by the variant's cost per item. Value it at cost, not retail — shrinkage is a loss of the asset you paid for, and mixing in retail markup inflates the number and makes it incomparable period to period. (The cost-vs-retail question is common enough that it has its own answer in the FAQ below.)

Counted inventory value

The same variants, same cost, but valued at the quantity a physical count actually found. If the count is clean — every unit scanned once, nothing double-counted, drafts and archived variants excluded — this is the true asset on your shelves. A sloppy count produces fake shrinkage, so the count discipline (blind scanning, one pass, reconciling anything that moved mid-count) is what makes the formula trustworthy.

Worked example, end to end

Take one variant to keep the numbers legible. Your records show 100 units on hand, and the variant's cost is $12. A physical count finds 95 units. Five units are unaccounted for.

StepFormulaNumbersResult
Recorded valuerecorded units × cost100 × $12$1,200
Counted valuecounted units × cost95 × $12$1,140
Shrinkage (money)recorded value − counted value$1,200 − $1,140$60 (5 units)
Shrinkage rateshrinkage ÷ recorded value × 100$60 ÷ $1,200 × 1005%

The $60 is a real expense, not a rounding note. Those five units were an asset you paid $60 for; the count says they are gone, so $60 leaves your inventory account and lands in cost of goods sold as shrink. That directly reduces gross margin for the period — you already spent the cash to buy stock you can no longer sell. If those units would have retailed at, say, $30 each, the *opportunity* lost is larger ($150 of potential sales), but the number you book and track is the $60 at cost. Keep the two ideas separate: cost is what shrank on the books; retail is what you also failed to earn.

Scale the same subtraction across the whole catalog and you get a store-level shrinkage rate. The mechanics do not change — recorded value and counted value are just summed across every variant before you divide.

What the gap is actually made of

A shrinkage percentage tells you how much vanished, never why. The gap is a mix of distinct causes, and the whole point of measuring is to attribute it so you can act. The common classes:

  • External theft — shoplifting, walk-outs, stock taken by people outside the business.
  • Internal theft — stock taken by staff, or unrecorded 'personal use'.
  • Damage and breakage — units destroyed, spoiled, or made unsellable and thrown away without being adjusted out.
  • Administrative and clerical error — miskeyed receiving quantities, unrecorded sales, double-counted units, wrong-variant scans, unit-of-measure mistakes.
  • Supplier and receiving fraud or error — cartons invoiced as full but shipped short, so stock you were charged for never physically arrived.
Resist the urge to attach percentages to these buckets. Any 'X% of shrinkage is theft' split you have seen is a market average from someone else's stores, not your data — quoting it as if it were yours is guessing. Attribute your own gap from your own counts and adjustment reasons instead.

Measuring it in Shopify

Shopify does not print a 'shrinkage %' for you, but it holds everything the formula needs. The path is: run a count, let the count value the variance at cost, then record the adjustment against the reason that names the cause — so next quarter's number can be attributed instead of shrugged at.

  1. 01

    Count the real stock

    Do a physical or cycle count of the variants you are measuring. Scan each unit once, exclude draft and archived products, and reconcile anything that sold mid-count so you are comparing like with like.

  2. 02

    Value the variance at cost

    For every variant, compare counted quantity against on-hand and multiply the difference by the variant's cost. Sum the shortfalls to get shrinkage in money; divide by recorded value for the rate.

  3. 03

    Apply the adjustment with a truthful reason

    When you correct the on-hand to match the count, record the change against the adjustment reason that matches the cause — not a catch-all. This is what turns a raw variance into an attributable loss.

  4. 04

    Recount anything beyond your investigate threshold

    Shopify's own guidance is to recount a variance greater than 5% before trusting it. A large gap is a miscount until a second pass confirms it.

That third step is where most shrinkage tracking quietly fails. Shopify offers seven adjustment reasons — Correction, Count, Received, Return restock, Damaged, Theft or loss, and Promotion or donation — and the reason you pick is the only place the *cause* is ever recorded. Map the cause to the reason deliberately:

Observed causeAdjustment reason to useWhy
Units missing, no explanation, likely stolenTheft or lossKeeps loss attributable so you can watch it trend by location or category.
Units broken, spoiled, or discardedDamagedSeparates destroyed stock from stolen stock — different fixes.
The count itself resets on-hand to realityCountMarks the change as the result of a stocktake, not an ad-hoc edit.
A known keying error you are reversingCorrectionLegitimate only when you actually know it was clerical.
Stock given away or used for marketingPromotion or donationRemoves it from shrinkage entirely — it was a deliberate decision.
'Correction' is the reason that destroys your shrinkage data. Used as a catch-all for every variance, it launders theft, damage, and receiving shortfalls into one meaningless bucket — and next quarter you will have a shrinkage number you cannot break down. Reserve it for genuine clerical fixes.

Bringing the number down

Measurement is diagnosis; these are the levers that move the number:

  • Count on a cadence, not once a year. Frequent cycle counts catch a gap while its cause is still fresh and reversible; an annual count discovers a year of blended losses with no trail back to the cause.
  • Tighten receiving. A large share of 'shrinkage' is stock that never arrived. Count cartons in against the packing slip at the door, not weeks later, so short shipments become supplier claims instead of silent losses.
  • Attribute every adjustment. A count is only as useful as the reason attached to it. Consistent, honest reasons turn a raw variance into a story you can act on.
  • Assign accountability by counter. When each counted line records who scanned it, a persistent gap in one section stops being anonymous and becomes a conversation.

Doing this with Solvi Stocktake

The formula is trivial; producing the two honest numbers across thousands of variants is not. Solvi Stocktake runs the count — barcode, SKU, or phone camera, with blind scanning so a bip just increments and moves on — and captures the on-hand at the moment each line is scanned, so units that sell mid-count get flagged to re-verify instead of silently corrupting the variance. When the count is done, it shows the discrepancy report with inventory valued at cost before and after on the Growth plan, so the shrinkage figure is computed for you rather than exported to a spreadsheet. Nothing is written to Shopify until you review and apply, and the apply is reversible in one click — so a bad count never becomes a bad shrinkage number you have to unwind. Free covers two counts a month; scheduled cadence reminders and cost valuation live on Growth.

Same arithmetic as the worked example above — recorded value minus counted value, over recorded value — computed continuously, attributed by reason, and safe to apply.

Frequently asked questions

What is an acceptable shrinkage rate?

There is no honest universal number — an 'acceptable' rate varies by industry, product mix, price point, and store format, and any single benchmark you see quoted is someone else's average, not a target for your store. The actionable rule that does travel: treat your own trend as the baseline and investigate the causes behind it, and follow Shopify's guidance to recount any single variance greater than 5% before trusting it, because a large gap is usually a miscount until a second pass confirms it.

Is shrinkage calculated on cost or retail value?

On cost. Shrinkage measures the loss of an asset you paid for, so both sides of the formula — recorded value and counted value — should use unit cost, not retail price. Valuing at retail inflates the number with markup you never actually banked and makes periods incomparable. Retail matters only as a separate 'opportunity lost' figure: what those missing units would have sold for. The number you book and track is the loss at cost.

How often should I measure shrinkage?

Often enough that a gap is still traceable to its cause. A once-a-year physical count discovers a full year of blended losses with no trail back, while a cycle-count cadence — high-value or fast-moving lines monthly, the rest quarterly or annually — surfaces each gap while receiving records and staff memory are fresh. Also measure on triggers: before a major reorder, after a seasonal peak, and any time a spot check shows a variance over 5%.

Related guides

Do this in minutes with Solvi Stocktake

Count your stock by scan, review the discrepancies against Shopify, and apply the fix — without ever risking your inventory data.