How to read inventory turnover on a stock screen
Inventory turnover measures how many times a business sells through its average inventory during a period. Divide cost of goods sold by average inventory. A falling result means goods are taking longer to move, though it doesn't tell you why.
That last part matters. Inventory can rise ahead of a healthy launch, because a retailer is opening stores, or because demand vanished after purchase orders were placed. The balance sheet looks the same at first. A useful screen therefore compares inventory with sales and turnover with the company's own history. The result gives you a question to take into the filing.
What does inventory turnover measure?
Inventory is the cost of goods waiting to be sold. For a retailer that means merchandise in stores and warehouses. For a manufacturer it can include raw materials, work in progress, and finished goods. It sits in current assets because management expects to sell it within the operating cycle.
When an item sells, its cost leaves inventory on the balance sheet and enters cost of goods sold on the income statement. That connection gives us the ratio:
inventory turnover = cost of goods sold / average inventory
average inventory = (starting inventory + ending inventory) / 2
Use cost of goods sold because both the numerator and inventory are recorded at cost. Use the average because cost of goods sold covers a period while the balance sheet shows one date. An ending balance alone can make a seasonal build look like the whole year. AccountingCoach's inventory ratio explanation states the same formula and cost basis.
Turnover of 4.0 says the cost of goods sold during the period was four times the average inventory carried. The standard days-in-inventory formula divides 365 by turnover, so an illustrative 4.0 turnover works out to about 91 days. Neither number says whether the stock on hand is fashionable, perishable, customized, or already spoken for. It only says how fast its recorded cost moved through the business.
The natural level differs by industry. A grocer should move goods faster than an aircraft maker. A software business may carry almost none. Cross-industry rankings mostly rediscover those business models, so compare each company with itself and with close peers.
Why can rising inventory be either good or bad?
An inventory build consumes cash before the related sale arrives. Cash leaves to pay suppliers, inventory rises on the balance sheet, and no revenue appears until a customer takes the goods. That is why working capital and the current ratio can't tell the full story: a dollar of inventory counts as a current asset even when it isn't moving.
The benign version is preparation. Management buys ahead of a launch, a holiday season, a new location, or a supply interruption. Revenue catches up, the goods sell, and turnover recovers. The filing may explain the build in plain language.
The bad version starts with the same balance-sheet entry. Demand weakens after orders have gone out. Product ages. Discounts follow. If the expected selling price falls far enough, the company writes the inventory down and the loss runs through cost of revenue. Gross margin takes the hit. Cash left months earlier, but accounting profit catches up later.
Compare inventory growth with revenue growth against the same fiscal quarter a year earlier. If inventory is growing faster, call that the inventory gap. One quarter can be stocking for growth. A widening gap accompanied by falling turnover is harder to dismiss, especially when management's explanation doesn't match the orders, backlog, or subsequent sales.
Don't compare December with September for a seasonal retailer. You'll learn that holiday shelves were stocked before the holidays. Compare December with the prior December, using the same-quarter discipline covered in trailing versus forward numbers.
Cisco shows what a demand break looks like
Cisco's fiscal third quarter of 2001 is a clean public-record example because the demand reversal and the accounting consequence landed in the same 8 May 2001 earnings release.
Cisco reported inventory of $1.913 billion at 28 April 2001, up from $1.232 billion at 29 July 2000. Net sales for the quarter were $4.728 billion, down 4 percent from $4.933 billion a year earlier. Management said bookings had swung from growth above 70 percent in November to negative growth of 30 percent within several months.
Then came the catch-up. Cisco recorded a $2.249 billion excess-inventory charge in cost of sales. Reported cost of sales was $4.400 billion and reported gross margin was $328 million. Excluding that charge, the same reconciliation showed cost of sales of $2.151 billion and gross margin of $2.577 billion. The charge recognized that inventory bought for the old demand forecast was no longer worth what Cisco had carried it for.
This is why an inventory rule belongs beside a sales rule. Inventory up by itself might have meant preparation for strong orders. Sales down by itself might have meant a short pause. Inventory rising while sales and bookings reversed described a forecast that had missed in both direction and speed.
The example also shows why turnover isn't an earnings forecast. By the time the write-down appears, the economic mistake has already happened. A historical screen can test whether a deteriorating inventory pattern tended to precede later margin pressure, but it can't tell you in advance how much stock will be written down. That amount depends on products, contracts, resale values, and management's estimates.
How should a screen compare inventory with sales?
Start with three values from filed statements:
- inventory now and in the comparable quarter last year
- revenue now and in the comparable quarter last year
- trailing cost of goods sold
Quantery exposes the filer's cost_of_revenue line. It is a usable COGS proxy when the filing shows that the line principally represents the cost of physical goods sold. For a mixed product-and-service company, the same line may include material hosting, support, or other service-delivery costs that never passed through inventory. Exclude that filer from the turnover rule, or leave turnover unscored and keep only the inventory-versus-revenue comparison. A broader cost-of-revenue line will overstate inventory turnover.
From those values, calculate year-over-year inventory growth, year-over-year revenue growth, and turnover. The gap between the first two growth rates catches the direction. Turnover catches the pace at which goods leave the balance sheet.
The shape below is illustrative, based on the in-app reference. The bundled templates and that reference are the authority for exact fields and expression behavior.
# "Inventory moving with demand" - illustrative
params:
gap_ceiling: 0.10
turnover_floor: 2.0
features:
inv_now: newest(inventory)
inv_prior: lag(inventory, 4)
rev_now: newest(revenue)
rev_prior: lag(revenue, 4)
cost_ttm: ttm(cost_of_revenue)
avg_inventory: if(inv_now >= 0 and inv_prior >= 0,
(inv_now + inv_prior) / 2, null)
inv_growth: if(inv_prior > 0, inv_now / inv_prior - 1, null)
rev_growth: if(rev_prior > 0, rev_now / rev_prior - 1, null)
inventory_gap: inv_growth - rev_growth
turnover: if(avg_inventory > 0,
cost_ttm / avg_inventory, null)
criteria:
growth_alignment:
rules:
- { when: "is_null(inventory_gap)", score: 0, flag: no_comparison }
- { when: "inventory_gap <= 0", score: 2 }
- { when: "inventory_gap <= $gap_ceiling", score: 1 }
- { else: 0 }
stock_movement:
rules:
- { when: "is_null(turnover)", score: 0, flag: no_turnover }
- { when: "turnover >= $turnover_floor", score: 2 }
- { when: "turnover > 0", score: 1 }
- { else: 0 }
gate:
mode: strict
The proposed 0.10 gap and 2.0 turnover floor are round research parameters. Change them. Better still, replace the absolute turnover floor with a comparison against the company's own year-ago turnover. A fixed floor will favor fast-moving industries no matter how well the rest of the rule is written.
There are two data traps in the example. First, ttm(cost_of_revenue) can sum fewer than four available quarters if the history has gaps. Check coverage before treating it as a full year. Second, lag(field, 4) moves back four observed rows. A missing filing can shift the comparison away from the intended fiscal quarter. Missing inputs should score zero and raise a flag. They shouldn't become evidence of inventory discipline.
What should the backtest ask?
A screen only identifies the pattern. The hypothesis has to state what comes next. One defensible version is:
Among non-financial companies, a widening inventory gap combined with falling turnover tends to precede weaker gross margins over the following filed periods.
That claim is narrow enough to test. It also keeps the target tied to the mechanism: excess goods often clear through discounts or write-downs, both of which pressure gross margin. Price performance can be a second outcome, but beginning there makes it harder to tell whether the accounting idea worked or a broader sector move drove the result.
Run the test point in time. The simulated decision date can only use filings public by then. Compare several gap thresholds, keep industries separate, and count how often the pattern occurs. Then inspect the failures. If one sector supplies most observations, you've built a sector rule. If one threshold carries the result, you've tuned a coincidence. A robust backtest should survive small changes, and every hypothetical return excludes costs.
The test still won't distinguish planned stock from obsolete stock at the signal date. Read the filing note. Look for changes in product mix, purchase commitments, launch timing, backlog, and management's explanation for the build. The ratio narrows the reading list. The note tells you what is actually on the shelf.
Inventory turnover is an alarm
Inventory turnover compresses one business process into a comparable rate: buy or make goods, hold them, sell them, repeat. Pair it with the inventory gap and you can flag businesses where purchasing and demand are moving apart.
You still don't know whether that gap is a launch, a bottleneck, or stock nobody wants. That's fine. Open the rule, move the parameters, separate industries, and test the next filing before assuming the answer. A useful screen tells you which filing deserves to be opened first.
Research tooling, not investment advice. Nothing here is a recommendation to buy, sell, or hold any security. Screens, scores, and backtests are informational only; backtested results are hypothetical, exclude costs such as commissions and slippage, and do not guarantee future results. Verify against primary filings and make your own decisions.
Want to try this on your own rules? Quantery is free for 14 days: the full app, no card required.
← All articles