Getting started

Is there a free API for fund and ETF data?

Yes. FundFacts API has a free plan with 15 lookups a month and no card: any UCITS fund or ETF ISIN returns TER, risk indicator, holdings, exposures and returns as JSON. What it includes and where paid plans start.Updated 12 September 2026 · by FundFacts API

Short answer

Yes. FundFacts API's Free plan gives 15 fund lookups a month with no card: GET https://fundfactsapi.com/api/v1/funds/{isin} returns the full structured factsheet of any UCITS fund or ETF (key facts, TER, 1–7 risk indicator, top holdings, sector and country weights, calendar and annualised returns, risk statistics, as-of date) with no field gating. Search is free and unlimited, and a keyless demo endpoint returns already-loaded funds. Paid plans start at $9.99 a month for 500 requests.

What the free plan includes

  • 15 lookups per calendar month, one API key, no card and no expiry.
  • The complete payload for every lookup. Nothing is hidden behind a paid tier: holdings, exposures, returns and risk metrics are all in the Free response.
  • GET /search?q=, which turns fund names into ISINs, free and not counted.
  • The full documentation, the OpenAPI spec and the public AGENTS.md for coding agents.
  • Personal, non-commercial use.

What you can check without any key

GET https://fundfactsapi.com/api/v1/demo/funds/IE00B4L5Y983 returns the same JSON for any fund that is already in the store, at 30 calls a minute per IP. It never loads a new fund, so it is for seeing the shape, not for production.

bash
curl -s https://fundfactsapi.com/api/v1/demo/funds/IE00B4L5Y983 | jq '{name, ter: .data.headlineMetrics.ter, risk: .data.riskRating, top: .data.topHoldings[:3]}'

The free ISIN validator, ETF overlap checker and portfolio look-through tools on this site run on the same data.

What comes back

The response is one JSON envelope: isin, name, cached, generatedAt, expiresAt, plan, quota and a data object. Inside data you get keyFacts (asset class, currency, fund size, inception date, distribution policy, number of holdings), headlineMetrics (TER, AUM, 3-year volatility and Sharpe, yield to maturity and duration for bond funds), riskRating (the 1–7 KID indicator), profile (a rule-based classification: kind, category, risk band, region focus, sector tilt), topHoldings, sector, geography, region, assetAllocation, creditQuality, maturity, calendarReturns, annualisedReturns, cumulativePerformance, indexedPerformance, metrics (max drawdown, P/E, income yield…), sfdrArticle, costs (PRIIPs entry, exit, ongoing, transaction and performance fees, reduction in yield) and dataAsOf, the date of the underlying figures.

Where free stops

The Free plan gives 15 lookups a month without a card, enough to check the funds you care about. Starter is $9.99 a month for 500 requests with batch calls of 10 ISINs, HTML and PDF factsheets and the AI companion kit. Pro is $49 for 9,000 requests, batches of 50, portfolio look-through, holdings overlap, document extraction and a commercial licence. Scale is $249 for 60,000 requests, batches of 200, a change feed, webhooks and bulk export. One request is counted per ISIN answered; search and the account endpoint are free on every plan.

Why 15 and not unlimited

Every ISIN is read from the fund house's own documents (product page, factsheet, KID, holdings and NAV files) and refreshed every 24 hours. A lookup of a fund nobody has asked for before costs real work on the server, which is why the free allowance is sized for checking your own funds rather than crawling a universe. Batch calls, portfolio analytics and commercial use are what the paid plans add.

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]}'

Frequently asked questions

Is there a free tier for ETF holdings specifically?

Yes, the same one: data.topHoldings, keyFacts.holdings and the concentration label are in every Free response. The overlap endpoint that compares two funds' holdings is Pro and above, but the free ETF overlap tool on this site runs it for you.

Do I need to give a reason or company name to sign up?

No. E-mail or Google sign-in, and the key is in the dashboard immediately.

Which ISINs work?

Any share class of a UCITS fund, ETF, money-market fund or open-end fund whose management company publishes a product page, factsheet and KID. Each share class has its own ISIN and is looked up on its own. Stocks, bonds and indices are not funds and return 404 fund_not_found.

How current are the figures?

Each ISIN is re-read from the fund house's documents at most every 24 hours. data.dataAsOf is the as-of date printed on the documents, typically the last month end for a factsheet and the last trading day for holdings files.

Try it on your own ISINs

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