The Piotroski Score (F-Score) rates a company's financial strength from 0 to 9 by awarding one point for each of nine pass/fail tests on profitability, leverage and liquidity, and operating efficiency, using the last two years of financial statements. A score of 8 or 9 signals strong and improving fundamentals, and 0 to 2 signals weak ones. Accounting professor Joseph Piotroski introduced it in a 2000 paper to separate financially strong value stocks (cheap on price-to-book) from weak ones, and value investors still use it as a quality filter on top of a valuation screen.
Try it in your own spreadsheet
Get the free MarketXLS sample workbook (.xlsx).
No account needed. MarketXLS live data requires a paid plan. Preview workbook
Explore more videos
In Excel, you can calculate it with MarketXLS historical fundamental (hf_) functions such as =hf_Net_Income("AAPL","ly") for each input, an IF test per criterion, and a SUM. This guide explains the nine criteria, what the research found, how to use and not use the score, and how to set it up in a spreadsheet.
What Does the Piotroski Score Indicate?
The Piotroski Score acts as a financial health report card. It answers a simple but powerful question: Is this company getting stronger or weaker?
Traditional value investing focuses on finding cheap stocks — companies with low price-to-book ratios, low PE ratios, or high dividend yields. The problem is that many stocks are cheap for good reasons: deteriorating fundamentals, rising debt, or declining profitability. Buying these "value traps" can be devastating.
Piotroski's finding was that, among cheap stocks, adding a quality filter based on financial statements improved the returns of a value strategy in his sample. The F-Score separates genuinely undervalued companies (temporarily out of favor but fundamentally sound) from companies that deserve their low valuations (weak and getting weaker).
Score interpretation:
- 8-9: Excellent financial health, the strongest candidates for value investors to research further
- 6-7: Good financial health — solid candidates worth further analysis
- 4-5: Average — mixed signals, requires deeper investigation
- 2-3: Weak — financial deterioration, caution warranted
- 0-1: Very weak — significant financial distress, avoid
The 9 Piotroski Score Criteria Explained
The F-Score evaluates nine binary criteria organized into three categories. Each criterion scores either 1 (pass) or 0 (fail).
Category 1: Profitability (4 Criteria)
Criterion 1: Return on Assets (ROA)
- Score 1 if: Current year ROA > 0
- What it measures: Is the company generating a profit from its assets?
- Why it matters: A company that can't generate positive returns on its assets has fundamental problems regardless of valuation
Criterion 2: Operating Cash Flow (CFO)
- Score 1 if: Current year operating cash flow > 0
- What it measures: Is the company generating real cash from operations?
- Why it matters: Earnings can be manipulated through accounting, but cash flow is harder to fake. Positive CFO means the company can fund its operations
Criterion 3: Change in ROA (ΔROA)
- Score 1 if: Current year ROA > Prior year ROA
- What it measures: Is profitability improving?
- Why it matters: A company with improving profitability is getting stronger, not just surviving
Criterion 4: Cash Flow vs. Earnings (Accruals)
- Score 1 if: Operating cash flow > Net income (ROA)
- What it measures: Is earnings quality high?
- Why it matters: When cash flow exceeds reported earnings, it suggests conservative accounting. When earnings exceed cash flow, the company may be using aggressive accounting to inflate reported results
Category 2: Leverage, Liquidity & Source of Funds (3 Criteria)
Criterion 5: Change in Leverage (Long-Term Debt/Assets)
- Score 1 if: Current leverage ratio < Prior year leverage ratio
- What it measures: Is the company reducing its debt burden?
- Why it matters: Declining leverage improves financial stability and reduces bankruptcy risk
Criterion 6: Change in Current Ratio (Liquidity)
- Score 1 if: Current ratio (current assets / current liabilities) > Prior year
- What it measures: Can the company meet its short-term obligations?
- Why it matters: Improving liquidity means the company has more cushion against short-term financial stress
Criterion 7: Share Dilution
- Score 1 if: No new shares issued in the current year (shares outstanding ≤ prior year)
- What it measures: Is management diluting existing shareholders?
- Why it matters: Companies that issue equity when their stock is cheap are destroying shareholder value. No dilution shows management confidence and financial discipline
Category 3: Operating Efficiency (2 Criteria)
Criterion 8: Change in Gross Margin
- Score 1 if: Current gross margin > Prior year gross margin
- What it measures: Is the company maintaining or growing pricing power?
- Why it matters: Expanding margins indicate competitive strength, pricing power, or improving efficiency
Criterion 9: Change in Asset Turnover
- Score 1 if: Current asset turnover (revenue / total assets) > Prior year
- What it measures: Is the company using its assets more efficiently?
- Why it matters: Higher turnover means the company generates more revenue per dollar of assets — a sign of operational excellence
Calculating the Piotroski Score: Step-by-Step
Manual Calculation
To calculate the F-Score manually, you need two years of financial statement data (current and prior year). Here's the process:
- Gather income statement, balance sheet, and cash flow statement data for both years
- Calculate each of the nine metrics
- Score each as 1 or 0
- Sum all nine scores
Calculating with MarketXLS in Excel
MarketXLS historical fundamental functions start with hf_ and take a symbol and a period, where "ly" means the last fiscal year and "ly-1" the year before. Pull each input for both years, score each test with IF, and add the nine results:
| # | Test | Input formula (last year) | Scores 1 if |
|---|---|---|---|
| 1 | Net income | =hf_Net_Income("AAPL","ly") | > 0 |
| 2 | Operating cash flow | =hf_Net_Cash_Flow_from_Operations("AAPL","ly") | > 0 |
| 3 | Return on assets | =hf_Return_on_Average_Assets("AAPL","ly") | higher than "ly-1" |
| 4 | Earnings quality | operating cash flow minus net income | > 0 |
| 5 | Long-term debt to assets | =hf_Debt_Non_Current("AAPL","ly")/hf_Total_Assets("AAPL","ly") | lower than "ly-1" |
| 6 | Current ratio | =hf_Current_Ratio("AAPL","ly") | higher than "ly-1" |
| 7 | Shares outstanding | =hf_Weighted_Average_Shares("AAPL","ly") | less than or equal to "ly-1" |
| 8 | Gross margin | =hf_Gross_Margin("AAPL","ly") | higher than "ly-1" |
| 9 | Asset turnover | =hf_Asset_Turnover("AAPL","ly") | higher than "ly-1" |
For example, test 6 becomes =IF(hf_Current_Ratio("AAPL","ly")>hf_Current_Ratio("AAPL","ly-1"),1,0). In the Microsoft 365 add-in (Excel for Mac and the web), add the mxls. prefix to each function. The full step-by-step build is in Calculate Piotroski F-Score in Excel, and a ready-made F-score template is in the MarketXLS template library.
Keeping each test in its own cell also shows which criteria are close to flipping, which tells you more than the total alone.
Building a Piotroski Screening Spreadsheet
Here's a practical layout for screening multiple stocks:
| Column | Header | Formula (Row 2) |
|---|---|---|
| A | Ticker | AAPL |
| B | Price | =Last(A2) |
| C | PE Ratio | =PERatio(A2) |
| D | Market Cap | =MarketCapitalization(A2) |
| E | Div Yield | =DividendYield(A2) |
| F to N | Tests 1 to 9 | One IF test per column, as in the table above, with A2 as the symbol |
| O | F-Score | =SUM(F2:N2) |
Enter ticker symbols in column A and copy the row down. Sort by F-Score (column O) to find the highest-scoring companies.
Piotroski Score Track Record: What the Research Shows
Piotroski's Original 2000 Paper
In his seminal paper "Value Investing: The Use of Historical Financial Statement Information to Separate Winners from Losers," Piotroski studied high book-to-market (value) stocks from 1976 to 1996. His main findings:
- Within high book-to-market stocks, buying high F-Score firms (8-9) and shorting low F-Score firms (0-1) earned about 23% a year over 1976 to 1996
- Buying only the high F-Score firms improved the return of a plain value portfolio by about 7.5% a year
- These are historical results from one sample period, before trading costs, and do not guarantee future returns
Subsequent Research
Follow-up studies have tested the F-Score in other markets and later periods. Results vary by region, period, and method, so treat the original numbers as a starting point rather than an expected return.
How to Use the Piotroski Score in Practice
As a Value Investing Filter
The most common application is as a quality overlay on a value screen:
- Start with value stocks: Screen for stocks with low PE ratios using
=PERatio("TICKER"), low price-to-book ratios, or high dividend yields - Apply the Piotroski filter: Calculate the F-Score with the nine
hf_tests above and keep only stocks scoring 7+ - Conduct further analysis: Review remaining candidates' competitive position, management quality, and growth prospects
This approach screens out many value traps, meaning stocks that are cheap because their fundamentals are deteriorating.
As a Sell Signal
The Piotroski Score isn't just for buying. Monitor scores on your existing holdings:
- A dropping F-Score (especially falling from 7+ to below 5) may signal deteriorating fundamentals before the market fully prices it in
- Watch for specific criteria flipping — a company that starts issuing shares (Criterion 7) or seeing declining margins (Criterion 8) may be in early-stage trouble
Sector-Specific Considerations
The Piotroski Score works best for capital-intensive businesses where balance sheet metrics like leverage and asset turnover are meaningful. Consider these sector nuances:
| Sector | F-Score Effectiveness | Notes |
|---|---|---|
| Industrials | High | Classic value companies, all 9 criteria relevant |
| Consumer Staples | High | Stable financials make year-over-year comparisons meaningful |
| Financials | Moderate | Different capital structure; leverage criteria need adjustment |
| Technology | Moderate | High growth may score poorly on some criteria despite strength |
| Utilities | Moderate | Regulated returns and high leverage are normal, not warning signs |
| Biotech/Pharma | Low | Pre-revenue companies will always score poorly |
| REITs | Low | Required payouts and leverage structures distort the score |
Limitations of the Piotroski Score
While powerful, the F-Score has important limitations that every investor should understand:
Backward-Looking Nature
The score is based entirely on historical financial statements. By the time annual reports are filed, the data may be 3-6 months old. A company's financial health can change significantly in that time, especially during economic downturns or industry disruptions.
Accounting Manipulation Risk
Because the score relies on accounting data, it's vulnerable to earnings management. Companies can:
- Time revenue recognition to inflate results
- Reclassify expenses to improve margins
- Manipulate working capital timing to boost cash flow
- Use off-balance-sheet arrangements to hide leverage
Growth Company Bias
High-growth companies often score poorly on several criteria:
- They may issue shares to fund growth (Criterion 7 = 0)
- They may increase leverage to invest in expansion (Criterion 5 = 0)
- Their ROA may decline as they invest ahead of revenue (Criterion 3 = 0)
A low F-Score for a growth company doesn't necessarily mean it's financially weak — it may be investing aggressively for the future.
Industry Norms Ignored
The score treats all industries the same, but normal financial structures vary dramatically:
- Banks naturally carry high leverage
- Utilities have regulated returns that limit ROA improvement
- Tech companies often have minimal tangible assets, making asset-based ratios less meaningful
No Valuation Component
The Piotroski Score measures financial quality, not valuation. A company can have a perfect 9 score but still be overvalued. The score should always be used alongside valuation metrics — never as a standalone buy signal.
Advanced Piotroski Analysis Techniques
Trend Analysis: Tracking F-Score Changes
Instead of looking at a single snapshot, track how the F-Score changes over time by recalculating it for earlier fiscal years ("ly-1" vs "ly-2", and so on). MarketXLS hf_ functions also take a quarter argument for interim checks:
=hf_revenue("AAPL", 2024, 1) — Q1 2024 revenue
=hf_revenue("AAPL", 2024, 2) — Q2 2024 revenue
=hf_revenue("AAPL", 2024, 3) — Q3 2024 revenue
=hf_revenue("AAPL", 2024, 4) — Q4 2024 revenue
Formula documentation: hf_revenue
A rising F-Score shows improving fundamentals. A company moving from 4 to 7 tells you something different from one that has sat at 8 for years, and is worth a closer look.
Composite Scoring
Combine the Piotroski Score with other fundamental metrics for a more complete picture:
Value + Quality Screen:
- Low PE ratio:
=PERatio("TICKER")< 15 - High F-Score: nine-test total ≥ 7
- Reasonable dividend:
=DividendYield("TICKER")> 1% - Adequate market cap:
=MarketCapitalization("TICKER")> $1B
Momentum + Quality Screen:
- High F-Score: nine-test total ≥ 7
- Above 50-day SMA:
=Last("TICKER")>=SimpleMovingAverage("TICKER", 50) - RSI not overbought:
=RSI("TICKER")< 70
Geographic Diversification
Research shows the Piotroski Score works across global markets. Consider applying it to:
- US large-cap value stocks
- International developed market stocks
- Emerging market stocks (where information asymmetry makes fundamental screening even more valuable)
Impact of Economic Cycles on the Piotroski Score
The F-Score's effectiveness varies across economic cycles:
During Expansions
- Most companies score well as revenue grows and profitability improves
- High scores may be less discriminating — even weak companies look good in a rising tide
- Focus on other differentiators alongside the F-Score
During Recessions
- Scores tend to spread out more, because weak companies' fundamentals deteriorate faster
- Companies with high scores entered the downturn with stronger balance sheets, which can make them more resilient
During Recoveries
- Low-scoring companies that survived may see rapid F-Score improvement, which can flag turnaround candidates
- Because the score uses annual statements, it can lag the recovery by several months
Frequently Asked Questions
Is a Piotroski Score of 6 good?
A score of 6 is above average and indicates moderately strong financial health. The company meets six of nine criteria, suggesting more positives than negatives. However, it's worth examining which specific criteria scored 0 — some failures (like declining ROA or increasing leverage) are more concerning than others (like a minor decrease in current ratio). For strict value investing, most practitioners prefer scores of 7 or higher.
Can the Piotroski Score predict stock performance?
Piotroski's original study found that high F-Score value stocks outperformed low F-Score value stocks over the following one to two years in his 1976 to 1996 sample, and later studies show mixed results. The score is not a timing tool; it doesn't predict short-term price movements. It works best as a selection filter within a broader value investing framework, not as a standalone trading signal. Combine it with valuation metrics and technical analysis for better results.
How often should the Piotroski Score be updated?
Ideally, update the score quarterly when new financial statements are released. Annual updates align with the original methodology but quarterly reviews let you catch deterioration earlier. With MarketXLS hf_ formulas that use relative periods such as "ly", the tests roll forward to the newest fiscal year when you refresh the workbook.
Does the Piotroski Score work for growth stocks?
The score was designed for value stocks and works best in that context. Growth companies often score poorly because they issue shares, increase leverage, and sacrifice short-term profitability for long-term growth — all of which reduce the F-Score. A low score on a growth stock doesn't necessarily indicate weakness. For growth investing, consider supplementing with metrics like revenue growth rate, gross margin expansion, and free cash flow trajectory.
Can companies manipulate their Piotroski Score?
Companies can influence individual criteria through accounting choices (timing of revenue recognition, expense classification, working capital management). However, manipulating all nine criteria simultaneously without genuinely improving financial health is extremely difficult. The multi-dimensional nature of the score provides natural protection against manipulation. Cross-referencing with cash flow data (Criterion 4) adds another check, since cash is harder to fabricate than accounting earnings.
How do I screen for high Piotroski Score stocks in Excel?
Use MarketXLS to build a screening spreadsheet. Enter ticker symbols in column A, add one column per F-Score test using hf_ formulas such as =IF(hf_Gross_Margin(A2,"ly")>hf_Gross_Margin(A2,"ly-1"),1,0), sum the nine tests, and add =PERatio(A2) and =DividendYield(A2) for valuation context. Sort by F-Score to find the strongest companies.
Summary
The Piotroski Score is a research-based 0 to 9 score for identifying financially strong companies among cheap stocks. Its nine criteria cover profitability, leverage, liquidity, and operating efficiency.
Key takeaways:
- Scores of 7-9 indicate strong financial health and outperformed in Piotroski's original sample
- Scores of 0-3 signal financial weakness and should generally be avoided
- The score works best as a quality filter on top of a value screen, not as a standalone signal
- Combine with valuation metrics like PE ratio and dividend yield for best results
- Track trends — an improving score can be more bullish than a static high score
- Use MarketXLS
hf_formulas in Excel to pull the two years of inputs for any stock and score all nine tests
This article is educational and is not investment advice.
See MarketXLS pricing to run F-Score calculations in Excel.
Here is the template you might want to check out: F-score Template.
Search all MarketXLS functions in the formula library.
Note: the template will pull latest data if you have MarketXLS installed. If you do not have MarketXLS consider subscribing MarketXLS pricing plans
Relevant blogs that you can read to learn more about the topic
SPX Options Historical Data — In-Depth Analysis & Trends The Ultimate Guide to Real-Time Option Data in Excel 0DTE Theta Decay: What Every Trader Should Know

