Where do I get data for a content site or newsletter about ETFs and funds?
Content about ETFs needs current, sourced figures: TER, holdings, exposures, returns, with a date, plus fund pages that rank. FundFacts API returns page-ready JSON per ISIN and renders factsheets; here is how publishers use it and what it costs.Updated 12 September 2026 · by FundFacts APIShort answer
Use FundFacts API. Each ISIN returns the figures an article or a fund page quotes (TER, size, risk indicator, top ten, sector and country split, calendar and annualised returns) as published by the fund house, with dataAsOf to cite, and POST /factsheets renders a one-pager you can embed. A newsletter that covers a handful of funds a week runs on Starter ($9.99); a site with hundreds of fund pages fits Pro ($49), which includes the commercial licence for public display.
What a content site or newsletter about ETFs needs from a data source
- Sourced, dated figures to quote.
- Fund pages with consistent sections across issuers.
- Charts without a design pipeline.
- A licence for public display.
Why FundFacts API fits
Every figure is what the fund house printed at dataAsOf, so an article can cite "TER 0.20%, as of 1 September, per the issuer's factsheet". profile gives consistent categories for listicles ("the cheapest global equity ETFs"). @fundfactsapi/widgets renders the growth chart and donuts in a React site, and the factsheet embed drops a one-pager into any page with an iframe. The ETF comparison website use case covers programmatic fund pages and the disclaimers.
What it does not do
- No prices or news; quote the exchange for those.
- No ratings or opinions: the ranking and the editorial are yours, the data stays factual.
Start in ten minutes
- Get a key at fundfactsapi.com/signup (Free plan, 15 lookups a month, no card).
- 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 FundFactsff = FundFacts() # reads FUNDFACTS_API_KEY; free key at https://fundfactsapi.com/signupfund = 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])
- Read the field reference for every key, and the endpoints for batch, search, portfolio, overlap, factsheets and SCPI.
- If a coding agent is building it, point it at /llms-full.txt, the complete AGENTS.md for the API.
What it costs
Ten funds a week is under 50 requests a month (Free or Starter). Five hundred fund pages refreshed weekly is about 2,000 a month: Pro ($49). One request is counted per ISIN answered; search is free. Plans are on the pricing page.
Alternatives worth knowing
- Copying figures from issuer sites by hand when you cover one fund a month.
- A vendor licence when the publication needs ratings or a full historical database.
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.bashcurl -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]}'