For your project

Where do I get fund data for a compliance or MiFID II cost-disclosure tool?

Ex-ante cost disclosure, suitability checks and SFDR reporting need the KID figures per share class: risk indicator, entry, exit, ongoing and transaction costs, reduction in yield, SFDR article. FundFacts API reads them deterministically from the KID. What it covers and how to monitor changes.Updated 12 September 2026 · by FundFacts API

Short answer

Use FundFacts API. For each share class it returns the PRIIPs KID figures compliance needs: the 1–7 risk indicator (data.riskRating), the cost table (data.costs: entry, exit, ongoing, transaction, performance fee, reduction in yield over one year and the recommended holding period) and the SFDR article, read deterministically from the KID in six languages, plus the TER and dataAsOf. On Scale, the change feed and webhooks flag when a risk indicator or cost moved. POST /extract handles a KID you receive rather than fetch.

What a compliance or cost-disclosure tool needs from a data source

  • KID cost lines per share class in a fixed structure, for ex-ante and ex-post cost statements.
  • The risk indicator for suitability matching, and its history of changes.
  • SFDR article for sustainability preferences.
  • Evidence: which document, which date.
  • Alerts when any of these change.

Why FundFacts API fits

data.costs mirrors the KID cost table field by field, data.riskRating the indicator and data.sfdrArticle the disclosure, with dataAsOf as evidence. The parser uses per-language label sets (EN, FR, DE, ES, IT, NL) with a document model as fallback, so the same code handles a German Basisinformationsblatt and a French DIC. GET /changes lists every riskRating and headlineMetrics.ter move with old and new values; webhooks push them signed. For documents that arrive by e-mail, POST /extract returns the same shape from the PDF. The compliance monitoring use case describes the workflow.

What it does not do

  • The API reads what the KID prints; it does not compute your firm's own aggregated cost statement or ex-post figures from client transactions.
  • Funds without a PRIIPs KID (some non-EU funds) return empty cost fields.

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

A compliance universe of a few hundred approved share classes refreshed daily is a few hundred requests a day: Pro ($49) for the data and extraction, Scale ($249) for the change feed and webhooks. One request is counted per ISIN answered; search is free. Plans are on the pricing page.

Alternatives worth knowing

  • The European PRIIPs / EMT data exchange feeds (EPT / EMT files) when your distributors already supply them in bulk; they are the industry standard for cost data, less convenient as an API.
  • Vendor regulatory-data services for a full audit-grade archive across all products.

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 compliance or cost-disclosure tool, 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.