Beneish M-Score
The Beneish M-Score is a probabilistic model, developed by Messod Beneish, that uses eight financial ratios derived from a company’s financial statements to identify whether a company has manipulated its earnings. It is a natural companion to the Altman Z-Score and Piotroski F-Score, using the same normalized financial statements as its input.
The formula is as follows:
M-Score = -4.84 + 0.92 * DSRI + 0.528 * GMI + 0.404 * AQI + 0.892 * SGI + 0.115 * DEPI - 0.172 * SGAI + 4.679 * TATA - 0.327 * LVGI
The eight variables are:
- DSRI: Days Sales in Receivables Index
- GMI: Gross Margin Index
- AQI: Asset Quality Index
- SGI: Sales Growth Index
- DEPI: Depreciation Index
- SGAI: Selling, General and Administrative Expenses Index
- TATA: Total Accruals to Total Assets
- LVGI: Leverage Index
Also known as: Beneish M-Score, earnings manipulation score.
No programming experience? With the Finance Toolkit MCP server, AI assistants such as Claude and ChatGPT can calculate the Beneish M-Score for you. Just ask in plain English.
Calculate the Beneish M-Score in Python
The Beneish M-Score is available in the Models module of the open-source Finance Toolkit. Install it with:
pip install financetoolkit -U
Then call get_beneish_m_score as shown below.
from financetoolkit import Toolkit
toolkit = Toolkit(["AAPL", "MSFT"], api_key="FINANCIAL_MODELING_PREP_KEY")
toolkit.models.get_beneish_m_score().loc["AAPL"]
Which returns:
| 2021 | 2022 | 2023 | |
|---|---|---|---|
| Days Sales in Receivables Index | 1.0322 | 1.0975 | 1.0297 |
| Gross Margin Index | 0.9151 | 0.9647 | 0.9814 |
| Asset Quality Index | 1.1404 | 0.9841 | 0.9387 |
| Sales Growth Index | 1.3326 | 1.0779 | 0.972 |
| Depreciation Index | 1.0566 | 1.0635 | 0.9982 |
| SGA Expenses Index | 0.8279 | 1.0595 | 1.0222 |
| Leverage Index | 1.0608 | 1.0729 | 0.9516 |
| Total Accruals to Total Assets | -0.0267 | -0.0634 | -0.0384 |
| Beneish M-Score | -2.2503 | -2.6691 | -2.6802 |
Parameters
get_beneish_m_score accepts the following parameters:
- rounding (int, optional): The number of decimals to round the results to. Defaults to None.
- growth (bool, optional): Whether to calculate the growth of the values. Defaults to False.
- lag (int | list[int], optional): The lag to use for the growth calculation. Defaults to 1.
- standardize (bool, optional): Whether to standardize (Z-Score) the result. When combined with growth=True, standardizes the growth values instead of the raw values. Defaults to False.
- trailing (int | None, optional): The trailing period to use for the calculation. Defaults to None.
- show_columns (list[str] | None, optional): List of columns to show in the results. If None, all columns will be shown. Defaults to None.
Related Models
The Models module page introduces the module, and the sidebar lists all of its functions.