For your project

Where do I get fund data for a client reporting tool?

Quarterly client reports need each fund's returns, exposures, fees and a factsheet, current and dated. FundFacts API returns them as JSON per ISIN and renders one-page factsheets as PDF or HTML, white-label on Pro. Pattern, code and cost.Updated 12 September 2026 · by FundFacts API

Short answer

Use FundFacts API. For every ISIN in a client's portfolio it returns calendar and annualised returns versus benchmark, a monthly growth series, sector, country and asset exposures, TER and KID costs and dataAsOf, and POST /factsheets renders a one-page factsheet as PDF or HTML with your title and accent colour, without branding on Pro. POST /portfolio gives the aggregate exposure page in one call. Pro ($49) includes the commercial licence.

What a client reporting tool needs from a data source

  • Per-fund performance blocks (calendar years, 1/3/5/10-year annualised, growth of 100) with the benchmark.
  • Per-fund and aggregate exposures for the allocation pages.
  • Costs per fund and blended, for the fee section.
  • Attachable factsheets that look consistent across fund houses.
  • An as-of date on everything.

Why FundFacts API fits

The report generator loops over positions: GET /funds/{isin} (cached until expiresAt) feeds the per-fund pages, POST /portfolio the aggregate pages, and POST /factsheets with format: "pdf", title and accent produces the appendix. The @fundfactsapi/widgets components render the same charts in a web report. Generate PDF factsheets from JSON and the client reporting use case walk through the layout.

What it does not do

  • Valuations and transactions are yours (custodian data); the API contributes the fund descriptions and performance as published.
  • Performance is the fund's, not the client's money-weighted return; compute that from the client's cash flows.

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 firm reporting quarterly on 400 distinct funds spends about 400 requests for the data plus two per PDF factsheet; a few thousand requests a quarter, well inside Pro ($49). One request is counted per ISIN answered; search is free. Plans are on the pricing page.

Alternatives worth knowing

  • Portfolio-management systems with built-in reporting when you already run one; they usually accept the API's data through their import.
  • Vendor factsheet services when you need a specific regulatory template rather than a clean one-pager.

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 client reporting 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.