SPY Dividend Yield: Why It Trails the Index
SPY's dividend yield sits a few basis points under VOO and IVV. Here is the unit investment trust mechanism behind the gap, measured on live fund data.
SPY's dividend yield sits a few basis points below VOO's and IVV's, and the gap lives in the fund's legal wrapper rather than in anything its managers decide. SPY is a unit investment trust, an older fund structure that cannot reinvest the dividends it collects from the 500 companies it holds. Those dividends wait in a non-interest-bearing account until the next scheduled payout, and that waiting cash is what the term "cash drag" describes.
How far does SPY's dividend yield trail VOO and IVV?
Start with what is measurable. The three funds below all track the S&P 500, and all three hand their collected dividends to shareholders once a quarter. Trailing yield here is the sum of the last four distributions per share divided by the most recent closing price, the same arithmetic laid out in what dividend yield measures.
The exact SQL behind every number
WITH
divs AS
(
SELECT
ticker,
ex_dividend_date,
max(toFloat64(cash_amount)) AS cash_amount
FROM global_markets.stocks_dividends
WHERE ticker IN ('SPY', 'VOO', 'IVV')
AND ex_dividend_date >= today() - 365
AND ex_dividend_date < today()
GROUP BY ticker, ex_dividend_date
),
ttm AS
(
SELECT
ticker,
sum(cash_amount) AS ttm_dividend
FROM divs
GROUP BY ticker
HAVING count() = 4
),
px AS
(
SELECT
ticker,
toFloat64(argMax(close, window_start)) AS last_close
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker IN ('SPY', 'VOO', 'IVV')
AND window_start >= today() - 15
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
),
fund_yield AS
(
SELECT
ttm.ticker AS ticker,
ttm.ttm_dividend / px.last_close * 100 AS yield_pct
FROM ttm
INNER JOIN px ON px.ticker = ttm.ticker
),
spy_yield AS
(
SELECT max(yield_pct) AS spy_pct
FROM fund_yield
WHERE ticker = 'SPY'
)
SELECT
fund_yield.ticker AS ticker,
round(fund_yield.yield_pct, 3) AS trailing_yield_pct,
round((fund_yield.yield_pct - spy_yield.spy_pct) * 100, 1) AS yield_spread_vs_spy_bps
FROM fund_yield
CROSS JOIN spy_yield
ORDER BY tickerOver the trailing four distributions SPY yielded 0.974%, against 1.034% for VOO and 1.055% for IVV. Both open-end funds printed a higher trailing yield than SPY: VOO by 6 basis points and IVV by 8.1. A basis point is one hundredth of a percentage point, so the entire spread on that chart is small.
Two mechanics stand between the index's dividends and a fund's payout. The first is fees. Expenses come out of the income a fund collects, and what reaches shareholders is that income net of the expense ratio. As of mid-2026 SPY charges about 0.09% a year against about 0.03% for VOO and IVV, a fee gap of roughly 6 basis points, which is the same order of magnitude as the yield gaps above. The index's gross yield, before any fund's fees, is the figure tracked in the S&P 500 dividend yield. The second mechanic is securities lending, which the next section covers.
What is a unit investment trust?
A unit investment trust, or UIT, is a fund registered under the Investment Company Act of 1940 that holds a fixed portfolio with no ongoing investment discretion. SPY launched in January 1993 in that form and has kept it. Four things follow from the wrapper:
- The trust holds the index constituents at index weight. It has no room to sample the index, substitute a similar name, or hold futures in place of shares.
- Dividends received from the underlying companies cannot be reinvested into more shares. They accumulate as cash.
- That cash sits in a non-interest-bearing account until the scheduled distribution date. It earns nothing while it waits.
- The trust cannot lend its shares to short sellers. Securities lending revenue, which open-end funds collect and return in large part to the fund, is unavailable to it.
VOO and IVV are organized as open-end investment companies. An open-end fund can put an incoming dividend back into the market the day it arrives, hold index futures as a cash stand-in, and run a lending program whose revenue lands inside the fund.
None of this has to be taken on trust. Each fund's prospectus and summary prospectus name the structure in the opening pages, and both documents are posted on the issuer's website and filed with the SEC. Search the fund's legal name on EDGAR, open the prospectus, and read the first page.
How long does the collected cash actually sit?
The visible end of the holding window is the gap between two dates every fund publishes. The ex-dividend date is the day a new buyer no longer receives the upcoming payment. The pay date is the day the cash lands in accounts.
The exact SQL behind every number
WITH divs AS
(
SELECT
ticker,
ex_dividend_date,
any(pay_date) AS payment_date
FROM global_markets.stocks_dividends
WHERE ticker IN ('SPY', 'VOO', 'IVV')
AND ex_dividend_date >= today() - 1095
AND ex_dividend_date < today()
AND pay_date > ex_dividend_date
GROUP BY ticker, ex_dividend_date
)
SELECT
ticker,
round(avg(dateDiff('day', ex_dividend_date, payment_date)), 1) AS avg_days_cash_held,
max(dateDiff('day', ex_dividend_date, payment_date)) AS longest_wait_days,
count() AS payout_count
FROM divs
GROUP BY ticker
ORDER BY tickerAcross three years of distributions, SPY took 42.6 days on average between ex-date and pay date, over 12 payouts, with a longest wait of 47 days. VOO turned the same cash around in 3.8 days on average, and IVV in 4.3.
That gap is only the tail of the window. The 500 companies in the index pay on their own calendars throughout the quarter. A dividend arriving in the first week of a quarter sits in the trust's account for the rest of that quarter, and then for the pay lag on top of it. The size of the pile is easier to read one distribution at a time.
The exact SQL behind every number
WITH
divs AS
(
SELECT
ex_dividend_date AS ex_date,
any(pay_date) AS pay_date,
max(toFloat64(cash_amount)) AS cash_amount
FROM global_markets.stocks_dividends
WHERE ticker = 'SPY'
AND ex_dividend_date >= today() - 1095
AND ex_dividend_date < today()
GROUP BY ex_dividend_date
),
px AS
(
SELECT
toDate(toTimeZone(window_start, 'America/New_York')) AS d,
toFloat64(argMax(close, window_start)) AS close_px
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'SPY'
AND window_start >= today() - 1105
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 d
)
SELECT
toString(divs.ex_date) AS ex_date,
formatDateTime(divs.ex_date, '%b %e, %Y') AS ex_date_label,
formatDateTime(divs.pay_date, '%b %e, %Y') AS pay_date_label,
round(divs.cash_amount, 4) AS cash_amount,
round(divs.cash_amount / px.close_px * 100, 3) AS pct_of_price
FROM divs
INNER JOIN px ON px.d = divs.ex_date
ORDER BY ex_dateThe oldest payment on that panel, ex-date Sep 15, 2023, came to $1.5832 a share, or 0.357% of the fund's price that day. The most recent, ex-date Jun 18, 2026, paid $1.9035 a share, 0.255% of the price, and reached shareholders on Jul 31, 2026. Across all 12 distributions on the panel, each quarterly payout is a fraction of one percent of the fund. That is the scale of the idle balance in question.
How big is the cash drag, in basis points?
Now the arithmetic, with round numbers picked for the sum rather than measured or forecast. Assume a fund collects 1.2% of its assets in dividends over a year and reinvests none of it. Assume the market gains 8% over the same year. The cash trickles in across each quarter and leaves on the pay date. The average dollar of it sits idle for roughly half a quarter plus the pay lag, call it 85 days, or 0.23 of a year. The average uninvested balance is then 1.2% times 0.23, about 0.28% of assets. Multiply that idle balance by the 8% the market gained: the return given up works out at about 0.02%, a touch over 2 basis points for the year.
That is the shape of the effect. It is measured in single-digit basis points a year, and it turns up in total return rather than in the size of the distribution. Its sign follows the market. In a year the index falls, the idle cash sits out the fall, and the same arithmetic runs in the holder's favor by a similar amount. An open-end fund gets no free ride either: it carries working cash of its own, and equitizing that cash with futures has costs attached.
Yield and total return measure different things
A trailing yield is the last four distributions divided by today's price. It says nothing about what the price did over those four quarters, and the two figures work on very different scales.
The exact SQL behind every number
WITH
px AS
(
SELECT
toDate(toTimeZone(window_start, 'America/New_York')) AS d,
toFloat64(argMax(close, window_start)) AS close_px
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'SPY'
AND window_start >= today() - 2950
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 d
),
by_year AS
(
SELECT
toYear(d) AS year,
argMin(close_px, d) AS first_close,
argMax(close_px, d) AS last_close
FROM px
GROUP BY year
),
divs AS
(
SELECT
toYear(ex_date) AS year,
sum(cash_amount) AS year_dividends
FROM
(
SELECT
ex_dividend_date AS ex_date,
max(toFloat64(cash_amount)) AS cash_amount
FROM global_markets.stocks_dividends
WHERE ticker = 'SPY'
AND ex_dividend_date >= today() - 2950
GROUP BY ex_dividend_date
)
GROUP BY year
)
SELECT
by_year.year AS year,
round((by_year.last_close / by_year.first_close - 1) * 100, 2) AS price_return_pct,
round(divs.year_dividends / by_year.first_close * 100, 2) AS dividend_return_pct
FROM by_year
INNER JOIN divs ON divs.year = by_year.year
WHERE by_year.year > toYear(today() - 2950)
AND by_year.year < toYear(today())
ORDER BY yearRead the two series against each other. In 2019 SPY's price change from the first session's close to the last measured 28.62%, while the dividends it distributed over that year came to 2.25% of the price at the start of it. In 2025 the same pair measured 16.64% and 1.25%. Adding the two together, roughly, is how you get to total return, and the exact definition sits in price return versus total return. A few basis points of yield difference between two S&P 500 trackers is a small term inside that sum. Funds engineered for a bigger payout behave differently again: see covered call ETFs explained, and for a dividend-focused pairing, SCHD versus VOO on dividend yield.
FAQ
Why is SPY's dividend yield lower than VOO's?
Two structural items sit between the index's dividends and the shareholder's payout. SPY's expense ratio is higher, and fees come out of collected income before anything is distributed. SPY is also a unit investment trust, which cannot earn securities lending revenue or reinvest dividends while they wait. Over the trailing four distributions the measured gap was 6 basis points.
Is SPY a unit investment trust?
Yes. The SPDR S&P 500 ETF Trust has been organized as a unit investment trust since it launched in January 1993. The structure is stated in the fund's prospectus, filed with the SEC and posted by the issuer.
Does SPY reinvest the dividends it collects?
No. A unit investment trust cannot reinvest dividends received from its holdings. The cash accumulates in a non-interest-bearing account and goes out on the scheduled distribution date, on average 42.6 days after the ex-dividend date over the last three years.
How much does cash drag cost an S&P 500 index fund?
On round assumptions of a 1.2% dividend rate and an 8% market gain, an uninvested quarterly dividend balance gives up roughly 2 basis points of return over a year, or 0.02%. The figure is small, and in a down year the same idle cash works in the opposite direction.
When does SPY pay its dividend?
SPY distributes quarterly. Its most recent ex-dividend date on the panel above was Jun 18, 2026, with the cash paid on Jul 31, 2026, a wait of about six weeks.
Every number on this page comes from the query printed underneath it. To compare payout timing across other funds, ask the question in plain English on the Strasmore terminal.