How Often Do ETF Holdings Change?
Daily ETF holdings files republish every day. We measured index, active, and leveraged funds to see how often positions actually change.

Under the SEC's ETF Rule, a transparent exchange-traded fund posts a full holdings file on its own website every business day. That is a fact about publishing, not about trading. We pulled two real daily holdings snapshots, about 25 days apart, for 10 well-known funds (four plain index trackers, three active funds, three leveraged or inverse funds) and diffed them position by position. The file updates daily for all of them. The portfolio does not.
The spread is bigger than "index funds barely trade, active funds trade more." Two S&P 500 trackers in this sample landed at opposite ends of the scale, and the reason has nothing to do with stock picking. Below is the measured cadence across all 10 funds, the two very different signals hiding inside one percentage, and how to pin a specific day's snapshot via the API without silently reading a stale one.
A new file every day does not mean a new portfolio every day
Rule 6c-11 requires a transparent ETF to disclose its full portfolio on a public website before the start of trading each business day. Full mechanics, the six file formats issuers use, and current coverage are covered in our daily ETF holdings API walkthrough, read that first if you need the "how do we parse this" side. This post asks a narrower question: given that a new file shows up every day, how often is what is in that file actually different from the day before?
The naive answer is "daily," because the file is daily. The real answer depends entirely on what kind of fund you are looking at, and even then it depends on which of two different things you mean by "changed." The ETF Rule adopting release mandates the file. It says nothing about how much of the file has to be different from yesterday's, and the answer turns out to be: sometimes almost nothing, sometimes almost everything, for reasons that have little to do with a portfolio manager deciding to buy or sell.
How much of the book actually moves, across 10 real funds
Methodology: for each fund we called /api/fund/holdings/daily twice, once pinned to 2026-08-10 and once for the latest file on record (early September 2026), and matched every position by CUSIP (falling back to ticker, then name). A retained position counts asresized when its share or notional balance moved 1% or more between the two snapshots,unchanged otherwise. 2026-08-10 turned out to be the actual start of this data source's retention window, not just our chosen start date: every fund returned an empty result for dates before it, so the 24 to 26 day windows below are the full history currently available, not an arbitrary slice.
The plain index trackers mostly behaved as expected: SPY (1.6%), QQQ (2.8%), and DIA (3.2%) each had well under 5% of their holdings differ at all over 24-plus days. Then there is IVV, the iShares S&P 500 tracker, the same index as SPY, over almost the same window: 99.6% different. The active funds landed all over the map, JEPI at 66.7%, ARKK at 96%, and JEPQ at 96.7%. The leveraged and inverse funds were the most consistent group of all, every one of TQQQ, SOXL, and SQQQ landed between 88.2% and 98.1%.
A single blended percentage cannot explain why two funds tracking the identical index differ by 98.0 points, or why a fund built to stay 3x leveraged looks, by this measure, almost as "changed" as an active stock picker. That number is actually two different signals added together.
Two different signals hiding in one number
Split every diff into three buckets instead of one: a ticker that is new to the fund or dropped entirely (membership change, the closest thing to "the portfolio manager made a decision"), a ticker the fund already held whose balance simply got bigger or smaller (resized), and a ticker whose balance did not move at all (unchanged). The blended percentage in the chart above is just membership change plus resized.
Membership change is genuinely rare almost everywhere, though counting it exactly takes care. SPY shows 1 added and 1 removed (0.4% of 506 positions); IVV shows 2 and 2 (0.8% of 510), despite one fund reading 99.6% "changed" overall. Both trace to the same real event: Reddit (RDDT) joined the S&P 500 on August 18, 2026, filling the seat vacated by AvalonBay Communities (AVB), which completed its all-stock merger of equals with Equity Residential (EQR) the day before under a new name, Vivmark Residential (VMRK) (CNBC, AvalonBay investor relations). SPY's own raw file carries a CUSIP on every row, and Equity Residential's CUSIP survived its rename unchanged, so matching by CUSIP correctly reads the EQR-to-VMRK line as one continuing position (its balance jumped as AvalonBay's converted shares folded in) plus AVB's own holding disappearing and RDDT's appearing: 1 added, 1 removed. IVV's raw file carries no CUSIP field at all, on any row, so the same rename gets matched by ticker instead, and a ticker that disappears reads identically to a real removal: EQR out, VMRK in, alongside the same AVB-out, RDDT-in swap, 2 added, 2 removed. Same real-world event, same index, same two days, different counts, because the two issuers publish different identifier fields. That is worth knowing before trusting any single fund's added or removed count as ground truth for what an index itself did.
So why is IVV 98.8% resized against SPY's 1.2%, tracking the same benchmark over almost the same days? The individual holdings tell the story directly: IVV's five largest positions, NVIDIA, Apple, Microsoft, and Amazon among them, each show an identical share-count reduction of 3.164% between the two snapshots. A move that precise and that uniform across hundreds of unrelated names is not a portfolio manager selling conviction, it is the mechanical signature of a large net redemption scaling every position down by the same fraction. SPY, QQQ, and DIA simply did not see a flow event that large in the same window. The lesson is not "index funds have low turnover," it is that turnover and fund flows are two separate things a single blended number cannot tell apart, and you have to check both before trusting either.
ARKK is the cleanest example of real stock picking in the sample: it added Rocket Lab (RKLB) and exited Deere & Co (DE), Roblox (RBLX), and Snowflake (SNOW), a 10% membership change rate, the highest of any fund tested that is not structurally required to roll positions. Every one of those trades is independently visible in ARK's own public daily trade disclosures from the same week.
JEPQ charts a membership change rate almost as high as ARKK's (18%), but it is a different story entirely: every one of its added and removed entries traces to the fund's rolling monthly Nasdaq-linked notes, the options-overlay mechanics behind its income strategy, not a change to its underlying stock roster. The actual equities, NVIDIA, Apple, Microsoft, and the rest, saw zero names added or dropped in the same window. Same chart shape as real stock picking, completely different cause, which is exactly why the membership-versus-resize split matters more than either number alone.
The leveraged funds show a fourth mechanism entirely. TQQQ must reset its notional exposure every day to stay at 3x the Nasdaq-100, and its own latest holdings show exactly how: the three largest positions are not stocks at all, they are Nasdaq-100 index return swaps against Citibank, BNP Paribas, and Bank of America, each roughly 29 to 30% of the fund. Real membership change is close to zero (2.5%, and even that is mostly Treasury-bill collateral rolling to a new CUSIP, not a trading decision), while 95% of positions get resized most days, the daily leverage reset happening on schedule. SOXL looks like the outlier at 35.8% membership change, but nine of its ten apparent swap "additions" are the same counterparty positions reappearing under a reformatted contract code, not new counterparties; only one is a genuinely new position. Read the raw added/removed counts on a swap-heavy fund with the same skepticism you would read a "this stock is up 400%" headline without checking the split history.
None of the fund or stock names above are a signal to buy, sell, or avoid anything. Every trade and holding cited in this section already happened and is described here only to illustrate what each kind of change looks like in the data. This is data, not investment advice.
N-PORT's 59-day lag versus a same-week daily file
The quarterly alternative to the daily file is Form N-PORT, and its lag is not a rounding error. We pulled SPY's (SPDR S&P 500 ETF Trust, CIK 884394) last five public NPORT-P filings directly from SEC EDGAR and matched each one to the quarter it covers:
| Quarter end | Filed (public) | Lag |
|---|---|---|
| 2026-06-30 | 2026-08-28 | 59 days |
| 2026-03-31 | 2026-05-28 | 58 days |
| 2025-12-31 | 2026-02-26 | 57 days |
| 2025-09-30 | 2025-11-26 | 57 days |
| 2025-06-30 | 2025-08-28 | 59 days |
59 to 57 days, quarter after quarter, right up against the SEC's 60-day ceiling on public disclosure for a fund's reporting-period month (SEC, Investment Company Reporting Modernization FAQ). As of this writing (2026-09-07), SPY's own /api/fund/holdings still resolves to the quarter that ended 2026-06-30, while its daily file was last refreshed 2026-09-03, four calendar days earlier at most. This is the same point-in-time discipline our 13F filing lag investigation found on the institutional-ownership side (a 45-day statutory window there, a 60-day disclosure ceiling here), different rule, same shape: a quarterly filing is authoritative but stale, and a daily one is fresh but only covers what actually publishes daily.
How to pin reportDate and never read a stale snapshot
/api/fund/holdings/daily takes an optional reportDate. Omit it and you get the latest file on record. Pass it and the endpoint resolves point-in-time: the most recent snapshot on or before that date, which can legitimately be older than what you asked for. The response's own reportDate field always carries the real as-of day served, so a caller never has to guess whether a request silently fell back.
curl -H "Authorization: Bearer $TOKEN" \
"https://api.stockfit.io/v1/api/fund/holdings/daily?symbol=SPY&reportDate=2026-08-10&pageSize=1"{
"reportDate": "2026-08-10",
"totalResults": 505,
"data": [
{ "name": "NVIDIA CORP", "ticker": "NVDA",
"cusip": "67066G104", "pctVal": 7.898696 }
]
}Drop the reportDate and the same fund on 2026-09-03 shows the same top holding at a different weight, 7.898696% versus 8.287016%, no membership change, no resize over the 1% threshold either, just ordinary price-driven drift. Even a fund that shows up as "unchanged" by every measure in this post still has weights moving every single day the market is open. For the full list of tickers this endpoint covers, check /api/fund/holdings/daily/supported-funds first, it is free-tier and takes no parameters. The full daily and N-PORT holdings surface, plus flows, overlap, and exposure modeling, is on the ETF and fund data page.
The same pinning discipline applies to the point-in-time fundamentals covered in our backtesting guide: never trust an unpinned "latest" value inside a historical loop, always pin the date and read back what the API says it actually served. Daily holdings requires the ETF plan ($59/mo, $39/mo billed annually) or Professional ($99/mo, $69/mo billed annually). to try the supported-funds list and the quarterly N-PORT endpoint on the free and Starter tiers first.
FAQ
Q.How often do ETF holdings actually update?
Q.Does a new daily holdings file mean the fund traded that day?
Q.How much do index ETF holdings change compared to active ETFs?
Q.Why do leveraged ETFs show high position changes but almost no new holdings?
Q.How stale is N-PORT data compared to daily holdings?
Q.How do I get ETF holdings for a specific past date via API?
reportDate (YYYY-MM-DD) to /api/fund/holdings/daily. It resolves to the most recent snapshot on or before that date and returns the real as-of day in its own reportDate response field, which can be later than your retention window's start or earlier than what you requested, always check it rather than assuming the pin landed exactly.Q.What is the difference between daily holdings and N-PORT holdings?
Q.Which StockFit plan includes daily ETF holdings?
Ready to build?
Free API key, no credit card.