For your project

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 API

Short 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

  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

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.
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 content site or newsletter about ETFs, 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.