All metrics

What is dead stock?

Dead stock is inventory you hold but no longer sell: products with units on hand whose last sale is older than your dead-stock window — 90 days by default, configurable per organization — including products that have never sold at all. The dead-stock widget lists these products with the cash each one ties up, worst first.

Formula

dead stock = quantity on hand > 0
             AND (never sold, OR last sale older than the window)

Worked example

With a 90-day window, a SKU with 140 units on hand and a last sale 122 days ago is dead; at €11 confirmed unit cost it ties up €1,540. A seasonal store that sets its window to 180 days would not flag it. The window is a business judgment — the default suits steady assortments, and slow-cycle catalogs should widen it rather than treat every off-season SKU as dead.

How Saldo Metrics computes it

v_inventory_position takes the newest inventory snapshot per product and store, computes each product's last sale date and units sold inside the window, and flags is_dead_stock when stock is on hand and no sale falls inside the window. The window comes from the org's setting (default 90 days), so the flag is caller-dependent by design and never cached across orgs. Valuation uses the product's best confirmed cost record; a product with no confirmed cost has unknown cash tied up, not zero — the row is flagged missing_cost and the widgets report how many SKUs that gap covers instead of letting the total quietly shrink. Sales recency counts orders in any status here; a cancelled order still proves the product moves.

Why it matters

Dead stock is a double loss: the capital is locked, and the shelf or warehouse space it occupies has carrying cost. It also decays — yesterday's dead stock rarely revives on its own. The list ordered by cash tied up is a markdown and clearance worklist: the top handful of rows usually hold most of the money.

Common mistakes

  • Using one window for a mixed catalog. Evergreen and seasonal assortments need different windows; the org setting is a single dial, so read seasonal SKUs with judgment.
  • Discounting dead stock below recovery without checking margin history. Some dead SKUs are better written off than sold at a loss that also costs shipping.
  • Ignoring the uncosted count. A dead-stock total that excludes 40 uncosted SKUs is a floor, not the number.

Where you see this in the app

The Dead Stock dashboard widget (per-product list) and the dead-stock-value alert metric.

Formula
on-hand stock with no sale inside the org's dead-stock window (default 90 days)
How Saldo Metrics computes it
canonical.v_inventory_position

Last reviewed 2026-08-29