The Two-Stage Dividend Discount Model extends the (single-stage) Gordon Growth Model to companies that are not expected to grow at a constant rate forever. It explicitly projects and discounts dividends over an initial high-growth phase, and then values everything from the end of that phase onward as a perpetuity growing at a lower, more sustainable stable rate (a Gordon Growth terminal value).

The formula is as follows:

\[\text{Dividend Projection}_{t} = \text{Dividends Per Share} \cdot (1 + \text{High Growth Rate}) ^{t}\] \[\text{High-Growth Phase Present Value} = \text{Sum of Dividend Projection}_{t} / (1 + \text{Rate of Return}) ^{t},\;\; \text{for} \;\; t = 1,\;\; \text{...},\;\; \text{High Growth Periods}\] \[\text{Terminal Value} = \text{Last Dividend Projection} \cdot (1 + \text{Stable Growth Rate}) / (\text{Rate of Return} - \text{Stable Growth Rate})\] \[\text{Intrinsic Value} = \text{High-Growth Phase Present Value} + (\text{Terminal Value} / (1 + \text{Rate of Return}) ^{\text{High}} \text{Growth Periods})\]

Also known as: two-stage DDM, two-stage dividend discount model.

No programming experience? With the Finance Toolkit MCP server, AI assistants such as Claude and ChatGPT can calculate the Two-Stage Dividend Discount Model for you. Just ask in plain English.

Calculate the Two-Stage Dividend Discount Model in Python

The Two-Stage Dividend Discount Model is available in the Models module of the open-source Finance Toolkit. Install it with:

pip install financetoolkit -U

Then call get_two_stage_dividend_discount_model as shown below.

from financetoolkit import Toolkit

toolkit = Toolkit(["AAPL", "MSFT"], api_key="FINANCIAL_MODELING_PREP_KEY")

toolkit.models.get_two_stage_dividend_discount_model(0.10, 0.12, 0.03).loc["AAPL"]

Which returns:

  High-Growth Periods = 5
Final High-Growth Dividend 1.6037
High-Growth Phase Present Value 4.8043
Terminal Value 23.5978
Terminal Value Present Value 14.6523
Intrinsic Value 19.4566

Parameters

get_two_stage_dividend_discount_model accepts the following parameters:

  • rate_of_return (float, list or dict): The required rate of return (discount rate) used to discount both phases. Can be one number to use for all tickers, or a list or dict that contains a rate of return for each ticker.
  • high_growth_rate (float, list or dict): The constant growth rate applied to dividends during the explicit high-growth phase. Can be one number to use for all tickers, or a list or dict that contains a high growth rate for each ticker.
  • stable_growth_rate (float, list or dict): The perpetual (terminal) growth rate applied to dividends from the end of the high-growth phase onward. Can be one number to use for all tickers, or a list or dict that contains a stable growth rate for each ticker.
  • high_growth_periods (int, optional): The number of periods in the explicit high-growth phase. Defaults to 5.
  • rounding (int, optional): The number of decimals to round the results to. Defaults to 4.

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

Share