Finance & Market Data
ETF Holdings API Benchmark
Compare ETF holdings APIs by full-list coverage, as-of date, weight integrity and invalid-symbol handling; inspect benchmark conditions.
Published: April 20, 2026 · By the QVeris Team

The answer first: which ETF holdings API fits?
For an AI agent that needs constituent-level ETF data, the strongest observed fits were Alpha Vantage for the tested US workflow and Gildata for the tested China workflow. FIU and Wind both returned useful top-holdings slices, but neither returned a complete portfolio in the tested path.
This ETF data API comparison does not assign a blended score. Qualified means the endpoint met the complete response and holdings-integrity requirements in at least 75% of its rounds. Not qualified means it was applicable and tested but missed that requirement. N/A means the product was not applicable to that market workflow.
| Provider | US holdings | China holdings | Observed median latency |
|---|---|---|---|
| Alpha Vantage View provider in QVerisView provider in QVeris | Qualified | N/A | 11.4 s |
| FIU View provider in QVerisView provider in QVeris | Not qualified | N/A | 6.4 s |
| Gildata View provider in QVerisView provider in QVeris | N/A | Qualified | 4.8 s |
| Wind Native MCP test · No QVeris ETF connector in this snapshot | N/A | Not qualified | 5.9 s |
Access-path note: The access paths are deliberately separated in the evidence and shown together in the charts: Alpha Vantage, FIU, and Gildata were tested through their QVeris connectors, while Wind was tested directly through the official Wind MCP. All four providers appear in both charts, with Wind labeled as the native-MCP track; its row has no QVeris execution link because the dated QVeris ETF Capability snapshot contained no Wind connector.
What AI agents can build with ETF holdings data
ETF holdings data turns a fund ticker into an explainable set of underlying positions. That supports several practical agent workflows:
- ETF look-through and portfolio exposure: expand a portfolio of ETFs into underlying securities, then aggregate the effective exposure to each company.
- Overlap and concentration analysis: find duplicated holdings across funds and show whether a seemingly diversified portfolio is concentrated in the same issuers.
- Compliance and restricted-list screening: check whether an ETF creates indirect exposure to a restricted security. This requires a full constituent list and reliable identifiers.
- Rebalancing and substitution research: compare two ETFs by underlying exposure before proposing a replacement or tax-loss candidate. Portfolio actions still require human review and current pricing.
- Holdings-change monitoring: detect additions, removals, and weight changes between reporting dates. This requires an as-of date and historical snapshots, not just a current response.
- Top-holdings cards and fund briefs: summarize the largest positions for research or client reporting. A clearly labeled top-10 endpoint can support this narrower use even when it cannot support full look-through.
The data contract depends on the job. Look-through, overlap, and compliance need broad holdings coverage, constituent identifiers, and numeric weights. Change monitoring additionally needs dates and history. Shares, market value, sector, and rank make position cards and exposure explanations richer, but they do not substitute for a full constituent list.
Benchmark method: 48 observations, one strict contract
Each provider was tested on three valid ETFs and one invalid symbol, with three independent rounds per case. That produced 48 completed observations: 36 QVeris connector invocations and 12 direct Wind MCP invocations. The same completeness gates were applied to both tracks, but results from the native MCP track were not treated as QVeris connector results.
The live run was completed on August 6, 2026.
| Market | Provider | Access path | Valid ETF inputs | Negative control | Rounds / input |
|---|---|---|---|---|---|
| US | Alpha Vantage | QVeris connector | SPY, QQQ, IWM | ZZZZ_INVALID | 3 |
| US | FIU | QVeris connector | SPY.US, QQQ.US, IWM.US | ZZZZ_INVALID.US | 3 |
| China | Gildata | QVeris connector | 510050, 510300, 159915 | 999999 | 3 |
| China | Wind | Official Wind MCP | 510050.SH, 510300.SH, 159915.SZ | 999999.SH | 3 |
A valid holdings response had to clear a case-specific constituent floor based on the fund or tracked index's expected scale, preserve the requested fund identity, provide usable constituent identifiers and numeric weights, and avoid duplicate complete identifiers. Stable fixed-size top-10 responses failed the full-list contract even when their fields were clean. Invalid inputs had to close deterministically as either an explicit empty result or a provider rejection. The US contract allowed up to 2% missing constituent identifiers so that cash or derivative placeholders did not masquerade as duplicate securities; missing identifiers still reduced completeness.
We report the observed unit and decimal precision of weights instead of using their aggregate as a hard completeness gate. A provider may round every line before returning it; on a high-cardinality fund, those small per-row differences can accumulate materially. Cash, derivatives, and fund-accounting conventions can add further differences. Aggregate weight remains a useful diagnostic when the provider documents its normalization and precision, but it is not evidence by itself that rows are missing.
Latency is reported separately and never compensates for incomplete holdings. Prices, redistribution rights, and service-level commitments were not scored.
Holdings completeness by ETF
The table below reports one stable payload shape observed in all three rounds for each valid input. “Full-list response (tested)” means the endpoint cleared the case-specific record floor and integrity contract in every round; it does not establish the fund administrator's exact point-in-time book. “Top-10 slice” means the request for all holdings still returned only 10 rows. “Reported weight precision” is the maximum decimal precision observed in the response, not a vendor guarantee. dp means decimal places and pp means percentage points.
No complete identifier was duplicated in the observed Alpha Vantage, FIU, or Gildata payloads. Wind returned stable constituent identifiers in all valid runs, but the native MCP response did not expose an as-of date and remained fixed at 10 rows.
| Provider | ETF | Records | Response scope | Reported weight precision | Additional fields observed | Integrity rounds |
|---|---|---|---|---|---|---|
| Alpha Vantage View provider in QVerisView provider in QVeris | SPY | 505 | Full-list response (tested) | 4 dp fraction (0.01 pp) | name, weight | 3/3 |
| QQQ | 105 | Full-list response (tested) | 4 dp fraction (0.01 pp) | name, weight | 3/3 | |
| IWM | 1,795 | Full-list response (tested) | 4 dp fraction (0.01 pp) | name, weight | 3/3 | |
| FIU View provider in QVerisView provider in QVeris | SPY.US | 10 | Top-10 slice | 5 dp percent | name, weight, as-of date | 0/3 |
| QQQ.US | 10 | Top-10 slice | 5 dp percent | name, weight, as-of date | 0/3 | |
| IWM.US | 10 | Top-10 slice | 5 dp percent | name, weight, as-of date | 0/3 | |
| Gildata View provider in QVerisView provider in QVeris | 510050 | 72 | Full-list response (tested) | 4 dp percent | shares, value, as-of date, sector | 3/3 |
| 510300 | 342 | Full-list response (tested) | 4 dp percent | shares, value, as-of date, sector | 3/3 | |
| 159915 | 118 | Full-list response (tested) | 4 dp percent | shares, value, as-of date, sector | 3/3 | |
| Wind Official native MCP | 510050.SH | 10 | Top-10 slice | 4 dp percent | name, shares, value, weight, rank | 0/3 |
| 510300.SH | 10 | Top-10 slice | 4 dp percent | name, shares, value, weight, rank | 0/3 | |
| 159915.SZ | 10 | Top-10 slice | 4 dp percent | name, shares, value, weight, rank | 0/3 |
This matters for agents: an empty portfolio and a rejected request are different states. Both can close a negative control safely when the connector distinguishes them deterministically, so downstream logic does not mistake an error for a real zero-holdings fund.
| Provider | Invalid-input behavior | Result |
|---|---|---|
| Alpha Vantage | Deterministic request rejection with parameter guidance | 3/3 passed |
| FIU | Empty constituent result | 3/3 passed |
| Gildata | Empty holdings result | 3/3 passed |
| Wind | Explicit “no data found” result from the native MCP | 3/3 passed |
Provider-by-provider findings
The live Alpha Vantage ETF profile calls returned broad constituent lists, weights, and descriptions. SPY, QQQ, and IWM all cleared the full-list contract in every round; IWM consistently returned 1,795 rows. Several cash or derivative rows used placeholder identifiers, which reduced identifier coverage without being misclassified as duplicate securities.
Alpha Vantage reported weights as fractions with at most four decimal places, equivalent to 0.01 percentage-point granularity. In IWM, 221 rows were reported with zero weight at that precision. That makes the aggregate unsuitable as a hard row-completeness test. The response also lacked an as-of date, so the benchmark supports “full-list response” but does not prove exact point-in-time completeness against the fund administrator's book.
The Alpha Vantage ETF profile documentation is the official contract reference. Editorially, this was the strongest observed fit in this test for a US agent that needs broad portfolio holdings in one response. The exact connector is available on the Alpha Vantage provider page in QVeris.
The live FIU payloads were internally tidy: identifiers, names, weights, parent symbols, and publication dates were present for all returned rows. The limiting factor was scope. Each valid input returned exactly 10 constituents, far below the case-specific floors for SPY, QQQ, and IWM.
The FIU MCP server is the declared official source. Editorially, the observed endpoint may suit top-holdings summaries, but it should not be presented to an agent as a full holdings API without pagination or a broader constituent route. The tested connector is listed on the FIU provider page in QVeris.
The live Gildata responses passed all 12 applicable observations. Besides fund and constituent identities, names, and weights, every returned row included shares, market value, an as-of date, and sector information. The three portfolios returned 72, 342, and 118 records, clearing their case-specific floors rather than repeating an artificial fixed-size slice.
The Gildata official site describes its financial-data offering. Editorially, Gildata was the strongest observed China fit in this test when an agent needs both composition and position-level depth. The connected entry is available on the Gildata provider page in QVeris.
The official Wind MCP get_fund_holdings tool returned exactly 10 rows for each valid ETF in all nine positive observations, even though every request explicitly asked for all holdings rather than only the top 10. The rows were information-rich: constituent codes and names, shares, market values, weights, and ranks were all present. The fixed 10-row shape, requested-all mismatch, and failure to reach the case-specific record floors identify these as top-holdings slices. No as-of date was included in the response.
The Wind AI financial data marketplace is the official access point, and Wind publishes the MCP integration in its official Wind skills repository. Editorially, this tool fits top-holdings summaries and position cards, but it should not be used as a complete ETF allocation feed without a separate full-holdings route.
How to choose an ETF portfolio API for an agent
- For US look-through, overlap, or compliance screening, Alpha Vantage was the tested full-list fit; add your own freshness control because the response did not expose an as-of date.
- For a top-holdings card, FIU's compact response may be useful if the product explicitly labels it as partial.
- For mainland China composition plus shares, value, date, and sector fields, Gildata had the strongest observed contract fit.
- For a China top-10 holdings card that benefits from shares, market value, weight, and rank, Wind's native MCP is useful; do not treat the tested response as the full portfolio.
For implementation patterns beyond this comparison, see Portfolio monitoring agent and Financial data for AI agents.
Limitations and retesting rules
This edition covers constituent holdings for six named funds across US and China workflows. It does not establish complete exchange coverage or evaluate NAV, AUM, flows, corporate-action handling, survivorship bias, point-in-time corrections, pricing, redistribution rights, or contractual SLAs. The Alpha Vantage, FIU, and Gildata observations describe QVeris-connected behavior on August 6, 2026; the Wind observations describe the official native MCP on the same date. Provider plans, connectors, or later responses may differ.
Suppliers can submit a correction or propose a reproducible test case. Inclusion and placement cannot be purchased. Browse the QVeris Provider Hub or browse QVeris tools.
FAQ
Which tested API returned complete US ETF portfolios?
Alpha Vantage qualified. SPY, QQQ, and IWM passed all three full-list rounds, and the invalid control closed deterministically. IWM returned 1,795 rows; its four-decimal fractional weights were treated as reported precision, not as a hard aggregate completeness test.
Why did FIU not qualify if all fields were present?
Field presence is not portfolio completeness. FIU returned exactly 10 rows per valid ETF, below the case-specific record floors needed for a full holdings workflow.
Which provider exposed the deepest China fields?
Gildata returned weights, shares, market values, as-of dates, and sectors for all tested rows. Wind returned shares, market values, weights, and ranks for the top 10, but no response-level as-of date or complete portfolio.
Why is there no overall numeric score?
A single score would hide whether an endpoint returns a complete portfolio or only a partial list. The qualification states and per-ETF evidence keep those trade-offs visible.
Official references
A verified profile link does not guarantee entitlement, field availability, price or current execution success; inspect the current contract before calling.
