Calculate the Piotroski Score, a comprehensive financial assessment tool that helps investors and analysts evaluate a company’s financial health and fundamental strength.

The Piotroski Score was developed by Joseph Piotroski and is based on a set of nine fundamental financial criteria. Each criterion is assigned a score of 0 or 1, and the scores are then summed to calculate the Piotroski Score.

The nine criteria are categorized into three groups:

  1. Profitability:
    • Return on Assets (ROA) Criteria: Measures the profitability of the company.
    • Operating Cash Flow Criteria: Evaluates the company’s ability to generate cash from its operations.
    • Change in ROA Criteria: Assesses the trend in ROA over time.
    • Accruals Criteria: Examines the quality of earnings.
  2. Leverage, Liquidity, and Operating Efficiency:
    • Change in Leverage Criteria: Analyzes changes in the company’s leverage (debt).
    • Change in Current Ratio Criteria: Evaluates changes in the current ratio.
    • Number of Shares Criteria: Assesses the issuance of common shares.
  3. Operating Efficiency and Asset Utilization:
    • Gross Margin Criteria: Examines the company’s gross margin, a measure of profitability.
    • Asset Turnover Ratio Criteria: Evaluates the efficiency of asset utilization and sales generation.

The Piotroski Score is calculated by summing the scores assigned to each of the nine criteria. The maximum possible score is 9, indicating the highest financial strength, while the minimum score is 0, suggesting potential financial weaknesses.

Note that the Piostroski Score has been developed many decades ago and that it is important to always compare the same sectors. E.g. it could be that it is quite normal that a firm issues shares each year which nets a lower score even though it is a normal practice in that sector.

Piotroski designed the F-Score to separate winners from losers among value stocks (high book-to-market), where scores of 8 or 9 marked the strongest companies and scores of 0 or 1 the weakest. Because most criteria compare this year with last year, the score measures the direction of change rather than the level of financial strength, and a single strong year after a weak one can score highly.

Following Piotroski (2000), the Return on Assets, the Operating Cash Flow in the accruals signal and the Asset Turnover are scaled by the total assets at the beginning of the period, while the leverage signal divides long-term debt by the average of the beginning and ending total assets.

The formula is as follows, where (t-1) is the same period a year earlier (the previous column on yearly data, four quarters back on quarterly data, so quarterly comparisons are year over year) and Beginning Total Assets are the total assets at the end of the previous period (trailing periods back when set, one year earlier with trailing=4 on quarterly data):

\[\text{Return on Assets} (\text{ROA}) = \text{Net Income} / \text{Beginning Total Assets}\] \[\text{Return on Assets Criteria} = 1 \;\text{if ROA} > 0,\;\; \text{else 0}\] \[\text{Operating Cashflow Criteria} = 1 \;\text{if Operating Cash Flow} > 0,\;\; \text{else 0}\] \[\text{Change in Return on Assets Criteria} = 1 \;\text{if ROA} (t) > \text{ROA} (t-1),\;\; \text{else 0}\] \[\text{Accruals Criteria} = 1 \;\text{if Operating Cash Flow} / \text{Beginning Total Assets} > \text{ROA},\;\; \text{else 0}\] \[\text{Average Total Assets} = (\text{Beginning Total Assets} + \text{Total Assets}) / 2\] \[\text{Change in Leverage Criteria} = 1 \;\text{if Long Term Debt} / \text{Average Total Assets is lower than in} (t-1),\;\; \text{else 0}\] \[\text{Change in Current Ratio Criteria} = 1 \;\text{if Total Current Assets} / \text{Total Current Liabilities is higher than in} (t-1),\;\; \text{else 0}\] \[\text{Number of Shares Criteria} = 1 \;\text{if Common Stock Issued} = 0,\;\; \text{else 0}\] \[\text{Gross Margin Criteria} = 1 \;\text{if} (\text{Revenue} - \text{Cost of Goods Sold}) / \text{Revenue is higher than in} (t-1),\;\; \text{else 0}\] \[\text{Asset Turnover Criteria} = 1 \;\text{if Revenue} / \text{Beginning Total Assets is higher than in} (t-1),\;\; \text{else 0}\] \[\text{Piotroski Score} = \text{SUM of the nine criteria} (0 \;\text{to}\; 9)\]

With trailing, the flows (net income, operating cash flow, revenue, cost of goods sold and common stock issued) are summed over the trailing periods, while the balance sheet items (total assets, long term debt, current assets and current liabilities) are taken at the end of each period.

Please see Piotroski, Joseph D. “Value Investing: The Use of Historical Financial Statement Information to Separate Winners from Losers.” Journal of Accounting Research, Vol. 38, Supplement, 2000, pp. 1-41.

Also known as: Piotroski F-score, financial strength, quality score.

Piotroski Score in Python or via the MCP

Install the Finance Toolkit with:

pip install financetoolkit -U

Then call get_piotroski_score as shown below.

from financetoolkit import Toolkit

toolkit = Toolkit(
    ["F", "GM", "TSLA"],
    api_key="FINANCIAL_MODELING_PREP_KEY",
    start_date="2021-01-01",
    end_date="2025-12-31",
)

toolkit.models.get_piotroski_score().xs("Piotroski Score", level=1)

Or, after setting up the Finance Toolkit MCP, ask:

What was the Piotroski F-Score of Ford, General Motors and Tesla from 2022 to 2025?

Which returns:

  2022 2023 2024 2025
F 5 6 6 3
GM 6 6 7 5
TSLA 8 3 4 5

Parameters

get_piotroski_score accepts the following parameters.

ParameterTypeDescriptionExample
trailingint | NoneThe trailing period to use for the calculation. Defaults to None, which is 4 on quarterly data (a trailing twelve months), as the score was estimated on yearly statements.4
show_columnslist[str] | NoneList of columns to show in the results. If None, all columns will be shown. Defaults to None.["Accruals Criteria", "Piotroski Score"]
Share