Ex-dividend dates wey dey come dis week: stocks to watch
See di stocks wey get ex-dividend dates dis week and next week. We list di biggest names, per-share payouts, pay dates, and wetin dey happen to share price for ex-morning.
Di ex-dividend date wey dey come na im dey decide who go collect money: if you get di stock before im ex-dividend date, di next payment na your own; if you buy am for di date or afta, di seller go keep di cash. Dis page na live calendar of di dates wey dey front — di names wey dey go ex each day dis week, di biggest companies wey dey go ex ova di next two weeks — we calculate am from declared dividend records and refresh am every week. E still dey measure wetin di share price really dey do for di ex-morning, and weda di "dividend capture" trade fit survive di mata.
Ex-dividend dates for dis week
Every cash dividend wey dem don declare wey go ex inside di next seven days, arranged by day, and separated by how often di payer dey pay:
The exact SQL behind every number
SELECT toString(ex_dividend_date) AS ex_date,
formatDateTime(ex_dividend_date, '%b %e') AS ex_date_label,
count() AS names_going_ex,
countIf(frequency = 12) AS monthly_payers,
countIf(frequency = 4) AS quarterly_payers
FROM global_markets.stocks_dividends
WHERE ex_dividend_date > today()
AND ex_dividend_date <= today() + 7
AND cash_amount > 0
GROUP BY ex_dividend_date
ORDER BY ex_dividend_dateDi near-term calendar get 5 ex-dividend days, e start Jul 27 with 40 names — 3 na monthly payers, 27 na quarterly ones. Dat split dey important when you dey scan calendar: di monthly names (income funds, mortgage trusts, some REITs) dey show face every four weeks and dem dey gada around mid-month; di quarterly names — wey be most operating companies — dey appear once per season. To collect any of dis payments, you gats own di position by di close of trading di day before di date wey dem list. Di timing machinery dey inside our ex-dividend date guide, and record date vs ex-dividend date dey explain why di ex-date na di one wey matter for buyers.
Big names wey dey go ex-dividend for di next two weeks
Di biggest companies ($10B market cap and above) wey dey go ex inside fourteen days — payment, pay date, and di annual yield wey dat payment dey imply for di current price:
The exact SQL behind every number
WITH latest AS (
SELECT ticker, argMax(market_cap, date) AS mcap, argMax(price, date) AS px
FROM global_markets.stocks_ratios
WHERE date >= today() - 10
GROUP BY ticker
)
SELECT d.ticker AS ticker,
toString(d.ex_dividend_date) AS ex_date,
formatDateTime(d.ex_dividend_date, '%b %e') AS ex_date_label,
round(max(d.cash_amount), 4) AS per_share_usd,
toString(any(d.pay_date)) AS pay_date,
formatDateTime(any(d.pay_date), '%b %e') AS pay_date_label,
round(any(l.mcap) / 1e9, 0) AS mcap_bn,
round(100 * max(d.cash_amount) * max(d.frequency) / any(l.px), 2) AS indicated_yield_pct
FROM global_markets.stocks_dividends d
JOIN latest l ON d.ticker = l.ticker
WHERE d.ex_dividend_date > today()
AND d.ex_dividend_date <= today() + 14
AND d.cash_amount > 0
AND d.distribution_type = 'recurring'
AND d.frequency > 0
AND l.mcap >= 10000000000
AND d.ticker NOT IN ('SPCX')
GROUP BY d.ticker, d.ex_dividend_date
ORDER BY any(l.mcap) DESC
LIMIT 12Di biggest name for di list na MS, wey dey go ex on Jul 31 with a $1.15 per-share payment wey dey land Aug 14 — an indicated annual yield of 2.14% for im recent price. Read di yield column well-well: e dey annualize di declared payment for im stated frequency — na snapshot arithmetic, no be promise. A big per-share number and a big yield na different things, as wetin be dividend yield show. One symbol dey filtered out from di ranked tables (di filter dey visible for di panel SQL): dem reuse im ticker for a second issuer, so records under am cover two companies, and we drop am instead of print a row wey we no fit attribute.
Which kain companies dey pay now
Dividend feed no carry sector label, so di shape of two-week window go come from wetin di records really hold: company size, how dem dey pay, and di yield wey each declared payment dey imply for di current price. Every recurring payer wey get market-cap record wey dey go ex inside fourteen days, dem group am by size band:
The exact SQL behind every number
WITH latest AS (
SELECT ticker, argMax(market_cap, date) AS mcap, argMax(price, date) AS px
FROM global_markets.stocks_ratios
WHERE date >= today() - 10
GROUP BY ticker
),
names AS (
SELECT d.ticker AS ticker,
multiIf(any(l.mcap) >= 1e11, '1 Mega cap ($100B+)',
any(l.mcap) >= 1e10, '2 Large cap ($10-100B)',
any(l.mcap) >= 2e9, '3 Mid cap ($2-10B)',
'4 Small cap (under $2B)') AS size_band,
max(d.cash_amount) AS amt,
max(d.frequency) AS freq,
any(l.px) AS px
FROM global_markets.stocks_dividends d
JOIN latest l ON d.ticker = l.ticker
WHERE d.ex_dividend_date > today()
AND d.ex_dividend_date <= today() + 14
AND d.cash_amount > 0
AND d.distribution_type = 'recurring'
AND d.frequency > 0
AND l.px > 0
AND l.mcap > 0
GROUP BY d.ticker
)
SELECT size_band,
count() AS names_going_ex,
round(quantileDeterministic(0.5)(100 * amt * freq / px, cityHash64(ticker)), 2) AS median_indicated_yield_pct,
countIf(freq = 12) AS monthly_payers,
countIf(freq = 4) AS quarterly_payers
FROM names
GROUP BY size_band
ORDER BY size_bandDi window carry 4 mega caps ($100B and up) and 43 large caps ($10B to $100B), plus 37 mid caps and 85 smaller names. Median indicated yield dey run 2.01% for di mega-cap band, 2.56% across di large caps, 2.4% for mid cap and 2.79% among di small caps. Size and yield na separate axes: calendar wey dem sort by yield go show different set of names from di one wey dem sort by company size, na why screen wey dem build on yield alone go quietly carry you down di size ladder. Cadence dey split di same way as di day-by-day table wey dey up. Di quarterly habit dey rule di top of di market, with 4 of di mega caps dey pay quarterly and 0 dey pay monthly, while di monthly crowd dey siddon further down di cap table: 13 of di small-cap names for dis window dey pay every month.
Wetin you suppose do to collect your money
For almost every case, you no need do anything. No form, no call your broker, no registration: just hold the shares when trading close for the day before the ex-date, and the cash go enter your account on the pay date, usually some weeks later. If you buy on that last day, e still count — US trades dey settle the next business day (T+1), and dem set the ex-date around that one. The only optional step na DRIP (dividend reinvestment plan), wey be broker setting wey dey turn the cash into fractional shares of the same stock.
Tax treatment na where the ex-date dey show im power. For US taxable account, dividend na qualified — wey mean dem tax am with the lower long-term capital-gains rates — only if you hold the shares pass 60 days inside the 121-day window wey start 60 days before the ex-dividend date. Buy the day before ex-date, collect the payment, sell one week later, and that test go fail: dem go tax the payment as ordinary income. REIT and plenty fund distributions na ordinary income no matter wetin happen, and account type fit change the whole picture (IRA dey sidestep am). Dis no be tax advice — but short-hold "capture" worth less after tax pass how e look.
Wetin dey really happen for price for ex-morning
Di normal talk be say stock dey open for im ex-date "dem adjust am down by di dividend." Di exchange go mark di reference price down before market open — but di opening print na dat markdown plus everi oda tin wey happen overnight. Three household payers for dia most recent ex-dates:
The exact SQL behind every number
WITH last_ex AS (
SELECT ticker,
max(ex_dividend_date) AS ex_d,
argMax(cash_amount, ex_dividend_date) AS div_amt
FROM global_markets.stocks_dividends
WHERE ticker IN ('KO', 'VZ', 'XOM')
AND cash_amount > 0
AND distribution_type = 'recurring'
AND ex_dividend_date < today()
AND ex_dividend_date >= today() - 120
GROUP BY ticker
),
daily AS (
SELECT ticker,
toDate(toTimeZone(window_start, 'America/New_York')) AS d,
argMaxIf(toFloat64(close), window_start, (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959) AS close_px,
argMinIf(toFloat64(open), window_start, (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959) AS open_px,
countIf((toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959) AS bars
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker IN ('KO', 'VZ', 'XOM')
AND window_start >= toDateTime(today() - 130)
GROUP BY ticker, d
HAVING bars > 200
),
seq AS (
SELECT ticker, d, open_px, close_px,
lagInFrame(close_px, 1) OVER (PARTITION BY ticker ORDER BY d ROWS BETWEEN 1 PRECEDING AND CURRENT ROW) AS pre_close
FROM daily
)
SELECT s.ticker AS ticker,
toString(e.ex_d) AS last_ex_date,
formatDateTime(e.ex_d, '%b %e') AS last_ex_label,
round(e.div_amt, 4) AS dividend_usd,
round(s.pre_close, 2) AS close_before_ex_usd,
round(s.open_px, 2) AS ex_morning_open_usd,
round(100 * (s.open_px - s.pre_close) / s.pre_close, 2) AS open_gap_pct,
round(100 * e.div_amt / s.pre_close, 2) AS dividend_pct_of_price
FROM seq s
JOIN last_ex e ON e.ticker = s.ticker AND e.ex_d = s.d
WHERE s.pre_close > 0
ORDER BY tickerTake Coca-Cola most recent ex-date, Jun 15: na $0.53 payment, wey worth 0.64% of di $82.6 close di evening before, against first ex-morning print of $81.08 — gap of -1.84%. Verizon own payment worth 1.68% of im $42.22 prior close; e open -1.46%. Exxon own worth 0.67%; e open 0.64%. Three payers, three different-sized gaps, none exactly di payment. Di markdown na bookkeeping adjustment to di reference price; di open na price, and prices dey move overnight for reasons wey no relate to di dividend. Dem know di payment ahead of time; dem no know di ex-morning price.
Dividend-capture trade dey work?
"Dividend capture" na di idea say you go buy just before ex-date, collect di payment, den sell once di price recover. Dat one get claim wey person fit test. Di test: 78 ex-dividend events across fifty mega-cap payers for di past six months, dem track each one from di close before im ex-date go through di ex-morning open, di ex-day close, and one, five and ten sessions after.
The exact SQL behind every number
WITH rth AS (
SELECT ticker,
toDate(toTimeZone(window_start, 'America/New_York')) AS d,
argMaxIf(toFloat64(close), window_start, (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959) AS close_px,
argMinIf(toFloat64(open), window_start, (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959) AS open_px,
countIf((toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959) AS bars
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker IN ('AAPL', 'MSFT', 'JNJ', 'KO', 'PG', 'XOM', 'CVX', 'JPM', 'HD', 'MCD',
'PEP', 'ABBV', 'MRK', 'PFE', 'VZ', 'T', 'CSCO', 'IBM', 'WMT', 'CAT',
'BAC', 'WFC', 'C', 'GS', 'MS', 'UNH', 'LLY', 'AMGN', 'BMY', 'GILD',
'TXN', 'QCOM', 'AVGO', 'ADP', 'LMT', 'RTX', 'HON', 'GE', 'MMM', 'UPS',
'LOW', 'TGT', 'COST', 'SBUX', 'NKE', 'DIS', 'CMCSA', 'DUK', 'SO', 'NEE')
AND window_start >= toDateTime(today() - 190)
GROUP BY ticker, d
HAVING bars > 200
),
seq AS (
SELECT ticker, d, open_px,
lagInFrame(close_px, 1) OVER w AS pre_close,
close_px AS ex_close,
leadInFrame(close_px, 1) OVER w AS c1,
leadInFrame(close_px, 5) OVER w AS c5,
leadInFrame(close_px, 10) OVER w AS c10
FROM rth
WINDOW w AS (PARTITION BY ticker ORDER BY d ROWS BETWEEN 1 PRECEDING AND 10 FOLLOWING)
),
ev AS (
SELECT s.ticker AS ticker, s.d AS ex_d, s.pre_close AS pre_close, s.open_px AS ex_open,
s.ex_close AS ex_close, s.c1 AS c1, s.c5 AS c5, s.c10 AS c10,
max(dv.cash_amount) AS div_amt
FROM seq s
JOIN global_markets.stocks_dividends dv ON dv.ticker = s.ticker AND dv.ex_dividend_date = s.d
WHERE dv.cash_amount > 0
AND dv.distribution_type = 'recurring'
AND s.d >= today() - 160
AND s.pre_close > 0 AND s.c1 > 0 AND s.c5 > 0 AND s.c10 > 0
GROUP BY s.ticker, s.d, s.pre_close, s.open_px, s.ex_close, s.c1, s.c5, s.c10
),
paths AS (
SELECT ticker, ex_d, pre_close, div_amt,
arrayJoin([('1 ex-day open', ex_open),
('2 ex-day close', ex_close),
('3 one session later', c1),
('4 five sessions later', c5),
('5 ten sessions later', c10)]) AS chk
FROM ev
)
SELECT chk.1 AS checkpoint,
count() AS events,
round(avg(100 * div_amt / pre_close), 2) AS avg_dividend_pct,
round(avg(100 * (chk.2 - pre_close) / pre_close), 2) AS avg_move_pct,
round(quantileDeterministic(0.5)(100 * (chk.2 - pre_close) / pre_close, cityHash64(ticker, ex_d)), 2) AS median_move_pct,
round(100 * countIf(chk.2 >= pre_close) / count(), 1) AS pct_back_above_pre_ex
FROM paths
GROUP BY checkpoint
ORDER BY checkpointDi average payment here worth 0.65% of di pre-ex share price. For di ex-morning open di average stock move -0.5% from im pre-ex close (median -0.45%), and na only 25.6% of events open at or above di prior close: di markdown dey real and e dey happen sharp-sharp. Wetin follow na di part wey di pitch dey skip. By di ex-day close di average event stand -0.69% from di starting price; one session later, -1.08%; five later, -1.24%; ten later, -0.25% — with 44.9% back at or above where dem start.
To dey wait make di price "come back" mean say you go hold through ten sessions of ordinary volatility — moves wey dey dwarf a 0.65% payment for both directions — while di short hold dey forfeit qualified-dividend tax treatment. Di dividend na transfer from di share price go your account, no be free money for tape, and di price path after dat one belong to market.
Funds and ETFs: why dem no dey for forward calendar
Income investors many times dey hold funds instead of single stocks, and di forward calendar wey dey up so no get many of dem because of one structural reason: most exchange-traded funds no dey declare ex-date far ahead like how company board dey do am — dia distributions dey enter di record tape for, or just small before, di ex-date. Wetin dem get na steady rhythm, wey dey enough to plan around. Thirteen income funds wey many people hold, with dia last ex-date, di usual gap between ex-dates, and di date wey dat rhythm dey suggest next:
The exact SQL behind every number
WITH hist AS (
SELECT ticker, ex_dividend_date, cash_amount, frequency,
dateDiff('day', lagInFrame(ex_dividend_date) OVER (PARTITION BY ticker ORDER BY ex_dividend_date), ex_dividend_date) AS gap_days
FROM global_markets.stocks_dividends
WHERE ticker IN ('SCHD', 'VYM', 'VIG', 'DVY', 'SPYD', 'JEPI', 'JEPQ', 'QYLD', 'SPHD', 'NOBL', 'DGRO', 'HDV', 'SPY')
AND cash_amount > 0
AND ex_dividend_date >= today() - 800
)
SELECT ticker,
any(frequency) AS payments_per_year,
toString(max(ex_dividend_date)) AS last_ex_date,
formatDateTime(max(ex_dividend_date), '%b %e') AS last_ex_label,
round(argMax(cash_amount, ex_dividend_date), 4) AS last_per_share_usd,
round(quantileDeterministicIf(0.5)(gap_days, cityHash64(ticker, ex_dividend_date), gap_days BETWEEN 5 AND 200)) AS typical_gap_days,
toString(max(ex_dividend_date) + toIntervalDay(round(quantileDeterministicIf(0.5)(gap_days, cityHash64(ticker, ex_dividend_date), gap_days BETWEEN 5 AND 200)))) AS implied_next_ex,
formatDateTime(max(ex_dividend_date) + toIntervalDay(round(quantileDeterministicIf(0.5)(gap_days, cityHash64(ticker, ex_dividend_date), gap_days BETWEEN 5 AND 200))), '%b %e') AS implied_next_label
FROM hist
GROUP BY ticker
HAVING countIf(gap_days BETWEEN 5 AND 200) > 0
ORDER BY implied_next_ex, tickerDi one wey dey soonest for di group na JEPI, last ex na Jul 1 at $0.3872 per share on a 30-day rhythm — wey dey put im next ex-date near Jul 31. Di one wey dey furthest out, HDV, dey run a 91-day rhythm wey dey point at Oct 14. Di payments_per_year column dey split di families: names wey dey pay twelve times a year dey go ex every four weeks or so; funds wey dey pay four times a year dey do am once a quarter, for di quarter-end months. Treat di implied date as estimate — na only di sponsor notice be final.
Dis month heavy or e light?
Ex-dividend dates no dey spread equal across di year — three years of records, we average by calendar month:
The exact SQL behind every number
SELECT multiIf(toMonth(ex_dividend_date) = 1, '01 Jan', toMonth(ex_dividend_date) = 2, '02 Feb', toMonth(ex_dividend_date) = 3, '03 Mar',
toMonth(ex_dividend_date) = 4, '04 Apr', toMonth(ex_dividend_date) = 5, '05 May', toMonth(ex_dividend_date) = 6, '06 Jun',
toMonth(ex_dividend_date) = 7, '07 Jul', toMonth(ex_dividend_date) = 8, '08 Aug', toMonth(ex_dividend_date) = 9, '09 Sep',
toMonth(ex_dividend_date) = 10, '10 Oct', toMonth(ex_dividend_date) = 11, '11 Nov', '12 Dec') AS month,
round(count() / 3.0) AS ex_dates_per_year,
round(countIf(frequency = 4) / 3.0) AS quarterly_payers,
round(countIf(frequency = 12) / 3.0) AS monthly_payers
FROM global_markets.stocks_dividends
WHERE ex_dividend_date >= toStartOfMonth(today()) - INTERVAL 36 MONTH
AND ex_dividend_date < toStartOfMonth(today())
AND cash_amount > 0
GROUP BY month
ORDER BY monthDi quarter-end months carry di load: March dey average 5605 ex-dates, June 5792, September 4973 and December 6380, each one hold pass two thousand quarterly payers (2640 for June alone). Di first month of each quarter dey run light — January dey average 2043 and July 2683, half of wetin quarter-end month get or even less. Di floor under di quiet months na di monthly crowd: 1470 of July average na monthly payers, dem ignore di quarterly calendar entirely. Short list dis week na feature of di calendar, no be verdict on di market.
Why calendars no gree — and how to read dis one
If you compare dis page with broker calendar, you go see small differences. Every calendar dey built from wetin companies declare, and sources dey different for how fast dem dey collect announcements, whether dem dey show amended dates, and whether dem dey count funds, trusts and foreign listings together with operating companies (the day counts wey dey up include all of dem; na only the ranked tables dey apply market-cap floor). When two calendars no gree, the company declaration press release na im be the tiebreaker. The depth receipt, computed live:
The exact SQL behind every number
SELECT countIf(ex_dividend_date > today()) AS future_ex_dates_declared,
countIf(ex_dividend_date > today() AND ex_dividend_date <= today() + 7) AS in_the_next_7_days,
countIf(ex_dividend_date > today() AND ticker IN ('SCHD', 'VYM', 'VIG', 'DVY', 'SPYD', 'JEPI', 'JEPQ', 'QYLD', 'SPHD', 'NOBL', 'DGRO', 'HDV', 'SPY')) AS fund_records_declared_ahead,
toString(max(ex_dividend_date)) AS furthest_declared_date,
formatDateTime(max(ex_dividend_date), '%b %e, %Y') AS furthest_declared_label
FROM global_markets.stocks_dividends
WHERE ex_dividend_date > today() - 1
AND cash_amount > 03379 future ex-dividend dates dey on file right now, 364 of dem inside one week, with declarations wey dey reach out to Nov 12, 2027. Across the thirteen funds wey dey up, forward-declared ex-dates number 0 — the structural gap wey dey make cadence, no be declarations, be the way to anticipate a fund next ex-date. Boards dey declare one meeting at a time, so the far calendar dey fill in as announcements land: treat the near dates as reliable and the far ones as provisional.
Ex-dividend calendar FAQ
How I fit see ex-dividend dates wey dey come?
Companies dey declare each dividend with im ex-dividend, record and pay dates, and those declarations dey enter market data feeds. This page dey compute the calendar straight from those records — 3379 future dates wey dey for file — and e dey rebuild every week.
If I buy stock on im ex-dividend date, I go get the dividend?
No. The ex-dividend date na the first day the stock dey trade without the payment join body. To collect am you gats own the stock at the close of the trading day before the ex-date; buy on the ex-date and the seller go keep the payment.
I need to do anything to collect dividend?
No. Hold the shares through the close before the ex-date and the cash go enter your brokerage account on the pay date automatically — no form, no claim, no call. The only optional step na DRIP, the broker setting wey dey reinvest the payment into more shares.
E dey work if I buy stock just before the ex-dividend date to catch the payment?
The data dey argue against am. Across 78 mega-cap ex-dividend events for the past six months, the average stock open move -0.5% from im pre-ex close against an average payment wey worth 0.65% of the price, and ten sessions later only 44.9% dey back at or above where dem start. The short hold still fail the qualified-dividend holding-period test.
Dem dey tax dividends differently based on when I buy?
Yes, for US taxable account. A dividend na qualified — dem tax am at long-term capital-gains rates — only if you hold the shares pass 60 days inside the 121-day window wey start 60 days before the ex-dividend date. A buy-just-before, sell-just-after trade go miss that window and dem go tax the payment as ordinary income. REIT and many fund distributions na ordinary income regardless. Na mechanic, no be tax advice.
Dividend profile by ticker
Every large-cap wey dey pay dividend for dis calendar get im own measured dividend profile — di current yield wey dem compute from di latest close, di full payment history as e dey for tape, di growth streak, and how im ex-dividend mornings don really trade:
AAPL, ABBV, ABT, ACN, ADP, AMGN, AVGO, AXP, BAC, BLK, BMY, C, CAT, CL, CMCSA, COP, COST, CRM, CSCO, CVX, DE, DHR, DUK, GE, GILD, GIS, GOOGL, GS, HD, HON, IBM, JNJ, JPM, KMB, KO, LIN, LLY, LMT, LOW, MA, MCD, MDLZ, MDT, META, MMM, MO, MRK, MS, MSFT, NEE, NKE, O, ORCL, PEP, PFE, PG, PM, QCOM, RTX, SBUX, SO, SPGI, T, TGT, TMO, TXN, UNH, UNP, USB, V, VZ, WFC, WMT, XOM.
Every table wey dey up so na stored, versioned query over declared dividend records and real minute bars — expand di SQL under any panel, or screen di calendar yourself for di Strasmore terminal.