Free ETF Data API
Sources, Limits & Python
Find a free ETF data API for prices, history, holdings, and fund profiles—then verify limits, licensing, and a working request before you build.
TL;DR
Decide whether you need quotes, historical OHLCV, adjusted prices, holdings, NAV, AUM, expense ratio, or distributions.
Check daily calls, burst limits, delayed data, history depth, attribution, redistribution, and commercial-use terms.
Use a liquid symbol, inspect timestamps and null values, then repeat the request near the stated rate limit.
QVeris can help agents discover and call available financial-data capabilities without hard-coding every provider into the workflow.
What a free ETF data API should provide
A useful ETF database API is more than a quote endpoint. Match the provider to the dataset your application actually consumes, and record the observation time for every response.
Model ETF data as linked datasets with different clocks. Quotes may update intraday, official NAV is usually tied to a valuation point, holdings can lag by days or longer, assets and shares change with creations and redemptions, and distributions have declaration, ex, record, and payment dates. A single generic timestamp cannot describe all of them.
Prices and historical ETF data
For charts and backtests, verify daily or intraday OHLCV, adjusted-close methodology, split and distribution handling, exchange timezone, and history depth. “Historical” may mean only a recent window on a free plan.
ETF profiles, NAV, fees, and identifiers
Fund-level research commonly needs ticker, name, exchange, currency, issuer, inception date, NAV, AUM, expense ratio, benchmark, category, and stable identifiers such as ISIN or FIGI.
ETF holdings and allocation data
A free ETF holdings API should expose constituent identifiers, names, weights, an as-of date, and ideally sector or asset-class allocations. A top-ten list is not the same as complete holdings.
Distributions, corporate actions, and total return
Preserve distribution type, amount, currency, declaration, ex, record, and payment dates, plus split or share-class events. Adjusted price and total-return series must document reinvestment and tax assumptions.
Fund, share class, and listing identity
Keep the legal fund, share class, exchange listing, ticker, trading currency, domicile, and stable identifiers separate. The same strategy may have multiple listings or hedged classes, while reused tickers can refer to different instruments over time.
Alpha Vantage documents an ETF Profile & Holdings endpoint with net assets, expense ratio, turnover, holdings, and asset and sector allocations. Treat documentation as the source of truth for current entitlement and limits.
How to compare free ETF data API options
Do not rank providers from marketing labels alone. Confirm each requirement with the live documentation and a response from the exact endpoint you plan to use.
| Check | What to verify | Why it matters |
|---|---|---|
| Coverage | Countries, exchanges, active and delisted ETFs, symbol mapping. | Prevents silent gaps and survivorship bias. |
| Fields | Prices, history, holdings, NAV, AUM, fees, distributions. | A quote API may not support fund research. |
| Freshness | Real-time, delayed, end-of-day, and holdings as-of dates. | Different tasks tolerate different delays. |
| Free limits | Requests per minute/day, history window, endpoint entitlements. | A free key may only support prototyping. |
| License | Personal versus commercial use, display, caching, attribution, redistribution. | API access does not automatically grant data redistribution. |
| Identity | Fund, share class, listing, ticker history, ISIN or FIGI mapping. | Prevents duplicate funds and incorrect joins. |
| Date semantics | Quote time, NAV date, holdings date, AUM date, distribution dates. | Stops unlike observations from appearing synchronized. |
| Completeness | Full holdings versus top holdings, cash, derivatives, weight total. | Determines whether exposure and overlap can be calculated. |
Test an ETF API free tier with Python
1. Request a documented ETF endpoint
Use the provider’s current endpoint and your own API key. The example below follows the documented Alpha Vantage ETF profile pattern; replace the key and symbol before running it.
import os
import requests
params = {
"function": "ETF_PROFILE",
"symbol": "QQQ",
"apikey": os.environ["ETF_API_KEY"],
}
response = requests.get(
"https://www.alphavantage.co/query",
params=params,
timeout=20,
)
response.raise_for_status()
data = response.json()
print(data)2. Validate the response, not only HTTP 200
Confirm the expected symbol, field names, as-of timestamps, numeric types, currency, missing values, and any rate-limit or entitlement message embedded in the JSON.
3. Record free-tier boundaries
Save the documentation date, endpoint, observed latency, calls allowed, and license URL. Re-check before production because free plans and entitlements can change.
4. Reconcile linked ETF datasets
Join profile, quote, NAV, holdings, AUM, and distribution responses with stable identifiers rather than ticker alone. Reject impossible date orderings, flag stale portfolio data, and explain weight totals that do not approximate the documented coverage.
5. Test event days and symbol history
Use samples around distributions, splits, ticker changes, new launches, liquidations, and market holidays. Confirm adjusted prices, return calculations, status fields, and the mapping from old to current listings.
6. Persist raw evidence and normalized output
Store the raw response, provider, endpoint, retrieval time, effective dates, schema version, and normalization code. This makes later discrepancies traceable when holdings or historical series are revised.
Use QVeris to connect ETF data capabilities
QVeris is not the underlying ETF exchange feed and does not make a paid dataset free. It helps agents discover, inspect, and call available capabilities through a consistent workflow. Review matching ETF data capabilities, test candidates in the Live Demo, and consult the QVeris documentation before integrating.
- Describe the required ETF fields and freshness before selecting a capability.
- Inspect provider metadata, identifiers, date semantics, parameters, entitlement messages, and output before the first production call.
- Ask for quote, NAV, holdings, distributions, or reference data as separate requirements with their own freshness tolerance.
- Keep licensing, attribution, caching, raw evidence, and downstream display rules in your application design.
FAQ
Yes, some market-data providers offer free keys or limited free tiers. “Free” may restrict endpoints, history, freshness, or request volume, so verify the current documentation.
Alpha Vantage documents ETF profile and holdings data, while other providers offer different coverage and entitlements. Compare complete holdings, top holdings, update dates, and licenses separately.
Many equity time-series APIs accept ETF symbols, but history depth, adjusted data, intraday access, and free-tier availability vary by endpoint.
Often yes. A key identifies the account and enforces usage limits. Keep it in an environment variable and never expose it in browser code or a public repository.
Check calls per minute and day, supported endpoints, history window, delayed versus real-time data, caching, attribution, redistribution, and commercial-use rights.
Only if the provider’s current license permits your exact use. Display rights, internal analysis, caching, and redistribution can have different terms.
Prices trade throughout the session, while holdings may be published on a daily, periodic, or provider-specific schedule. Keep separate effective times and never imply that an old portfolio snapshot is intraday.
Separate the legal fund, share class, and exchange listing. Preserve trading currency, domicile, ticker history, and stable IDs so quotes join to the correct instrument without duplicating the underlying strategy.
It needs historical universes, delisted funds, point-in-time profiles and holdings, corporate actions, distributions, documented adjustments, and data availability dates—not only today's profile plus old prices.
