How much of my stock is dead, and what is it costing me?
Age stock on the order lines rather than on the stock file's own last-sold column, which is maintained by processes that are not sales and is stale in the flattering direction. Then rank by the cash that clearing each line would release rather than by units, and exclude anything that sold in the same month last year before calling it dead.
Section 01
The stock file lies about ageing
A last_sold column is updated by stock counts, transfers and returns as well as by sales, so it drifts toward looking more active than the product is.
Rebuild ageing from the order lines and report how far the two disagree, because that gap is itself a data quality finding worth acting on.
In one worked example the sheet's own column disagreed for 312 SKUs and would have classified $47,000 of dead stock as active.
Section 02
Stockouts leave no rows
Nothing is recorded on the days you had nothing to sell, so the absence has to be reconstructed from zero-stock windows in the movement history rather than inferred from an absence of sales: those look identical and mean opposite things.
Value them at the product's own rate of sale either side, then re-run at a deliberately conservative rate and report both. A single confident figure for something that did not happen is the most misleading number available.
Section 03
Trace it back to the decision
Half the dead value in one worked example arrived on four purchase orders where the quantity was set by a supplier's minimum rather than by demand.
That is the actionable finding, and it is invisible in any report that stops at which SKUs are slow. Seasonal lines need excluding first, and the exclusion listed, so somebody can disagree with it.
Section 04
What to upload
Sales history at the order line is the file to lead with, because ageing has to be rebuilt from the lines rather than read off a stock file's own column, and because the analysis runs on one table.
A stock file, movement history and purchase orders can go up alongside. Each is read, converted and handed back as a download, and any relationship between them is named, but a quantity or a cost sitting in a second file is not folded into the figures, so what those files add is a record, not a section.
See it on a real project
$128,000 of stock had not sold in nine months, and half was bought to reach a supplier discount.
Keep reading