πŸ“Š ETF Holdings Tracker β€” Constituents, Weights, AUM avatar

πŸ“Š ETF Holdings Tracker β€” Constituents, Weights, AUM

Pricing

from $100.00 / 1,000 etf holding records

Go to Apify Store
πŸ“Š ETF Holdings Tracker β€” Constituents, Weights, AUM

πŸ“Š ETF Holdings Tracker β€” Constituents, Weights, AUM

Track ETF constituent holdings, weights, AUM, sector exposure across 100+ major US ETFs including SPY, QQQ, VTI, ARKK, JEPI. Daily holdings data for asset allocators, ETF arbitrageurs, factor investors, index researchers. Bloomberg ETF analytics alternative β€” pay-per-result, no Bloomberg seat.

Pricing

from $100.00 / 1,000 etf holding records

Rating

0.0

(0)

Developer

NexGenData

NexGenData

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

4 days ago

Last modified

Share

Pay-per-result ETF holdings data β€” $0.10 per constituent record. No Bloomberg seat, no FactSet contract, no per-symbol licensing wall.

Track the full constituent baskets of 100+ major US ETFs β€” SPY, QQQ, IWM, VTI, VOO, IVV, EFA, EEM, AGG, BND, GLD, SLV, the XL* sector SPDRs, the ARK family, JEPI, SCHD, VIG, VWO, VEA, IEMG, IEFA, TQQQ, SQQQ, ARKK, ARKQ, ARKW, ARKG, plus the long tail of iShares, Vanguard, State Street, Invesco, ProShares, First Trust, Direxion, Schwab, JPMorgan, WisdomTree, Global X, KraneShares, VanEck, Pacer and Fidelity products. Every constituent is emitted as a discrete record with ETF symbol, ETF name, ETF issuer, ETF AUM, holding symbol, holding name, weight %, shares held, market value, sector, and country.

This actor is purpose-built for the four buy-side workflows where ETF holdings data is mission-critical:

  • Asset allocators decomposing thematic / sector / factor ETF exposure into underlying GICS sectors and country breakdowns
  • ETF arbitrageurs computing NAV deltas vs the live constituent basket and surfacing intraday creation / redemption opportunities
  • Factor investors reverse-engineering a fund's beta to value, momentum, quality, low-volatility and size factors from the holding list
  • Indexers tracking constituent adds, drops and reweights week-over-week across iShares, Vanguard and SPDR sleeves to anticipate front-running flows

What you get per record

Each emitted record represents one ETF-constituent pair. Pull SPY and you'll get ~500 records; pull QQQ and you'll get ~100; pull ARKK and you'll get ~30. Records carry:

  • etf_symbol β€” parent ETF ticker (SPY, QQQ, VTI, ARKK, JEPI, etc.)
  • etf_name β€” full fund name as reported by the issuer
  • etf_issuer β€” sponsor (iShares / Vanguard / State Street / Invesco / ARK / JPMorgan / Schwab / WisdomTree / ProShares / Direxion / Global X / KraneShares / VanEck / First Trust / Pacer / Fidelity)
  • etf_aum_usd β€” total net assets in raw USD
  • etf_aum_billion_usd β€” total net assets in USD billions (3-decimal precision)
  • holding_symbol β€” constituent ticker
  • holding_name β€” constituent company name
  • holding_sector β€” best-effort GICS sector inference for the constituent
  • weight_pct β€” constituent weight as % of ETF AUM (e.g. NVDA = 8.17% of SPY)
  • shares_held β€” share count held by the ETF
  • market_value_usd β€” derived dollar value = AUM Γ— weight%
  • holding_country β€” issuer country of incorporation (for international/global ETFs like EEM, EFA, KWEB, EWJ)
  • as_of_date β€” issuer-reported holdings date (defaults to today if absent)
  • etf_holdings_url β€” direct deep-link to the source holdings page
  • data_source β€” provenance flag

Input parameters

  • etf_symbols β€” array of ETF tickers to pull (default: ["SPY", "QQQ", "VTI"])
  • limit β€” hard cap on total holding records returned across all ETFs (default 1000, max 50000). Use this to bound cost.
  • max_holdings_per_etf β€” cap per ETF (default 100, 0 = full holdings). SPY has ~500, VTI ~3700, ARKK ~30. Most analytics workflows need only the top 50-100 names by weight.
  • min_weight_pct β€” filter out long-tail holdings below this weight (default 0). Use 0.5 to keep only meaningful positions, 1.0 for top-decile names.
  • country β€” filter holdings by issuer country of incorporation. Primarily useful for international / global ETFs (EEM, EFA, KWEB, EWJ, IEMG, IEFA, VWO).
  • issuer β€” filter the requested ETFs by sponsor when you pass a long ETF list but only want (e.g.) iShares funds.

How it works

The actor probes per-ETF holdings tables from stockanalysis.com/etf/{symbol}/holdings/ β€” clean server-rendered HTML with up to ~500 holdings per ETF and weight + share-count columns straight from the daily issuer disclosure. For each ETF symbol passed in, the actor also fetches the overview page at /etf/{symbol}/ to recover the fund's official name, total AUM, sponsor, and as-of date. Both pages are pulled concurrently per ETF so a 10-ETF run completes in seconds, not minutes.

We then merge per-ETF metadata into every constituent row, derive market_value_usd from AUM Γ— weight%, infer the holding's GICS sector from a curated S&P 500 lookup table (with name-keyword fallback for off-index names), and tag the holding's country of incorporation from a known-name / suffix map. Final filtering by min_weight_pct, country, issuer and the global limit happens just before the push, so you only pay for records that match your spec.

