payout_trend
Answered against 22 years of US equities and 12 years of US options data and published with the query that produced it. This result is stored as of 2026-09-26, from jnj-dividend-increase-history.
| year | dividends_per_share | diluted_eps | eps_payout_pct | cash_payout_pct |
|---|---|---|---|---|
| 2018 | 3.54 | 5.61 | 63.1 | 42.8 |
| 2019 | 3.75 | 5.63 | 66.6 | 42.4 |
| 2020 | 3.98 | 5.51 | 72.2 | 42.5 |
| 2021 | 4.19 | 7.81 | 53.6 | 47.1 |
| 2022 | 4.45 | 6.73 | 66.1 | 55.1 |
| 2023 | 4.7 | 13.72 | 34.3 | 51.6 |
| 2024 | 4.91 | 5.79 | 84.8 | 48.7 |
| 2025 | 5.14 | 11.03 | 46.6 | 50.5 |
- Rows × columns
- 8 × 5
- Computed
- Completeness
- No missing values
- Source
- US exchange, SIP and OPRA market data
- Licence
- Strasmore terms · free, no signup
What each column holds
| Column | Type | Range | Notes |
|---|---|---|---|
year |
text | 8 distinct values (2018, 2019, 2020…) | |
dividends_per_share |
number | 3.54 to 5.14 | |
diluted_eps |
number | 5.51 to 13.72 | |
eps_payout_pct |
number | 34.3 to 84.8 | percent |
cash_payout_pct |
number | 42.4 to 55.1 | percent |
Computed from Strasmore's warehouse of US exchange, SIP and OPRA market data. Equity prices are delayed; options greeks and implied volatility are end-of-day. This result is stored, not recomputed on load — it is exactly the numbers that were returned on , and the query below is what returned them.
Run it yourself
This is the exact query behind the result above. Change a ticker, a date or a column and run it against the warehouse — no account, no key. The no-signup tier is smaller than the one this page was computed on; a query that reaches past it comes back saying which plan runs it.
WITH
per_share AS
(
SELECT
toYear(ex_date) AS fy,
round(sum(amount), 4) AS dividends_per_share,
count() AS payments
FROM
(
SELECT
ex_dividend_date AS ex_date,
max(toFloat64(cash_amount)) AS amount
FROM global_markets.stocks_dividends
WHERE ticker = 'JNJ'
AND frequency = 4
AND ex_dividend_date >= '2018-01-01'
AND ex_dividend_date < '2026-01-01'
GROUP BY ex_dividend_date
)
GROUP BY fy
HAVING payments = 4
),
eps_annual AS
(
SELECT
toYear(period_end - 7) AS fy,
argMax(toFloat64(diluted_earnings_per_share), (filing_date, period_end)) AS diluted_eps
FROM global_markets.stocks_income_statements
WHERE has(tickers, 'JNJ')
AND timeframe = 'annual'
AND period_end >= '2018-01-01'
AND period_end < '2026-06-01'
GROUP BY fy
),
cash AS
(
SELECT
toYear(period_end - 7) AS fy,
argMax(toFloat64(dividends), (filing_date, period_end)) AS dividends_paid,
argMax(toFloat64(net_cash_from_operating_activities), (filing_date, period_end)) AS operating_cash
FROM global_markets.stocks_cash_flow_statements
WHERE has(tickers, 'JNJ')
AND timeframe = 'annual'
AND period_end >= '2018-01-01'
AND period_end < '2026-06-01'
GROUP BY fy
)
SELECT
toString(p.fy) AS year,
p.dividends_per_share AS dividends_per_share,
round(e.diluted_eps, 2) AS diluted_eps,
round(p.dividends_per_share / e.diluted_eps * 100, 1) AS eps_payout_pct,
round(abs(c.dividends_paid) / c.operating_cash * 100, 1) AS cash_payout_pct
FROM per_share AS p
INNER JOIN eps_annual AS e ON e.fy = p.fy
INNER JOIN cash AS c ON c.fy = p.fy
ORDER BY p.fy
Work with this data in your AI assistant
Opens ready to query, with this page's data. Free, no account.