Calculate the gross profitability of Novy-Marx (2013), the gross profit a company earns on its assets.

Novy-Marx shows that gross profit is the cleanest accounting measure of economic profitability: the further down the income statement, the more the profit is polluted by expenses that are really investments (selling, research and administrative expenses) or by financing and taxes. Gross profitability predicts stock returns about as well as book-to-market does, and profitable companies outperform unprofitable ones even though they trade at higher valuations, which makes it the profitability factor that complements value.

The formula is as follows:

\[\text{Gross Profitability} = (\text{Revenue} - \text{Cost of Goods Sold}) / \text{Total Assets}\]

The total assets are those at the end of the fiscal year, the same date as the gross profit, as in the paper (a point in time, not averaged). Gross profitability is an annual measure, so with quarterly data the gross profit is that of the trailing twelve months by default.

Also known as: GP/A, gross profits to assets, gross profitability premium, Novy-Marx profitability.

Gross Profitability in Python or via the MCP

Install the Finance Toolkit with:

pip install financetoolkit -U

Then call get_gross_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_gross_profitability()

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

What gross profit did Apple, Microsoft, Coca-Cola and ExxonMobil earn on their total assets from 2021 to 2025?

Which returns:

  2021 2022 2023 2024 2025
AAPL 0.4354 0.4841 0.4797 0.495 0.5434
KO 0.2469 0.2695 0.2787 0.2858 0.2819
MSFT 0.3471 0.3717 0.3545 0.3339 0.3132
XOM 0.1914 0.2793 0.2236 0.1692 0.1564

Parameters

get_gross_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 revenue and cost of goods sold over; the total assets stay those at the end of the last period. Defaults to None, which uses the trailing twelve months (4 quarters) with quarterly data and single years with annual data.4
Share