quality_screen
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-06, from high-dividend-us-stocks-for-indian-investors.
| ticker | payout_pct | worst_yoy_pct | growth_pct |
|---|---|---|---|
| T | 44.3 | -35 | -46.6 |
| IBM | 59.2 | 0.6 | 2.4 |
| VZ | 90 | 1.9 | 7.9 |
| KO | 63.1 | 2.4 | 21.4 |
| CSCO | 49.6 | 2.5 | 10.9 |
| CVX | 67.1 | 2.9 | 28.8 |
| PG | 63.3 | 3.5 | 22.8 |
| MO | 89.9 | 3.5 | 18.2 |
| JNJ | 60.5 | 4.5 | 22.7 |
| ABBV | 240.4 | 4.7 | 26.2 |
| PEP | 75.8 | 5.5 | 32.4 |
- Rows × columns
- 11 × 4
- 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 | 11 distinct values (ABBV, CSCO, CVX…) | |
payout_pct |
number | 44.3 to 240.4 | percent |
worst_yoy_pct |
number | -35 to 5.5 | percent |
growth_pct |
number | -46.6 to 32.4 | 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
basket AS
(
SELECT
ticker,
ex_dividend_date,
max(toFloat64(cash_amount)) AS amt
FROM global_markets.stocks_dividends
WHERE ticker IN ('ABBV','CSCO','CVX','IBM','JNJ','KO','MO','PEP','PG','T','VZ','XOM')
AND frequency IN (4, 12)
AND ex_dividend_date >= toDate('2020-01-01')
GROUP BY ticker, ex_dividend_date
),
annual AS
(
SELECT
ticker,
toYear(ex_dividend_date) AS div_year,
sum(amt) AS annual_div
FROM basket
WHERE ex_dividend_date < toStartOfYear(today())
GROUP BY ticker, div_year
),
yoy AS
(
SELECT
ticker,
div_year,
annual_div,
lagInFrame(annual_div) OVER (PARTITION BY ticker ORDER BY div_year
ROWS BETWEEN 1 PRECEDING AND CURRENT ROW) AS prev_div
FROM annual
),
ttm AS
(
SELECT
ticker,
sum(amt) AS div_ttm
FROM basket
WHERE ex_dividend_date >= today() - 365
GROUP BY ticker
),
eps AS
(
SELECT
ticker,
argMax(toFloat64(earnings_per_share), date) AS eps_ttm
FROM global_markets.stocks_ratios
WHERE ticker IN ('ABBV','CSCO','CVX','IBM','JNJ','KO','MO','PEP','PG','T','VZ','XOM')
AND date >= today() - 120
GROUP BY ticker
)
SELECT
h.ticker AS ticker,
round(100 * t.div_ttm / e.eps_ttm, 1) AS payout_pct,
h.worst_yoy_pct AS worst_yoy_pct,
h.growth_pct AS growth_pct
FROM
(
SELECT
ticker,
round(min(100 * (annual_div / prev_div - 1)), 1) AS worst_yoy_pct,
round(100 * (argMax(annual_div, div_year) / argMin(annual_div, div_year) - 1), 1) AS growth_pct
FROM yoy
WHERE prev_div > 0
GROUP BY ticker
) AS h
INNER JOIN ttm AS t ON t.ticker = h.ticker
INNER JOIN eps AS e ON e.ticker = h.ticker
WHERE e.eps_ttm > 0
ORDER BY worst_yoy_pct ASC
Work with this data in your AI assistant
Opens ready to query, with this page's data. Free, no account.