SPY vs VOO vs SPLG: What Actually Differs
SPY vs VOO vs SPLG all track the S&P 500. Compare fees, the UIT cash drag, spreads and options access, with a decision rule by holding period and order size.
SPY vs VOO vs SPLG is a question about plumbing rather than about portfolios. All three funds track the S&P 500 and hold the same roughly 500 companies at the same market cap weights. What separates them is the legal wrapper each one sits inside and what it costs to own or to trade it. The panels below measure each piece.
Do SPY, VOO and SPLG hold the same index?
They do, and the tape shows it. The panel takes each fund's month by month price change over the trailing year, then adds a spread_pct column: the distance between the strongest and the weakest of the three inside the same month.
| month | spy_pct | voo_pct | splg_pct | spread_pct |
|---|---|---|---|---|
| 2025-10 | 2.85 | 2.84 | 2.55 | 0.3 |
| 2025-11 | -0.33 | -0.32 | 0 | 0.01 |
| 2025-12 | 0.46 | 0.47 | 0 | 0.02 |
| 2026-01 | 0.91 | 0.89 | 0 | 0.03 |
| 2026-02 | -0.52 | -0.5 | 0 | 0.03 |
| 2026-03 | -4.18 | -4.27 | 0 | 0.09 |
| 2026-04 | 9.9 | 9.9 | 0 | 0 |
| 2026-05 | 4.88 | 4.89 | 0 | 0 |
| 2026-06 | -1.14 | -1.11 | 0 | 0.02 |
| 2026-07 | 0.27 | 0.28 | 0 | 0.01 |
| 2026-08 | 2.35 | 2.33 | 0 | 0.02 |
The exact SQL behind every number
WITH monthly AS
(
SELECT
ticker,
toStartOfMonth(date) AS m,
argMin(toFloat64(open), date) AS first_open,
argMax(toFloat64(close), date) AS last_close
FROM global_markets.stocks_daily_aggs
WHERE ticker IN ('SPY', 'VOO', 'SPLG')
AND date >= '2025-10-01'
AND date < '2026-09-01'
GROUP BY ticker, m
),
pct AS
(
SELECT
ticker,
m,
(last_close / first_open - 1) * 100 AS chg
FROM monthly
)
SELECT
formatDateTime(m, '%Y-%m') AS month,
round(maxIf(chg, ticker = 'SPY'), 2) AS spy_pct,
round(maxIf(chg, ticker = 'VOO'), 2) AS voo_pct,
round(maxIf(chg, ticker = 'SPLG'), 2) AS splg_pct,
round(max(chg) - min(chg), 2) AS spread_pct
FROM pct
GROUP BY m
ORDER BY mAcross the 11 months in view the three funds draw one line. In 2025-10 their price changes spanned 0.3 percentage points, and in 2026-08 the span was 0.02. Residues that small trace to distribution timing and the daily fee accrual, not to different holdings. A reader choosing between these three is choosing a wrapper, not an exposure. For what the underlying basket itself pays, see the S&P 500 dividend yield.
Why SPY's 1993 trust structure still shows up in the data
SPY listed in January 1993 as a unit investment trust, a UIT: an older fund wrapper that holds a fixed basket and leaves the sponsor no discretion to reinvest. Dividends the trust collects from the underlying companies sit in cash until the quarterly distribution goes out. VOO and SPLG are open end funds, the structure almost every modern ETF uses, and they can put dividend cash back into the market between payment dates. That gap is small and permanent, and SPY's UIT cash drag works through how to measure it.
The distribution calendar is where the cash lag becomes visible. The panel measures the days between each ex dividend date, the date from which a buyer no longer receives the upcoming payment, and the day the cash actually lands.
| ticker | distributions | avg_days_ex_to_pay | longest_days_ex_to_pay | shortest_days_ex_to_pay |
|---|---|---|---|---|
| SPY | 13 | 42.5 | 47 | 40 |
| VOO | 12 | 3.8 | 6 | 2 |
| SPLG | 9 | 3 | 4 | 2 |
The exact SQL behind every number
WITH payouts AS
(
SELECT
ticker,
id,
any(ex_dividend_date) AS ex_date,
any(pay_date) AS paid_on
FROM global_markets.stocks_dividends
WHERE ticker IN ('SPY', 'VOO', 'SPLG')
AND ex_dividend_date >= '2023-09-01'
AND ex_dividend_date < '2026-09-20'
AND pay_date > ex_dividend_date
GROUP BY ticker, id
)
SELECT
ticker,
count() AS distributions,
round(avg(dateDiff('day', ex_date, paid_on)), 1) AS avg_days_ex_to_pay,
max(dateDiff('day', ex_date, paid_on)) AS longest_days_ex_to_pay,
min(dateDiff('day', ex_date, paid_on)) AS shortest_days_ex_to_pay
FROM payouts
GROUP BY ticker
ORDER BY avg_days_ex_to_pay DESCSPY carries the longest wait of the three: 42.5 days on average across 13 distributions, stretching to 47 days at the extreme. SPLG averages 3 days. The calendar lag is one visible edge of the effect. The fuller version runs all quarter long: dividends arrive from hundreds of companies on hundreds of separate dates, and inside a trust every one of them waits.
What are the expense ratios for SPY, VOO and SPLG?
Published expense ratios as of September 2026: SPY 0.0945% a year, VOO 0.03%, SPLG 0.02%. Fees get cut, and this particular league table has been rewritten several times over the past decade, so check the current prospectus figure before leaning on the exact decimal. The structural facts around it are the durable part of the comparison.
Put the fee in dollars. On a $50,000 position held for one year, 0.0945% works out to $47.25 and 0.02% to $10.00: a difference of about $37, close to $3 a month. A fee is a rate. It accrues daily for as long as the shares are held, so it scales with time in the position.
SPY vs VOO vs SPLG: which is cheaper to trade?
Trading costs work the opposite way: a fixed toll per trip, paid whether the position lasts ten minutes or ten years. This is the half of the comparison that cheapest-fee articles tend to skip, and it is where SPY's size does the work.
| ticker | avg_daily_volume_millions | avg_dollar_volume_billions | avg_trade_value_usd_thousands |
|---|---|---|---|
| SPY | 41.5 | 31.83 | 57.6 |
| VOO | 7.3 | 5.11 | 16.2 |
The exact SQL behind every number
SELECT
ticker,
round(avg(volume) / 1e6, 1) AS avg_daily_volume_millions,
round(avg(toFloat64(vwap) * volume) / 1e9, 2) AS avg_dollar_volume_billions,
round(avg(toFloat64(vwap) * volume) / avg(transactions) / 1000, 1) AS avg_trade_value_usd_thousands
FROM global_markets.stocks_daily_aggs
WHERE ticker IN ('SPY', 'VOO', 'SPLG')
AND date >= '2026-08-03'
AND date < '2026-09-19'
GROUP BY ticker
ORDER BY avg_dollar_volume_billions DESCDaily records came back for 2 of the three inside that window. SPY turned over roughly $31.83 billion a day in it, on 41.5 million shares. VOO traded $5.11 billion a day over the same stretch. Trade size scales with it: the average print in SPY was worth about $57.6 thousand, against $16.2 thousand in VOO.
Volume is not itself the cost. The cost is the spread. Every quote carries a bid, the best price a buyer is advertising, and an ask, the best price a seller is advertising, and a market order crosses the gap between the two. The next panel samples every quote update these funds posted during one midday hour on Tuesday, September 15, 2026.
| ticker | avg_mid_price | avg_spread_cents | avg_spread_bps |
|---|---|---|---|
| SPY | 757.19 | 2.1 | 0.28 |
| VOO | 696.02 | 2.96 | 0.42 |
The exact SQL behind every number
SELECT
ticker,
round(avg((toFloat64(ask_price) + toFloat64(bid_price)) / 2), 2) AS avg_mid_price,
round(avg(toFloat64(ask_price) - toFloat64(bid_price)) * 100, 2) AS avg_spread_cents,
round(avg((toFloat64(ask_price) - toFloat64(bid_price))
/ ((toFloat64(ask_price) + toFloat64(bid_price)) / 2)) * 10000, 2) AS avg_spread_bps
FROM global_markets.cache_stocks_quotes
WHERE ticker IN ('SPY', 'VOO', 'SPLG')
AND sip_timestamp >= toDateTime('2026-09-15 15:00:00', 'UTC')
AND sip_timestamp < toDateTime('2026-09-15 16:00:00', 'UTC')
AND bid_price > 0
AND ask_price > bid_price
GROUP BY ticker
ORDER BY avg_spread_bpsQuotes came back for 2 of the three inside that hour. SPY quoted the tighter percentage spread of the pair at 0.28 basis points, one basis point being one hundredth of a percent, on an average mid price of $757.19. VOO quoted 0.42 basis points on a mid of $696.02. Measured in cents the two sit close together, 2.1 against 2.96, neither more than a few cents wide. The percentage column is the one that travels between funds: it is the cents figure divided by the share price, which is what turns a quoted gap into a cost per dollar traded. Two funds tracking one index at different share prices can post the same gap in cents and still charge different fractions of the money changing hands.
Now line the two costs up. A round trip pays the spread twice, once entering and once exiting. The wider of the two above costs 0.42 basis points each way, so one in and out clears more than a month of the fee difference measured earlier. Hold for a decade and the fee is the line that matters. Turn the position over weekly and the spread is.
Order size adds a second dimension. A small order takes the price on the screen. A larger one works through the resting quotes behind it, and a fund's market price can drift slightly from the value of its holdings while that happens. ETF premium and discount to NAV measures that gap, and ETF creation and redemption explains the machinery that keeps it small.
Do all three funds have an options market?
Listed options are the one difference here that is not a matter of degree in cost. The panel counts every option contract with recorded volume against each of the three as an underlying over the first half of September 2026.
| ticker | distinct_contracts | option_volume_millions |
|---|---|---|
| SPY | 11808 | 43.7 |
| VOO | 1485 | 0.1 |
| SPLG | 0 | 0 |
The exact SQL behind every number
SELECT
f.fund AS ticker,
toUInt32(ifNull(o.contracts, 0)) AS distinct_contracts,
round(ifNull(o.opt_volume, 0) / 1e6, 1) AS option_volume_millions
FROM
(
SELECT arrayJoin(['SPY', 'VOO', 'SPLG']) AS fund
) AS f
LEFT JOIN
(
SELECT
underlying_symbol,
countDistinct(ticker) AS contracts,
sum(volume) AS opt_volume
FROM global_markets.options_greeks
WHERE underlying_symbol IN ('SPY', 'VOO', 'SPLG')
AND date >= '2026-09-01'
AND date < '2026-09-19'
AND volume > 0
GROUP BY underlying_symbol
) AS o ON o.underlying_symbol = f.fund
ORDER BY option_volume_millions DESCSPY shows 11808 distinct contracts with volume and 43.7 million contracts traded across the window. VOO shows 1485 contracts and 0.1 million contracts over the same weeks. SPLG returns zero on both counts. The ranking is the point rather than the decimals: one of the three carries a contract market that trades in size through the session, one carries a thin one, and one carries none at all. For a reader who wants to write a covered call against the position or hold a put beside it, the depth behind the quote counts as much as the contract existing. Index options on the S&P 500 itself are a separate market with different contract sizes and settlement, set side by side in SPX versus SPY options.
A decision rule by holding period and order size
None of this crowns a winner. It ranks cost lines, and which line dominates falls out of how long the position is held and how large the order is.
- Held for years and traded once: the annual fee is the dominant line, and the trust structure's dividend cash lag rides on top of it.
- Turned over weekly or intraday: the round trip spread repeats on every trip, while the fee accrues only while the shares are held.
- Sized far above what the screen shows: dollar depth and the creation and redemption machinery behind it govern the fill.
- Paired with options: the contract market behind each fund differs in both existence and depth, and the panel above ranks the three.
FAQ
Is VOO better than SPY?
They track the same index, so the comparison comes down to which cost line applies. VOO's published fee is lower and its open end structure can reinvest dividend cash between distributions. SPY carries far more daily volume and the deepest listed options market of the three.
What is the difference between SPY and SPLG?
Same index and the same weights, a different wrapper and a very different price per share. SPLG is an open end fund with a lower published fee, and its share price is a fraction of SPY's, which makes small dollar amounts easier to fill in whole shares. SPY is the older and far larger of the two, and it carries the deeper contract market for anyone pairing the position with options.
Why is SPY more expensive than VOO and SPLG?
SPY launched in 1993 as a unit investment trust and its expense ratio has stayed near the figure quoted above, while the open end funds that listed later arrived at lower fees and kept cutting. The trust structure also leaves collected dividends in cash until the quarterly payment date.
Is the options market the same for all three?
No. Over the September 2026 window above, SPY showed 11808 distinct contracts with recorded volume, VOO showed 1485, and SPLG showed none at all. A contract market that exists and one that trades all day are different things for anyone pricing a hedge.
Data notes and sampling windows
The expense ratios in this post are publisher-stated figures as of September 2026 and are not computed from any panel above. Every other number comes from a query printed beneath its panel. The turnover panel covers August 3 to September 18, 2026. The spread panel samples a single midday hour, 15:00 to 16:00 UTC on Tuesday, September 15, 2026, which is 11 a.m. to noon in New York, and averages across every quote update where the ask sat above the bid. The turnover and spread panels each print one row for every fund that returned records inside their window, so a fund with no records for that window has no row. The distribution panel deduplicates by dividend id before measuring the ex date to pay date interval. The most recent one or two sessions can still be filling in, so each window stops short of today.
Every panel here ships with the SQL that produced it, so the counting is open to inspection. To run the same spread or distribution comparison across other funds, ask it in plain English on the Strasmore terminal.