Pricing & cost model

PAY_PER_EVENT:

  • Actor start β€” $0.01 (charged once per run)
  • ETF holding record β€” $0.10 per emitted dataset item (primary event)

Cost examples:

  • Top-10 holdings of SPY β†’ $0.01 + 10 Γ— $0.10 = $1.01
  • Top-100 holdings of SPY, QQQ, VTI (default input) β†’ $0.01 + 300 Γ— $0.10 = $30.01
  • Full SPY constituent basket (~500 names) β†’ $0.01 + 500 Γ— $0.10 = $50.01
  • Full top-100 of all 11 sector SPDRs (XLK, XLF, XLE, XLI, XLV, XLY, XLP, XLU, XLB, XLRE, XLC) β†’ $0.01 + 1100 Γ— $0.10 = $110.01

This pricing is deliberately positioned mid-premium β€” well below the IPO-tracker rate ($0.50/event) because holdings records are volume-heavy, but well above thin-ticker screener rates ($0.02-0.05) because each record carries six fund-level joins of metadata plus four constituent-level derivations.

How this compares to Bloomberg / FactSet / Refinitiv / etf.com Pro

PlatformCoverageAnnual costDaily holdings refreshProgrammatic API
Bloomberg Terminal (ETF analytics)All US + international ETFs~$24,000 / seat / yearYesYes (BLPAPI, seat-locked)
FactSet ETF Solutions8000+ ETFs globally~$12,000 / seat / yearYesYes (FactSet API)
Refinitiv Workspace ETFGlobal ETFs~$22,000 / seat / yearYesYes (Refinitiv Data Platform)
etf.com ProUS ETFs~$2,400 / yearDailyLimited (CSV export only)
ETF Holdings Tracker (this actor)100+ major US ETFsPay-per-record, no subscriptionYes (daily issuer disclosure)Yes (Apify REST API + webhooks)

If you need full global ETF coverage, real-time intraday holdings updates, and a full Bloomberg-grade analytics workspace, you're still going to pay for a terminal. But if your workflow is:

  • A weekly rebalance check of 10-30 ETF baskets
  • A factor decomposition pipeline that ingests holdings once per week
  • A retail-facing ETF lookup tool that doesn't need a $24k/year per-seat data backend
  • An academic / research workflow that needs holdings but not the rest of a terminal

… then paying per holding record is the right cost model and this actor is a 90%+ savings vs the incumbents.

Sister actors in the NexGenData fleet

This actor is part of a financial-data fleet on Apify. Combine these to build a full data backend without a Bloomberg seat:

Output schema

Each record:

{
"etf_symbol": "SPY",
"etf_name": "SPDR S&P 500 ETF Trust",
"etf_issuer": "State Street",
"etf_aum_billion_usd": 762.12,
"etf_aum_usd": 762120000000.0,
"holding_symbol": "NVDA",
"holding_name": "NVIDIA Corporation",
"holding_sector": "Technology",
"weight_pct": 8.17,
"shares_held": 290262607,
"market_value_usd": 62265204000.0,
"holding_country": "United States",
"as_of_date": "2026-05-10",
"etf_holdings_url": "https://stockanalysis.com/etf/spy/holdings/",
"data_source": "stockanalysis.com"
}

Common recipes

Top-10 sector SPDRs basket review: {"etf_symbols": ["XLK", "XLF", "XLE", "XLI", "XLV", "XLY", "XLP", "XLU", "XLB", "XLRE", "XLC"], "max_holdings_per_etf": 10} β€” 110 records, $11.01.

ARK family decomposition: {"etf_symbols": ["ARKK", "ARKQ", "ARKW", "ARKG", "ARKF", "ARKX"], "max_holdings_per_etf": 50, "min_weight_pct": 0.5} β€” gets every meaningful position across the entire ARK lineup for cross-fund overlap analysis.

Core 3-fund portfolio audit: {"etf_symbols": ["VTI", "VXUS", "BND"], "max_holdings_per_etf": 100} β€” the basket behind the Boglehead three-fund portfolio.

Income / dividend ETFs: {"etf_symbols": ["SCHD", "VIG", "VYM", "JEPI", "JEPQ", "DIVO", "SDY"], "max_holdings_per_etf": 50} β€” full breakdown of the high-yield ETF complex.

International decomposition by country: {"etf_symbols": ["EEM", "EFA", "IEMG", "IEFA", "VWO", "VEA"], "country": "China", "max_holdings_per_etf": 100} β€” isolates only the Chinese holdings inside each broad EM/DM ETF.

Leveraged / inverse: {"etf_symbols": ["TQQQ", "SQQQ", "SOXL", "SOXS", "UPRO", "SPXU"], "max_holdings_per_etf": 50} β€” the swap basket behind the 3x products.

Reliability & maintenance

The actor degrades gracefully β€” if stockanalysis.com returns non-200 for a single ETF, that ETF is skipped and the rest of the run continues. AUM and as-of date are best-effort; if either is unavailable the record still emits with the fund-level fields nulled and as_of_date defaulting to today. Sector and country inference are heuristic β€” they cover the S&P 500 universe directly and use name-keyword fallback for off-index names; consumers who need authoritative GICS classifications should join against Finviz or Refinitiv downstream.

Affiliate & support

Built and maintained by NexGenData on the Apify platform. Discover the full fleet of 50+ stock screeners, fundamentals trackers, SEC filing harvesters and financial-data MCP servers here:

https://apify.com/nexgendata?fpr=2ayu9b