Inventory Turnover & Dead Stock Finder

Per-SKU turnover, days on hand, and the money your slow movers are holding — computed in your browser.

1. Load your stock data

Drop a CSV exported from your ERP here. It is read inside this browser — nothing is uploaded.

3. Set the rules

More options

Only used to label the period in the report — it does not change any calculation.

Your file is parsed by this page in your own browser. No stock data, cost or file is ever sent to a server — you can disconnect from the network and it still works.

Why turnover and days on hand matter more than the stock count alone

A stock report on its own only tells you what is sitting in the warehouse right now. It cannot tell you whether that quantity is healthy or a warning sign, because the same 500 units could be three weeks of normal cover for a fast-moving SKU or eighteen months of dead capital for a slow one. Inventory turnover and days on hand convert a static count into a rate — how fast stock actually moves relative to how much of it you carry — which is what lets a buyer, planner or controller compare wildly different SKUs on one scale and decide where cash is genuinely stuck versus where it is doing its job.

The practical trigger for running this kind of check is usually one of three moments: a periodic stock review before reordering, a working-capital squeeze where finance is asking why cash is tied up, or a warehouse running out of space and needing to know what to discount or liquidate first. In all three cases the useful output is not one company-wide ratio but a ranked list of individual SKUs, because turnover always hides in an average — a warehouse can show a respectable overall number while a third of its SKUs are quietly rotting.

Reading your own numbers correctly

  1. On-hand / beginning stock should be a quantity at a point in time, taken straight from the ERP, not a rolling average someone already computed — the tool builds the average itself from beginning and ending figures.
  2. Outflow over the period is the flow, not the stock: total units shipped or COGS consumed across the whole export window, never a single day's movement.
  3. Set days covered by the outflow column to match the export exactly — a monthly extract is 28–31 days, a quarter is roughly 90, a full year is 365. Getting this wrong is the single most common source of a distorted ratio, because every downstream number scales off it.
  4. Pick the turnover basis that matches the column you actually have: quantity when you only trust units, cost when you have COGS, sales only as a rough cross-check against a system that already reports it that way.

The arithmetic behind the ratio

Average inventory = (Beginning stock + Ending stock) ÷ 2

Inventory turnover = Outflow over the period ÷ Average inventory

Days on hand = Days covered by the outflow ÷ Turnover

If your export only spans part of a year, annualised turnover = period turnover × (annualisation basis ÷ days covered). Turnover and days on hand are reciprocals of each other once both are expressed on the same yearly basis, so a rise in one is always a fall in the other — there is no scenario where both improve or both worsen at once.

Three worked examples

Example 1 — a normal mover, quantity basis. Beginning stock 200 units, ending stock 120 units, 1,000 units shipped over 365 days.
Average inventory = (200 + 120) ÷ 2 = 160 units.
Turnover = 1,000 ÷ 160 = 6.25×.
Days on hand = 365 ÷ 6.25 ≈ 58 days — comfortably below a 180-day dead-stock flag.

Example 2 — cost basis from the general ledger. COGS for the year $45,000; beginning inventory value $9,000; ending inventory value $7,000.
Average inventory value = ($9,000 + $7,000) ÷ 2 = $8,000.
Turnover = $45,000 ÷ $8,000 = 5.625×.
Days on hand = 365 ÷ 5.625 ≈ 65 days, and the $8,000 tied up is available directly from the same two ledger figures.

Example 3 — a quarterly extract with no beginning-stock column. 300 units shipped in a 90-day quarter; on-hand at quarter end 500 units, used as the average because no beginning figure exists.
Quarter turnover = 300 ÷ 500 = 0.6×.
Annualised (365 ÷ 90 basis) = 0.6 × 4.06 ≈ 2.43×.
Days on hand = 365 ÷ 2.43 ≈ 150 days — close enough to the 180-day threshold that this SKU deserves a second look once a true beginning-stock figure is available, since the single-point average likely understates the real days on hand.

Turnover as a quick mental map of days on hand

Because the two figures are reciprocals, it helps to keep a few anchor points in mind rather than re-deriving them each time:

