STRASMORE/EXPLORE 3,256 QUERIES

Monthly dividend stocks - filing companies paying every month, ranked by daily traded value

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-04, from Monthly Dividend Stocks: The Full List.

as of table 31×6read in context →
Monthly dividend stocks - filing companies paying every month, ranked by daily traded value — 31 rows by 6 columns, computed from US exchange, SIP and OPRA data.
tickermonthly_payment_usdannual_yield_pctyears_paying_monthlyavg_daily_traded_musdpriced_through
O0.27156.0114.3348.5Oct 2
AGNC0.1216.3512292.3Oct 2
ADC0.2674.85.875.4Oct 2
DOC0.10176.241.671.6Oct 2
DX0.1718.457.767.2Oct 2
ARR0.2421.166.351.4Oct 2
EPR0.316.595.233.9Oct 2
ORC0.123.5513.527.9Oct 2
PECO0.1153.655.126.4Oct 2
APLE0.085.894.826Oct 2
MAIN0.2655.661421.9Oct 2
IVR0.1225.130.718.9Oct 2
SMA0.13154.851.418.5Oct 2
LTC0.195.3214.317.9Oct 2
EFC0.1313.387.414.1Oct 2
CSWC0.19349.891.312.5Oct 2
PSEC0.03520.78149.2Oct 2
LAND0.04675.8713.65.3Oct 2
PFLT0.0813.9914.24.5Oct 2
GOOD0.19.3814.34Oct 2
GLAD0.159.3814.22.7Oct 2
PBT0.01960.7414.32.6Oct 2
SAR0.2518.211.52.2Oct 2
HRZN0.0615.5713.82.2Oct 2
GAIN0.086.0514.22.1Oct 2
CION0.116.910.81.9Oct 2
PNNT0.0414.5931.6Oct 2
SBR0.33175.6514.21.5Oct 2
OXSQ0.03532.947.51.5Oct 2
EARN0.0823.751.2Oct 2
SCM0.083313.45.81Oct 2
Rows × columns
31 × 6
Computed
Completeness
No missing values
Source
US exchange, SIP and OPRA market data
Licence
Strasmore terms · free, no signup
Formats
JSON · CSV · the SQL below

What each column holds

Column definitions for Monthly dividend stocks - filing companies paying every month, ranked by daily traded value, derived from the stored result.
ColumnTypeRangeNotes
ticker text 31 distinct values (ADC, AGNC, APLE…)
monthly_payment_usd number 0.0196 to 0.3317 US dollars
annual_yield_pct number 0.74 to 32.94 percent
years_paying_monthly number 0.7 to 14.3
avg_daily_traded_musd number 1 to 348.5
priced_through text 1 distinct value (Oct 2)

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 m.ticker AS ticker,
       round(m.latest_payment, 4) AS monthly_payment_usd,
       round(100 * m.latest_payment * 12 / l.last_close, 2) AS annual_yield_pct,
       round(dateDiff('day', s.streak_start, s.last_ex) / 365.25, 1) AS years_paying_monthly,
       round(l.adv_usd / 1e6, 1) AS avg_daily_traded_musd,
       formatDateTime(l.last_session, '%b %e') AS priced_through
FROM (
    SELECT ticker, argMax(cash_amount, ex_dividend_date) AS latest_payment
    FROM global_markets.stocks_dividends
    WHERE ex_dividend_date > today() - 365
      AND ex_dividend_date <= today()
      AND cash_amount > 0
      AND distribution_type = 'recurring'
      AND ticker NOT IN ('SPCX')
      AND ticker NOT IN ('KORU','SOXL','SOXS','TQQQ','SQQQ','NVDL','NVDS','NVD','TSLL','TSLQ','TSLZ','SPXL','SPXS','UPRO','SPXU','LABU','LABD','FAS','FAZ','TNA','TZA','YINN','YANG','UDOW','SDOW','BOIL','KOLD','UCO','SCO','USD','SSO','SDS','QLD','QID','ERX','ERY','DRN','DRV','CURE','SOXY','MUU','SNXX','UVXY','SVXY','UVIX','SVIX','BULZ','WEBL','WEBS','DPST','DRIP','GUSH','AGQ','ZSL','BITX','ETHU','MSTX','MSTU','CONL','DUST','JNUG','JDST','NUGT')
      AND ticker NOT IN (SELECT ticker FROM global_markets.stocks_splits
                         WHERE execution_date BETWEEN today() - 400 AND today())
    GROUP BY ticker
    HAVING count() BETWEEN 10 AND 14
       AND argMax(frequency, ex_dividend_date) = 12
) AS m
INNER JOIN (
    SELECT ticker,
           maxIf(ed, gap_days > 70) AS streak_start,
           max(ed) AS last_ex
    FROM (
        SELECT ticker, ex_dividend_date AS ed,
               dateDiff('day',
                        lagInFrame(ex_dividend_date) OVER (PARTITION BY ticker ORDER BY ex_dividend_date),
                        ex_dividend_date) AS gap_days
        FROM (
            SELECT ticker, ex_dividend_date
            FROM global_markets.stocks_dividends
            WHERE distribution_type = 'recurring' AND cash_amount > 0 AND ex_dividend_date <= today()
            GROUP BY ticker, ex_dividend_date
        )
    )
    GROUP BY ticker
) AS s ON s.ticker = m.ticker
INNER JOIN (
    SELECT ticker,
           avg(dollar_vol) AS adv_usd,
           argMax(close_px, d) AS last_close,
           max(d) AS last_session,
           count() AS sessions
    FROM (
        SELECT ticker,
               toDate(toTimeZone(window_start, 'America/New_York')) AS d,
               sum(toFloat64(close) * volume) AS dollar_vol,
               argMax(toFloat64(close), window_start) AS close_px
        FROM global_markets.delayed_stocks_minute_aggs
        WHERE window_start >= toDateTime(today() - 32)
          AND toDate(toTimeZone(window_start, 'America/New_York')) < today()
          AND toHour(toTimeZone(window_start, 'America/New_York')) * 60
              + toMinute(toTimeZone(window_start, 'America/New_York')) >= 570
          AND toHour(toTimeZone(window_start, 'America/New_York')) * 60
              + toMinute(toTimeZone(window_start, 'America/New_York')) < 960
        GROUP BY ticker, d
    )
    GROUP BY ticker
    HAVING sessions >= 15 AND adv_usd >= 1000000 AND last_close > 0
) AS l ON l.ticker = m.ticker
INNER JOIN (
    SELECT ticker
    FROM global_markets.stocks_ratios
    GROUP BY ticker
    HAVING argMax(market_cap, date) > 0
) AS f ON f.ticker = m.ticker
ORDER BY l.adv_usd DESC
LIMIT 60
⌘/Ctrl + Enter

Work with this data in your AI assistant

Opens ready to query, with this page's data. Free, no account.

More from this analysisMonthly Dividend Stocks: The Full List
Monthly payers yielding above 12% - the price move and the payment move behind the number table 15×5 → Realty Income's declared monthly rate by calendar year, the raise over the prior year, and the steps up inside each year table 12×5 → Yield distribution across liquid monthly payers, with each band's median 12-month price change table 5×5 → Monthly payers in the dividend record, by completed calendar year ranking 21×3 → Recurring cash payments per ticker over the trailing year - where the monthly band sits ranking 7×4 → Recurring cash dividends by declared schedule: every payer on file, July 2025 through June 2026 table 5×5 → See all 3,256 queries →