Dead Stock Analysis for Small Grocery Stores
Find dead stock in your grocery store before it kills your margin. A practical sell-through method using your own sales export — no new software needed.
ShelfLifePro Editorial Team
Inventory management insights for retail and pharmacy
The stock you stopped thinking about is still costing you money
Dead stock doesn't announce itself. It sits on the shelf looking fine, taking up space, tying up cash — and by the time you notice it, the expiry date is close enough that your options are limited. The margin erosion happens quietly, SKU by SKU, week by week.
The good news: the signal is already in your sales export. You don't need a new system to find dead stock. You need a method for reading the data you already have.
What dead stock actually is — and what it isn't
Dead stock is inventory that has stopped selling at a rate that will clear it before it expires or becomes unsellable. That's the definition that matters for a grocery store. A slow mover that still turns every three weeks may be fine. A product that hasn't scanned in six weeks with four months of shelf life left is a problem — but a manageable one. A product that hasn't scanned in six weeks with three weeks of shelf life left is a write-off in progress.
The distinction matters because the fix is different. Slow movers need a markdown or a reorder pause. Near-dead stock with tight expiry needs immediate action: a promotion, a bundle, a donation, or a return. Getting the two confused leads to discounting products that would have sold fine, and ignoring products that are about to become waste.
The mechanism: how stock goes dead in a grocery store
It usually starts at the buy. A supplier offers a deal on a case quantity. You take it because the per-unit margin looks good. But the deal quantity is three times what the shelf actually needs, and the product sits.
Or a seasonal item doesn't move the way last year's did. Or a new product gets a good placement but the category just doesn't have the foot traffic to support it. Or a receiving error puts the wrong batch at the front of the shelf, and the older stock quietly ages behind it.
None of these are unusual. They're the normal texture of running a grocery store. The problem is that without a regular sell-through check, you don't see the accumulation until it's too late to recover margin.
The sell-through method: what to pull and what to calculate
Pull two exports from your POS or inventory system: units sold by SKU for the last 30 days, and current on-hand quantity by SKU with expiry date. Most systems — even basic ones — can produce both. If yours can't produce expiry dates, pull on-hand quantity and use your last receiving records for the expiry.
Once you have both files, the calculation for each SKU is:
Daily sell rate = units sold in last 30 days ÷ 30
Days of cover = on-hand units ÷ daily sell rate
Days until expiry = expiry date − today
If days of cover exceeds days until expiry, you have a problem. If days of cover is more than double days until expiry, you have a serious problem. If daily sell rate is zero — the product hasn't scanned at all in 30 days — you have dead stock.
Get the department date-check logs
Printable daily date-check logs for produce, dairy, meat and deli — the department discipline printed on each page, plus a fillable Excel version. See what's inside.
Instant download. No spam, unsubscribe in one click.
A labelled worked example
Suppose a store carries a specialty pasta sauce, SKU #4471. Here's what the export shows:
- Units sold in last 30 days: 4
- On-hand quantity: 36 units
- Expiry date: 47 days from today
Daily sell rate = 4 ÷ 30 = 0.13 units/day
Days of cover = 36 ÷ 0.13 = 277 days
Days until expiry = 47 days
Days of cover (277) is nearly six times the days until expiry (47). At the current sell rate, roughly 30 of the 36 units won't clear before expiry. If the store paid $3.20 landed cost per unit, that's close to $96 at risk — before you account for the labor to pull and dispose of them.
That's one SKU. Run this across your full range and the picture gets clearer fast. Sort by the gap between days of cover and days until expiry, descending. The top of that list is where you act first.
Building a simple slow-moving inventory report
You don't need a dedicated slow-moving inventory report tool to do this. A spreadsheet with the columns above — SKU, description, units sold (30 days), on-hand, daily rate, days of cover, expiry date, days until expiry, and the gap — is enough to run a weekly dead stock check.
Flag anything where:
- Daily sell rate is zero (no sales in 30 days)
- Days of cover exceeds days until expiry by more than 30 days
- Days of cover exceeds days until expiry by more than 2× (high urgency)
The zero-rate items are your true dead stock. The high-gap items are your slow movers that will become dead stock without intervention. Treat them differently — the slow movers still have recovery options that the zero-rate items may not.
For perishable departments — dairy, produce, deli — run this check more frequently than weekly. The math moves fast when shelf life is measured in days, not months. The posts on managing perishable overstock costs and seasonal inventory planning go deeper on category-specific timing.
What to do once you've found it
Finding dead stock is the first step. The second is deciding what to do with each item before the window closes. The options — markdowns, bundles, donations, supplier returns, liquidation — each have different margin implications and different deadlines.
The dead stock liquidation playbook covers the decision sequence in detail: which options recover the most margin, which require the most lead time, and how to work the supplier return process before you're stuck with a write-off.
The short version: the earlier you catch it, the more options you have. A product with 45 days left can be promoted, donated for a tax deduction, or returned to the supplier with a claim. A product with five days left can be discounted heavily or disposed of. The sell-through method above is valuable precisely because it finds the 45-day problems before they become the five-day problems.
What a notebook can and can't do here
A manual spreadsheet check works well for stores with a manageable range — say, a few hundred active SKUs across dry goods and a couple of perishable departments. The discipline is the hard part: the check has to happen on a fixed schedule, not when someone remembers.
Where manual checks struggle is scale and speed. If you're running a broader range, the spreadsheet takes long enough to build that it doesn't get built consistently. And the sell-through calculation doesn't automatically account for velocity changes — a product that sold well last month but has stalled this month looks fine in a 30-day average.
Where ShelfSense fits
ShelfSense by ShelfLifePro runs this kind of sell-through analysis daily against your stock and expiry records, flags slow movers losing margin with a recommended action and the expected recovery, and shows the arithmetic behind every call — units at risk, projected loss, suggested discount. It recommends; you approve. Nothing changes without a human decision.
ShelfSense's free audit reads one CSV export, no account needed. If you want to see what it surfaces on your actual range before committing to anything, that's the place to start: run the free audit at /shelfsense.
ShelfLifePro Editorial Team
The ShelfLifePro editorial team covers inventory management, expiry tracking, and waste reduction for pharmacies, supermarkets, and retail businesses worldwide.
See what batch-level tracking actually looks like
ShelfLifePro tracks expiry by batch, automates FEFO rotation, and sends markdown alerts before stock expires. 14-day free trial, no credit card required.
The monthly expiry-tracking brief
One short email a month, only when there is something worth reading. FEFO tactics, markdown math, and real-world waste-reduction wins. Unsubscribe anytime.
No spam. Unsubscribe in one click.