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.

The Models module page introduces the module, and the sidebar lists all of its functions.

Share