payout_crosscheck
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-10-02, from payout-ratio-over-100-percent.
| ticker | eps_payout_pct | fcf_payout_pct |
|---|---|---|
| PEP | 81.5 | 71.6 |
| KO | 77 | 69 |
| VZ | 65.2 | 57 |
| XOM | 61 | 76.9 |
| MCD | 59.7 | 74.9 |
| PG | 48.3 | 67.9 |
| MMM | 47.9 | 111.9 |
| JNJ | 46.2 | 64.1 |
| T | 35 | 42.1 |
- Rows × columns
- 9 × 3
- 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 |
|---|---|---|---|
ticker |
text | 9 distinct values (JNJ, KO, MCD…) | |
eps_payout_pct |
number | 35 to 81.5 | percent |
fcf_payout_pct |
number | 42.1 to 111.9 | 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.
SELECT
ticker,
round(100 * toFloat64(dividends_paid) / toFloat64(net_income), 1) AS eps_payout_pct,
round(100 * toFloat64(dividends_paid) / toFloat64(free_cash_flow), 1) AS fcf_payout_pct
FROM
(
SELECT
ticker,
count() AS quarters,
sum(abs(dividends_q)) AS dividends_paid,
sum(net_income_q) AS net_income,
sum(op_cash_q - abs(capex_q)) AS free_cash_flow
FROM
(
SELECT ticker, period_end, dividends_q, net_income_q, op_cash_q, capex_q
FROM
(
SELECT
arrayFirst(t -> has(['KO', 'PEP', 'JNJ', 'PG', 'MCD', 'VZ', 'T', 'XOM', 'MMM', 'O'], t), tickers) AS ticker,
period_end,
argMax(dividends, (filing_date, _ingest_time)) AS dividends_q,
argMax(net_income, (filing_date, _ingest_time)) AS net_income_q,
argMax(net_cash_from_operating_activities, (filing_date, _ingest_time)) AS op_cash_q,
argMax(purchase_of_property_plant_and_equipment, (filing_date, _ingest_time)) AS capex_q
FROM global_markets.stocks_cash_flow_statements
WHERE hasAny(tickers, ['KO', 'PEP', 'JNJ', 'PG', 'MCD', 'VZ', 'T', 'XOM', 'MMM', 'O'])
AND timeframe = 'quarterly'
AND period_end >= today() - 600
GROUP BY ticker, period_end
)
ORDER BY ticker ASC, period_end DESC
LIMIT 4 BY ticker
)
GROUP BY ticker
HAVING quarters = 4 AND net_income > 0 AND free_cash_flow > 0 AND dividends_paid > 0
)
ORDER BY eps_payout_pct DESC
Work with this data in your AI assistant
Opens ready to query, with this page's data. Free, no account.