Dead stock rarely announces itself. An item that stopped selling three months ago sits in the stock report next to one that sold yesterday, with the same quantity and the same cost. One number separates them: days of supply. It is simple enough for a spreadsheet and, set up once, it tells you every week what to reorder, what to stop buying and what to clear.
The formula
Days of supply = units on hand ÷ average daily units sold
Average daily sales should come from a recent window: 90 days is a sensible default, shorter for fast fashion, longer for slow industrial parts. Use units, not money, so price changes do not distort the pace.
Two companions make it useful:
- Days since last sale: today minus the date of the last sale. Days of supply cannot be calculated for an item that does not sell (it divides by zero), and those are exactly the items you need to see.
- Lead time: days from placing an order to having the goods on the shelf. Days of supply only means something next to it.
Starting thresholds
These are starting points, not laws. Tune them by category, supplier lead time and how much a stock-out costs you compared with holding stock.
| Condition | Status | Action |
|---|---|---|
| Days of supply below lead time + safety days | Reorder now | Place the order; check if a faster supplier is worth it |
| Between lead time and 2× your ordering cycle | Healthy | Nothing; review with the regular cycle |
| Above 90 days for an item that sells weekly | Overstock | Skip the next order; review the order quantity |
| No sale for 90+ days | Dead stock candidate | Stop reordering; try a bundle or a price test |
| No sale for 180+ days | Write-off decision | Clear, return to supplier or write down |
What a real catalogue looks like
The public dataset UCI Online Retail II records a year of sales of a UK online gift retailer: 3,803 SKUs sold between 2010-12-01 and 2011-12-09. It has no stock levels, so we cannot compute days of supply for every item. We can measure the demand side, which is the half most businesses skip.
Source: UCI Online Retail II (Chen, 2019), sheet Year 2010-2011, CC BY 4.0; our calculation
75.4% of SKUs sold in the last month. But 643 SKUs, 16.9% of the catalogue, had not sold for over 90 days.
A narrower cut: 614 SKUs (16.1% of the catalogue) sold during the first half of the year and then went silent for 90+ days. Together they made just 1.9% of revenue. Every unit of them still on a shelf is cash that is not working.
A fifth of SKUs, most of the money
Source: UCI Online Retail II (Chen, 2019), sheet Year 2010-2011, CC BY 4.0; our calculation
Sort SKUs by revenue and the curve rises steeply: 21.5% of SKUs make 80% of revenue. That gives the classic ABC split:
| Class | Rule | SKUs | How to manage |
|---|---|---|---|
| A | Top SKUs up to 80% of revenue | 816 | Never run out: weekly review, safety stock |
| B | Next SKUs up to 95% | 965 | Regular cycle, standard reorder points |
| C | The remaining 5% of revenue | 2,022 | Order on demand, cut slow items first |
Class C is where dead stock lives: 2,022 SKUs sharing 5% of revenue. Each one needs space, a line in the catalogue and someone’s time.
Worked example: one real item
The item with the most orders in the data is White hanging heart t-light holder (code 85123A). In the last 90 days it sold 9,324 units, 103.6 a day on average.
Source: UCI Online Retail II (Chen, 2019), sheet Year 2010-2011, CC BY 4.0; our calculation
Suppose there are 2,000 units on hand and the supplier delivers in 21 days. These two numbers are our assumptions; the sales pace is real.
Days of supply = 2,000 ÷ 103.6 ≈ 19 days. That is below the 21-day lead time, so the item needs an order today: by the time goods arrive, the shelf would already be empty. Look at the weekly chart again: the strongest week sold 1,705 units, 85% of the assumed stock, which is why safety days matter.
How to set it up
- Export sales lines (date, SKU, units) and current stock per SKU.
- Compute average daily units over 90 days and days since last sale for every SKU.
- Divide stock by pace; flag items by the thresholds above.
- Review the flagged list before every purchasing cycle, not once a quarter.
A spreadsheet does this for a few hundred SKUs. Above that, or with several warehouses, it belongs on a dashboard that refreshes by itself.
Limits
- The dataset has no stock or cost data, so the cash tied up in dead stock cannot be measured here; in your data it can.
- Seasonal items look dead out of season. Compare with the same period last year before clearing.
- A 90-day average lags behind sudden changes in demand; use it with the weekly trend, not instead of it.
Data: UCI Online Retail II (Chen, 2019), licensed CC BY 4.0. Sales numbers on this page are calculated by our script on that dataset; stock on hand and lead time in the worked example are stated assumptions.