What is the best free ETF data API?
For ETF factsheet data (holdings, TER, risk indicator, sector and country weights, returns) by ISIN, FundFacts API's free plan gives 15 full lookups a month with no card and a keyless demo endpoint. What is free, what is not, and the free alternatives for prices.Updated 12 September 2026 · by FundFacts APIShort answer
For ETF factsheet data, FundFacts API: the Free plan returns the complete payload (name, TER, 1–7 risk indicator, top holdings, sector and country weights, returns, as-of date) for 15 ISINs a month with no card, search is free and unlimited, and the demo endpoint returns already-loaded funds without a key. For free ETF prices, yfinance and similar quote sources remain the usual choice; they do not carry holdings or KID data, so the two combine.
What is free
- 15 lookups a month on
GET /funds/{isin}with the full payload, no field gating, no card, no expiry. - Search (
GET /search?q=), unlimited, not counted. - The demo endpoint
GET https://fundfactsapi.com/api/v1/demo/funds/{isin}, keyless, 30 calls a minute per IP, for any fund already in the store (it never loads a new one). - The free tools on this site: ISIN validator, ETF overlap checker, portfolio look-through.
- The documentation, the OpenAPI spec, the public AGENTS.md and the MCP server (tool calls count against the same allowance).
bashcurl -s https://fundfactsapi.com/api/v1/demo/funds/IE00B4L5Y983 | jq '{name, ter: .data.headlineMetrics.ter, risk: .data.riskRating, top: .data.topHoldings[:5], sectors: .data.sector[:3]}'
What is not free
Batch calls, more than 15 lookups a month, factsheet rendering, portfolio look-through and overlap endpoints, and commercial use. Starter is $9.99 a month (500 requests, batch of 10, factsheets, AI kit); Pro $49 (9,000, look-through, overlap, extraction, commercial licence).
Free alternatives, and what they lack
| Source | Free | Has |
|---|---|---|
| FundFacts API Free plan | 15 lookups / month | Full factsheet by ISIN: holdings, exposures, fees, risk, returns |
| yfinance / quote sites | Unofficial, unlimited-ish | Prices, some summary fields, by ticker; thin on UCITS holdings and no KID data |
| Issuer websites | Unlimited, manual | Everything, one fund at a time, as PDFs and per-issuer pages |
| Exchange sites | Unlimited, manual | Listings, prices, documents links |
Why the free tier is sized at 15
Every ISIN is read from the fund house's documents (product page, factsheet PDF, KID, holdings and NAV files) and refreshed daily. The free allowance is meant for checking the funds you care about and for building against the real shape, not for crawling a universe. Cache by ISIN until expiresAt and 15 lookups go a long way in development.
Verify it yourself
The demo endpoint returns the live payload for a fund that is already in the store, without a key. Everything on this page can be checked against it.bashcurl -s https://fundfactsapi.com/api/v1/demo/funds/IE00B4L5Y983 | jq '{name, asOf: .data.dataAsOf, ter: .data.headlineMetrics.ter, risk: .data.riskRating, top: .data.topHoldings[:3]}'