Methodology & Data Sources
What the engine does, where the numbers come from, and where the model breaks down.
The projection model
The core calculator is a year-by-year simulation. It takes five inputs — starting balance, current dividend yield, expected dividend growth rate (DGR), expected share price growth rate, and an optional periodic contribution — and walks forward one year at a time.
For each projected year, the engine:
- Grows the dividend per share by the DGR. If you started with a $4 dividend and DGR is 8%, year-2 dividend per share is $4.32.
- Grows the share price by the price-growth rate, compounded from the starting price.
- Computes annual dividend income = current share count × dividend per share.
- If DRIP is enabled, reinvests the year's dividends to buy more shares. The purchase price used is the simple average of the year's starting and ending share price — a standard mid-year-average approximation that avoids over-crediting either end of the price path.
- If periodic contributions are enabled, adds the contribution to share count at the same mid-year-average price.
- Updates share count, recomputes portfolio value (shares × end-of-year price), and adds the year's income to the cumulative dividend total.
The output is a table of year, share count, dividend per share, annual income, total dividends received to date, and portfolio value.
Yield calculations
On ticker pages, we display two yields and they mean different things:
- Forward yield annualizes the most recent payout cadence. We take the average of the last four distributions, multiply by the payout frequency (quarterly = 4, monthly = 12, weekly = 52), and divide by the current share price. This is the right yield to use for an ETF whose distribution policy has changed recently — it reflects what a buyer today should expect going forward.
- Trailing yield is the sum of the last twelve months of distributions divided by the current price. It's the conventional “TTM yield” that most data providers show. It looks backward, so it can lag reality for funds that just bumped or cut their distribution.
5-year dividend growth rate (DGR)
The 5-year DGR is a compound annual growth rate computed from calendar-year dividend totals: we sum all distributions paid in year N, sum all distributions paid in year N+4, and compute the CAGR between them over four periods. We report 5-year DGR only when a ticker has at least five full calendar years of distribution history; otherwise the field is null and the ticker page falls back to a generic default with a clear note.
Before computing yearly totals, we split-adjust each historical dividend. For every stock split with an ex-date after a given dividend's ex-date, we divide that dividend amount by the split ratio. This produces a continuous, share-equivalent series so that a 2-for-1 split doesn't make pre-split dividends look artificially large.
Per-ticker data pipeline
All ticker data comes from the Polygon.io REST API. A script (npm run fetch:tickers) iterates through our ticker registry and pulls three endpoints for each one:
/v3/reference/dividends— the latest 28 distributions, enough to cover six years of monthly payers or seven years of quarterly payers./v3/reference/splits— the full split history, used to adjust historical dividends./v2/aggs/ticker/{X}/prev— the prior-day close, used as the reference price for yield calculation.
The script writes a JSON snapshot per ticker into the repository. Live re-fetches only happen when we explicitly run the script and rebuild the site — never per visitor request. This keeps Polygon API costs flat and avoids leaking visitor information to a third-party API.
Data freshness
Every ticker JSON snapshot includes a fetchedAt timestamp that is surfaced on the ticker page. We aim to refresh monthly, and sooner after notable events (distribution announcements, splits, reverse splits). Between refreshes, the displayed price will drift from the live market price and the trailing yield will drift with it. Treat the snapshot as a starting point, not a real-time quote.
Limitations and defaults
- Default DGR for short-history tickers. Some funds (notably the YieldMax single-stock ETFs launched in 2024) don't have five full calendar years of distributions yet. For those, ticker pages default the DGR field to a generic 7%. This is a placeholder so the calculator has something to work with — it is not our forecast of those funds' future growth. Override it with whatever assumption you find defensible.
- Constant growth assumptions. The model assumes DGR and price growth are constant over the projection horizon. Real dividends and prices are not. Dividend cuts, special distributions, return-of-capital reclassifications, and bear markets all violate the assumption.
- Pre-tax projections. Every calculator except the tax calculator outputs pre-tax figures. Real after-tax outcomes depend on account type (taxable vs IRA vs 401(k)), state, and your marginal rate.
Tax model
The after-tax calculator applies the U.S. federal qualified-dividend brackets (0%, 15%, 20%) or ordinary-income rates, depending on the toggle. It is a simplified federal-only model. It does not account for state or local taxes, the Net Investment Income Tax (NIIT) on high earners, the Alternative Minimum Tax (AMT), return-of-capital classifications common to option-income ETFs (such as MSTY, ULTY, or covered-call funds), or wash-sale interactions. For real tax planning, talk to a CPA.
Corrections
If a number on the site looks wrong — a dividend amount, a split adjustment, a yield, a CAGR — email [email protected] with the ticker and the discrepancy. We will check it against Polygon's data and either fix the snapshot or document why our number differs.
Last updated: 2026-05-14.