Calculate the cash-based operating profitability of Ball, Gerakos, Linnainmaa and Nikolaev (2016): operating profit with the working capital accruals taken out, so that it measures the operating profit received in cash, scaled by the total assets at the start of the year.

Ball et al. show that cash-based operating profitability predicts stock returns better than the profitability measures that include accruals, and that it subsumes the accrual anomaly: once the cash-based profitability is known, accruals no longer predict returns. The operating profit is that of Ball et al. (2015), with research and development added back as an investment rather than an expense of the period.

The formula is as follows:

\[\text{Cash-Based Operating Profitability} = (\text{Revenue} - \text{Cost of Goods Sold} - \text{Selling},\; \text{General and Administrative Expenses} - \Delta \;\text{Receivables} - \Delta \;\text{Inventory} - \Delta \;\text{Prepaids} + \Delta \;\text{Deferred Revenue} + \Delta \;\text{Accounts Payable} + \Delta \;\text{Accrued Expenses}) / \text{Beginning Total Assets}\]

The selling, general and administrative expenses are without research and development (Compustat XSGA - XRD in the paper), the receivables are the total (trade and other) receivables and the deferred revenue the current and non-current deferred revenue. Each change is that of the balance over the window of the flows (a year with annual data, the year before the quarter with quarterly data), and the total assets are those at the start of the window: the end of the year before with annual data, the quarter four quarters back with quarterly data. Ball et al. (2016) scale by these lagged total assets, unlike the end-of-year assets of Ball et al. (2015) and Novy-Marx (2013); Chen and Zimmermann note this in their replication and Wang (2020) defines the measure on lagged total assets as well. It is an annual measure, so with quarterly data the flows are those of the trailing twelve months by default.

Also known as: CbOP, cash operating profitability, cash-based profitability, accrual-free profitability.

Cash-Based Operating Profitability in Python or via the MCP

Install the Finance Toolkit with:

pip install financetoolkit -U

Then call get_cash_based_operating_profitability as shown below.

from financetoolkit import Toolkit

toolkit = Toolkit(
    ["AAPL", "MSFT", "KO", "XOM"],
    api_key="FINANCIAL_MODELING_PREP_KEY",
    start_date="2021-01-01",
    end_date="2025-12-31",
)

toolkit.ratios.get_cash_based_operating_profitability()

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

What was the cash-based operating profitability of Apple, Microsoft, Coca-Cola and ExxonMobil from 2021 to 2025?

Which returns:

  2021 2022 2023 2024 2025
AAPL 0.3943 0.4204 0.4009 0.4394 0.4742
KO 0.1425 0.2178 0.1388 0.2021 0.0879
MSFT 0.3035 0.3256 0.3208 0.3452 0.3146
XOM 0.1542 0.2493 0.2015 0.1796 0.1769

Parameters

get_cash_based_operating_profitability accepts the following parameters.

ParameterTypeDescriptionExample
roundingint | NoneThe number of decimals to round the results to. Defaults to None, which uses the rounding of the Toolkit (4 unless set otherwise).2
growthboolWhether to calculate the growth of the ratios. Defaults to False.True
lagint | list[int]The lag to use for the growth calculation. Defaults to 1.4
compoundboolWhether the growth is the compound annual growth rate over the lag (e.g. lag=5 for the five-year CAGR) instead of the total change. Defaults to False.False
standardizeboolWhether to standardize (Z-Score) the result. When combined with growth=True, standardizes the growth values instead of the raw values. Defaults to False.True
trailingintThe number of periods to sum the income statement items over, which is also the number of periods the balance changes span and the number of periods the total assets are taken before. Defaults to None, which uses the trailing twelve months (4 quarters) with quarterly data and single years with annual data.4
Share