Calculate the Earnings Power Value (EPV), the value of a company’s current earnings if they never grew. Bruce Greenwald uses it to separate what is known (today’s earnings power) from what is speculative (growth): the operating margin is averaged over several years and applied to the latest yearly revenue, taxed, and capitalized at the cost of capital.

  • Normalized Operating Income = Average Operating Margin * Latest Revenue
  • NOPAT = Normalized Operating Income * (1 - Average Tax Rate)
  • Earnings Power Value = NOPAT / WACC
  • EPV per Share = (EPV + Cash - Total Debt) / Shares Outstanding

A share price well above the EPV per share means the market pays for growth, which only adds value when the company earns more than its cost of capital on it.

For more information, see the following book:

  • Greenwald, B.C.N., Kahn, J., Sonkin, P.D. and van Biema, M. (2001). “Value Investing: From Graham to Buffett and Beyond.” Wiley.

Also known as: EPV, no-growth value, Greenwald valuation.

Earnings Power Value in Python or via the MCP

Install the Finance Toolkit with:

pip install financetoolkit -U

Then call get_earnings_power_value as shown below.

from financetoolkit import Toolkit

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

toolkit.models.get_earnings_power_value(weighted_average_cost_of_capital=0.08)

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

What is the earnings power value of Apple, Microsoft and Coca-Cola at an 8% WACC, based on 2021 to 2025, and how does it compare with their share prices?

Which returns:

  Average Operating Margin Normalized Operating Income Tax Rate Normalized NOPAT Weighted Average Cost of Capital Earnings Power Value Equity Value Earnings Power Value per Share Share Price Price to EPV
AAPL 0.3067 1.27656e+11 0.1679 1.06229e+11 0.08 1.32786e+12 1.25141e+12 83.4015 271.86 3.2597
KO 0.2534 1.21476e+10 0.1861 9.88662e+09 0.08 1.23583e+11 8.66388e+10 20.0878 69.91 3.4802
MSFT 0.4314 1.2153e+11 0.1636 1.01652e+11 0.08 1.27066e+12 1.18871e+12 159.238 483.62 3.0371

Parameters

get_earnings_power_value accepts the following parameters.

ParameterTypeDescriptionExample
weighted_average_cost_of_capitalfloat | dict[str, float] | NoneThe discount rate, one number or a number per ticker. Defaults to None, which uses the latest Weighted Average Cost of Capital of each company, calculated over a year (the last 4 quarters with quarterly data) whatever trailing the cash flows use, as the rate is a yearly one.0.08
periodsintThe number of periods the operating margin and tax rate are averaged over; with trailing, the number of trailing sums, trailing calendar periods apart so that they do not overlap, counted back from the latest reported one. A sum that includes a missing period is left out of the average. Defaults to 5.5
trailingint | NoneSum the revenue, operating income, taxes and income before tax over this many periods (e.g. 4 quarters), so that the margin is applied to a year of revenue. Defaults to None, which uses 4 (a trailing twelve months) for quarterly data and the yearly figures otherwise.4
roundingint | NoneThe number of decimals to round the results to. Defaults to None, which uses the Toolkit’s rounding.2
Share