What the Piotroski F-Score is
The Piotroski F-Score is a 9-point financial strength checklist introduced by accounting professor Joseph Piotroski in his 2000 paper Value Investing: The Use of Historical Financial Statement Information to Separate Winners from Losers (Journal of Accounting Research 38:1-41). The idea behind it is simple: cheap stocks are sometimes cheap because the market has misjudged a quality business, and sometimes cheap because the business is genuinely deteriorating. A low price-to-book ratio alone can't tell you which one you're looking at.
Piotroski's answer was to run nine binary tests against a company's most recent annual financial statements. Each test that passes earns one point. Each test that fails earns zero. Add them up and you get a score from 0 to 9. Higher scores point to companies with improving profitability, healthier balance sheets, and better operating efficiency than they had a year ago. Lower scores point to the opposite.
It's not a price model. It doesn't tell you what a stock is worth. It's a quality filter — a way to separate the cheap-and-improving from the cheap-and-rotting.
The 9 criteria
The nine tests fall into three groups. Each test asks a yes-or-no question. One point for yes, zero for no.
Profitability (4 points)
- Return on Assets (ROA) is positive for the current year. Net income divided by total assets — is the business making money on the capital it employs?
- Cash Flow from Operations is positive for the current year. Operating profit can be massaged through accruals; operating cash can't, at least not as easily.
- ROA increased versus the prior year. The business is getting more productive with its asset base, not less.
- Cash Flow from Operations is greater than Net Income. This catches earnings quality. If reported profit consistently runs ahead of cash generation, the income statement may be flattered by aggressive accruals.
Leverage, Liquidity, and Source of Funds (3 points)
- Long-term debt to total assets decreased versus the prior year. Less reliance on borrowed money is a sign of financial discipline.
- Current ratio increased versus the prior year. Short-term liquidity (current assets divided by current liabilities) is moving in the right direction.
- No new shares issued in the past year — or shares outstanding actually decreased. Issuing new equity dilutes existing holders and often signals the company needed outside cash to keep operating.
Operating Efficiency (2 points)
- Gross margin increased versus the prior year. Pricing power or cost control is improving.
- Asset turnover (Sales / Total Assets) increased versus the prior year. Each dollar of assets is generating more revenue.
The total:
code-highlightF-Score = (Profitability points) + (Leverage / Liquidity points) + (Operating Efficiency points) Range: 0 (worst) to 9 (best)
Notice that seven of the nine tests are year-over-year comparisons. The score isn't asking whether a company is great in absolute terms — it's asking whether the fundamentals are trending up.
A worked example
Imagine a hypothetical industrial-supply company called Maple Tools. We're looking at its most recent annual report against the prior year. The numbers below are illustrative — invented to walk through the math, not pulled from a real filing.
| Metric | This year | Prior year |
|---|---|---|
| Net income | $42M | $30M |
| Total assets | $600M | $580M |
| ROA | 7.0% | 5.2% |
| Cash flow from operations | $58M | $48M |
| Long-term debt / total assets | 22% | 26% |
| Current ratio | 1.85 | 1.70 |
| Shares outstanding | 50.0M | 50.2M |
| Gross margin | 38% | 36% |
| Revenue | $720M | $660M |
| Asset turnover (Sales / Assets) | 1.20 | 1.14 |
Let's walk the nine tests for this hypothetical example:
- ROA positive? 7.0% — yes. +1
- Operating cash flow positive? $58M — yes. +1
- ROA up year-over-year? 7.0% vs 5.2% — yes. +1
- CFO > Net income? $58M > $42M — yes. +1
- Long-term debt ratio down? 22% vs 26% — yes. +1
- Current ratio up? 1.85 vs 1.70 — yes. +1
- Shares not increased? 50.0M vs 50.2M — yes. +1
- Gross margin up? 38% vs 36% — yes. +1
- Asset turnover up? 1.20 vs 1.14 — yes. +1
Total: 9 out of 9. In Piotroski's framework, this hypothetical company has every fundamental moving in the right direction. If you also found it trading at a low price-to-book ratio, that combination is what the original research was built to identify.
A more realistic outcome for most names you'll screen is something in the 5–7 range, where a few criteria fail — maybe margins compressed, or the company tapped equity markets — and the score reflects that.
What the score tells you
Treat the score as a band, not a precise number.
- 8–9: strong financial health. Profitability, balance sheet, and efficiency are all moving in the right direction. In Piotroski's original work on high book-to-market stocks, this group was where the outperformance lived. It doesn't guarantee future returns — it tells you the fundamentals are not the reason to avoid the stock.
- 6–7: solid. Most of the picture is improving, with a few weak spots. Worth digging into which tests failed and why.
- 4–5: mixed. The business is sending conflicting signals. Could be a turnaround in progress; could be a value trap mid-decay. Needs more work than the score alone.
- 2–3: weak. Several fundamental trends are heading the wrong way. Combine that with a cheap multiple and you may be looking at a value trap.
- 0–1: very weak. Almost every test failed. In Piotroski's backtest of cheap (high book-to-market) stocks, the lowest scorers significantly underperformed the highest scorers as a group.
The score's whole point is relative — high-F-Score names within a cheap universe tended to beat low-F-Score names in the same universe.
When to use it
The F-Score works best as a second-stage filter. You start with a universe of stocks that already look cheap on a valuation basis — low price-to-book, low price-to-sales, low EV/EBITDA, whatever your preferred cheapness metric is — and then you apply the F-Score to weed out the names where the fundamentals are deteriorating.
It's also useful as a quick fundamental health check before opening a position you found through a different process. If a technical setup, an insider buying alert, or a sector rotation thesis is pulling you toward a stock, running it through the nine tests takes a few minutes and forces you to look at the income statement, balance sheet, and cash flow statement together.
It is not a momentum tool, a timing tool, or a sector-rotation tool. The score is recalculated only when fresh annual financials come out.
Limitations
A few caveats worth keeping in mind:
- It's backward-looking. Every input comes from financial statements that describe the past year. A company that fundamentally improved in the last six months won't show up well until the next annual report.
- Requires comparable prior-year data. Recent IPOs, companies that just completed a major acquisition, or businesses that restated old financials can produce misleading scores or no score at all.
- Binary tests ignore magnitude. A 0.1% increase in ROA earns the same point as a 5% increase. A score of 8 driven by tiny improvements is not the same as a score of 8 driven by large ones — read the underlying numbers.
- Not built for high-growth or pre-profit firms. Many software, biotech, and early-stage businesses run negative operating cash flow on purpose. They'll score badly even when the business is doing exactly what investors expect.
- Industry context is absent. A capital-light services business and a capital-heavy manufacturer have very different "normal" ranges for ROA, asset turnover, and debt ratios. The F-Score doesn't adjust for this.
- Designed for the cheap end of the market. Piotroski's original research was specifically about high book-to-market stocks. Applying the score to expensive growth names is using the tool outside its tested domain.
How to use the F-Score with Stock Alarm Pro
You don't need to compute the score by hand. The Stock Alarm Pro screener lets you filter the universe on the individual fundamental tests that make up the F-Score — positive operating cash flow, decreasing long-term debt, improving gross margins, rising asset turnover, no recent share issuance — and combine those with valuation filters like low price-to-book or low EV/EBITDA. Stacking a cheapness filter on top of several quality filters gets you very close to the Piotroski workflow without manually pulling 10-Ks. Save the screen, run it after each earnings season, and you have a repeatable process for surfacing cheap-and-improving names.


