What is the difference between slow moving, dead and obsolete stock?
Slow moving stock still gets used, just rarely. Dead stock has not been used in a set period. Obsolete stock can never be used because nothing on site needs it any more. Each needs a different action, so classify before you act.
Set the time thresholds to suit your site and write them down. The ones below are a common starting point, not a rule.
| Class | Rule (example thresholds) | Usual action |
|---|---|---|
| Active | Net issue in the last 12 months | Check min and max are right |
| Slow moving | Last net issue 12 to 24 months ago | Lower min and max, stop reordering |
| Dead (non moving) | No net issue for 24 months or more, still fits equipment on site | Transfer, return or sell |
| Obsolete | No equipment on site uses it, or the part has been superseded and does not interchange | Sell, return or write off |
| Critical or insurance | Flagged by maintenance as needed to protect a critical asset, whatever its usage | Review on risk, never on usage alone |
The last row matters most. An insurance spare with zero usage for five years is doing its job. It must be flagged before any dead stock report runs, or it ends up on a disposal list. See critical and rotable spares for how to set those flags.
How do you calculate dead stock?
Calculate months since last net issue for every stock code, then apply your thresholds. For active and slow lines, also calculate coverage and excess so you can see stock held above what you need.
- Months since last net issue = months between the report date and the last issue that was not fully returned.
- Coverage (months) = quantity on hand ÷ average monthly net usage.
- Excess quantity = quantity on hand minus max (if the result is above zero).
- Excess value = excess quantity × unit cost.
- Dead stock value = sum of quantity × unit cost for lines classed dead, excluding critical and insurance flags.
Worked example, six made-up lines, report date 30 September 2026:
| Line | On hand | Unit cost | Value | Last net issue | Months | Class |
|---|---|---|---|---|---|---|
| Hydraulic pump, retired loader fleet | 2 | $48,500 | $97,000 | 15 Mar 2022 | 54 | Obsolete |
| Conveyor idler roller, 1200 mm belt | 60 | $310 | $18,600 | 20 Aug 2026 | 1 | Active |
| Haul truck wheel motor bearing kit | 1 | $96,000 | $96,000 | Never | n/a | Insurance, keep |
| Gasket set, superseded number | 14 | $640 | $8,960 | 2 Nov 2023 | 34 | Superseded, still fits |
| Bucket tooth, ground engaging tool | 40 | $220 | $8,800 | 10 Jun 2025 | 15 | Slow moving |
| Slurry pump impeller | 3 | $18,500 | $55,500 | 1 Jul 2024 | 26 | Dead |
The wheel motor kit has the biggest value and zero usage, and it is the one line you keep. The gasket set looks dead under its old number, but the new number is being used, so the fix is to link the supersession so the old stock issues first. The pump impeller is the real decision: check the pump is still installed, then offer it to any other site running the same pump.
What does a site level dead stock review look like?
Run the classification across every line, total the value by class, then work out what each dead line can realistically return. Released working capital is always less than the book value of dead stock.
Example: a site holding 8,000 stock lines worth $44.0M.
| Class | Lines | Value | Share of value |
|---|---|---|---|
| Active | 5,200 | $26.0M | 59.1% |
| Slow moving | 1,300 | $6.5M | 14.8% |
| Dead | 900 | $5.4M | 12.3% |
| Obsolete | 250 | $2.1M | 4.8% |
| Critical and insurance | 350 | $4.0M | 9.1% |
| Total | 8,000 | $44.0M | 100% |
Now work through the $5.4M of dead stock line by line:
| Decision (example) | Book value | Recovered or re-buy avoided |
|---|---|---|
| Transfer to another site that uses it | $1.2M | $1.2M (re-buy avoided) |
| Return to supplier, 25% restocking fee | $0.8M | $0.6M |
| Sell as surplus, 30% of book recovered | $0.5M | $0.15M |
| Reclassify as insurance spare and keep | $0.9M | $0 |
| Scrap and write off | $2.0M | $0 |
| Total | $5.4M | $1.95M |
So $5.4M of dead stock turns into $1.95M of released working capital, plus a $2.0M write off that finance needs to plan for. Present it that way. Promising the full $5.4M as a saving is how these reviews lose credibility.
Holding cost still counts. If your finance team uses a carrying cost of, say, 20% a year, the $2.0M you scrap was costing $400,000 a year to keep. Use your own rate.
What mistakes hide dead stock or flag the wrong lines?
Most errors come from treating every movement as usage. A part can move every month and still never be consumed.
- Returns counted as activity. A part issued to a job and returned unused resets the last issue date. Net the return against the issue. On an international tier 1 mining operator's stock level work, netting returns off usage took agreement on disputed items from 73% to 98.4%.
- Transfers counted as activity. Moving a part between warehouses is not consumption. A line shuffled between two stores can look active for years.
- Insurance spares not flagged. They will top every dead stock list by value. Flag them first.
- Superseded part numbers. The old number looks dead because everyone now orders the new one. Link them, and issue the old stock first if it interchanges.
- Duplicate stock codes. The same part under two codes, at one site or across sites, splits usage so both look slow. Cross-site matching should be careful here: a wrong match means a wrong part on a critical job.
- Shutdown stock. Parts bought for a planned shutdown can look dead until the shutdown happens. Tag them to the work order.
- Rotables in the repair loop. A rebuilt component returned to the shelf may show as a receipt, not usage. Track rotables separately.
- Using last receipt date. A recent receipt says you bought it, not that anyone used it. Use last net issue.
How do you run a dead stock report in Excel or from your ERP?
Export stock on hand and 24 to 36 months of issue and return transactions, net them, find the last real issue for each code, then classify with a formula.
- Export stock on hand by stock code: code, description, warehouse, quantity, unit cost, critical or insurance flag. Sheet
Stock. - Export issues and returns for 24 to 36 months: code, date, type, quantity, work order. Sheet
Trans. Leave transfers out. - Net returns against their original issue by work order and code. Where an issue was fully returned, drop both rows.
- Last net issue in column G:
=IFERROR(MAXIFS(Trans!B:B, Trans!A:A, A2, Trans!C:C, "issue"), ""). A blank or zero means never issued. - Months since in column H:
=IF(N(G2)=0, 999, DATEDIF(G2, $K$1, "m")), where K1 holds the report date. - Class in column I:
=IF(F2="Y", "Insurance", IFS(H2<12, "Active", H2<24, "Slow", TRUE, "Dead")), where F is the critical flag. - Value in column J:
=D2*E2. Pivot on class to get the totals. - Mark obsolete lines by hand or against your equipment register. The ERP usually cannot tell you that a fleet has been retired.
Then take the dead list to maintenance planning before anything is disposed of. They will know which lines are quietly protecting something.
How does Source Digital automate dead stock and obsolete spares reviews?
Source Digital builds the classification inside your own data platform, with your rules for returns, transfers, supersession and insurance flags, and re-runs it every month. A person approves every disposal. The AI never decides.
- Read-only, in your environment: it runs in your Azure, Databricks or Snowflake, reading your ERP data without changing it.
- Every number links back: each dead line shows the transactions behind its last issue date, so nobody has to take the report on trust.
- Cross-site matching that refuses to be confidently wrong: likely matches between sites are graded by evidence, so stock can be shared instead of re-bought. See cross-site parts matching.
- Data audit first: the first pass checks the data itself, and often surfaces problems like duplicate codes and wrong transaction types. See the AI data audit case study.
Getting started is a free 15 minute call with Tristan, or a quick enquiry. No obligation and no pitch. He asks what you run and what is costing you, then tells you straight whether there is something worth fixing. Work is charged at a consulting day rate. The price depends on your sites, systems and data, so you talk first, then Tristan sets out what he would build, how many days it takes and what it costs. See how the pieces fit together on the AI for mining supply chain page.

