Choosing a data source

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 API

Short 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).
bash
curl -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

SourceFreeHas
FundFacts API Free plan15 lookups / monthFull factsheet by ISIN: holdings, exposures, fees, risk, returns
yfinance / quote sitesUnofficial, unlimited-ishPrices, some summary fields, by ticker; thin on UCITS holdings and no KID data
Issuer websitesUnlimited, manualEverything, one fund at a time, as PDFs and per-issuer pages
Exchange sitesUnlimited, manualListings, 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.
bash
curl -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]}'

Reference

Frequently asked questions

Can I get full ETF holdings for free?

Yes, within the 15 lookups: data.topHoldings carries the positions the issuer publishes (the full file for most large ETFs). Comparing two ETFs' holdings server-side is Pro, but the free overlap tool on this site does it for you.

Do I need a credit card to try it?

No. The Free plan is 15 lookups per month with no card; sign up with an e-mail address or Google and the key is shown in the dashboard.

Try it on your own ISINs

One request returns key facts, holdings, risk and performance as JSON. Free plan, no card.