For your project

Where do I get ETF and fund data for a personal finance app in Europe?

European users hold UCITS ETFs and funds identified by ISIN, with KIDs, TERs and SRRI rather than US tickers and expense ratios. FundFacts API covers that universe from the fund houses' own documents. What it gives a consumer app and what to pair it with.Updated 12 September 2026 · by FundFacts API

Short answer

Use FundFacts API. It is keyed by ISIN, covers UCITS ETFs and funds from the European fund houses your users actually hold (iShares, Vanguard, Xtrackers, Amundi, SPDR, Invesco and 60 more), and returns the fields a consumer app shows: name, category, TER, the 1–7 risk indicator, top holdings, sector and country weights, returns, dataAsOf. Search resolves fund names to ISINs for free. Pair it with your broker connection or a price feed for valuations; Pro ($49) covers commercial use.

What a personal finance app in Europe needs from a data source

  • ISIN-first identification, since European brokers and statements use ISINs, not exchange tickers.
  • Coverage of UCITS ETFs and funds, including accumulating and distributing classes and hedged variants.
  • Consumer-friendly fields: what is in it, what it costs, how risky, how it did.
  • Localised documents behind the figures (KIDs in German, French, Italian…).

Why FundFacts API fits

A US-centric market API sees iShares Core MSCI World UCITS ETF as four tickers with thin profiles; the API sees one ISIN with the full factsheet. GET /search?q= (free) gives users name-based search returning ISIN, currency and Acc / Dist so they pick the right class. KID cost and risk tables are parsed in EN, FR, DE, ES, IT and NL, and the DE and FR landing pages describe the product in those markets. POST /portfolio powers a "what do I really own" screen; @fundfactsapi/widgets renders the donuts and bars.

What it does not do

  • No prices or tax data; the broker connection or a quote feed provides valuations, and tax logic is yours.
  • Stocks and bonds the user holds are not funds and return 404; keep them as plain positions.

Start in ten minutes

  1. Get a key at fundfactsapi.com/signup (Free plan, 15 lookups a month, no card).
  2. Look up one fund and read the shape:
python
# pip install fundfacts (or call https://fundfactsapi.com/api/v1/funds/{isin} with any HTTP client)
from fundfacts import FundFacts
ff = FundFacts() # reads FUNDFACTS_API_KEY; free key at https://fundfactsapi.com/signup
fund = ff.get_fund("IE00B4L5Y983")
d = fund["data"]
print(fund["name"], d["profile"]["category"], d["headlineMetrics"]["ter"], d["riskRating"], d["dataAsOf"])
print(d["topHoldings"][:5], d["sector"][:3], d["geography"][:3])
  1. Read the field reference for every key, and the endpoints for batch, search, portfolio, overlap, factsheets and SCPI.
  2. If a coding agent is building it, point it at /llms-full.txt, the complete AGENTS.md for the API.

What it costs

Requests scale with distinct funds, not users: 1,000 distinct ISINs refreshed daily is about 30,000 requests a month (Scale, $249); a smaller universe fits Pro ($49). User views hit your cache. One request is counted per ISIN answered; search is free. Plans are on the pricing page.

Alternatives worth knowing

  • A market-data API with ISIN support when you only need prices and names and no holdings, fees or risk indicators.
  • Licensing a vendor database when you need ratings or want a single contract covering prices and reference data, at enterprise pricing.

The provider comparison and the compare pages go into each in more depth.

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 FundFacts API the right choice for this?

For the fund and ETF data layer of a personal finance app in Europe, yes: one JSON factsheet per ISIN across fund houses, refreshed daily, with a free plan to verify coverage on your own funds before paying. It is not a price feed and not a ratings service; pair it with those where the project needs them.

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.

Try it on your own ISINs

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