Annual turnover≈ Days on handWhat that pace means
365Stock turns over once a year — investigate unless it is intentional long-cycle stock
183Semi-annual cycle — typical for bulky or seasonal-once goods
91Quarterly cycle — common for planned, mid-velocity SKUs
61Bi-monthly cycle — healthy for most general retail lines
12×30Monthly cycle — typical of fast-moving consumer goods
24×15Twice-monthly — near the top end for physical retail stock

Mistakes that quietly wreck the ratio

What this tool does not do

It measures velocity, not profitability — it will not tell you whether a fast-moving SKU is actually a loss leader, which needs a margin-aware metric such as GMROI (gross margin ÷ average inventory cost). It also will not net stock across multiple warehouses, separate committed or in-transit inventory from what is physically on the shelf, or correct for strong seasonality baked into a single full-year average; a SKU that sells only in December can show misleading mid-range numbers when averaged over twelve months, and is better analysed on a season-by-season export. None of this is accounting or investment advice — for figures that will appear in financial statements, confirm the cost basis and averaging method with your controller.

Sources & further reading

Frequently asked questions

Should inventory turnover use COGS or sales as the numerator?

Cost of goods sold is the correct numerator: inventory sits on the balance sheet at cost, so dividing COGS by average inventory value compares like with like. Sales revenue includes your margin, so a sales-based ratio is inflated by roughly one plus the margin — a shop with a 40% margin looks about 1.7× faster than it is. This inventory turnover calculator offers both because sales-based turnover is still common practice in wholesale and retail, but the sales option is badged "reference only". If you have no cost column at all, use the quantity basis: units shipped ÷ average units on hand is unit-consistent and never mixes money with pieces.

What if my export has no beginning stock column?

Average inventory is normally (beginning + ending) ÷ 2. If your ERP only exports the current on-hand quantity, this tool uses that single figure as the average and shows a banner saying so, because the result can drift from your books: if stock has been run down over the year, on-hand is lower than the true average, so turnover comes out too high and days on hand too low — dead stock can hide. The ranking of slow movers is usually still right, since the same bias applies to every SKU, but do not quote the absolute ratio to your accountant. Map a beginning stock column whenever your system can export one.

Where do the 180-day and 90-day dead stock thresholds come from?

They are the common working rules, not a law. Ageing practice in most warehouses treats 60–90 days of stock as normal, reviews an item at 90 days, stops reordering it around 180 days, and writes off or liquidates at 12 months. So this dead stock report flags a SKU when days on hand reaches 180 or when nothing has shipped for 90 days — whichever hits first. Both are sliders: fast fashion or fresh goods should be far stricter (30–60 days), while spare parts, tooling and safety stock legitimately sit for years and need a much longer setting. Deliberately no industry benchmark is built in, because a national or sector average would go stale — the distribution chart shows where each SKU sits inside your own data instead.

Days on hand: 365 or 360 days?

Days on hand (also days inventory outstanding) is period days ÷ turnover, so the basis you divide by changes the answer by about 1.4%. Use 365 for management reporting and for anything you show to a Korean or US audience; 360 is the banking and commercial convention behind many German and European covenant calculations, and some credit teams still require it. This days on hand calculator lets you set the two separately: "days covered by the outflow column" is how long your export actually spans (365 for a full year, 90 for one quarter), while the annualisation basis is only used to scale the ratio to a yearly figure. Getting the first one wrong is the classic error — a quarter of shipments divided by average stock is not an annual turnover.

Is my inventory data uploaded anywhere?

No. There is no server, no account and no upload. The CSV is read with the browser's File API, parsed by JavaScript on this page, and every number stays in your tab's memory until you close it — the same is true for slow moving inventory analysis on large files, which is handled in a Web Worker inside the same browser. Only your settings (thresholds, basis, mode and column mapping) are kept in this browser's localStorage; item codes, quantities, unit costs and amounts are never stored or transmitted. That is the point of this tool: stock and cost data usually cannot leave the company, so the analysis comes to the data instead. You can confirm it by turning off your network and running the tool anyway.