What does a fund data API cost?
FundFacts API pricing in one place: Free (5 lookups), Starter $9.99 (60 requests), Pro $49 (1,000, commercial use), Scale $249 (10,000, change feed and webhooks), Enterprise metered at $0.01 a request.Published September 12, 2026 · Updated October 13, 2026 · by FundFacts APIShort answer
FundFacts API is free for 5 lookups a month with no card. Starter is $9.99 a month for 60 requests with portfolio look-through, holdings overlap, batch calls of 10 ISINs, a watchlist of 10 funds with e-mail alerts, webhooks and the change feed, and the AI companion kit; Pro is $49 for 1,000 requests with 50 ISINs per call, a watchlist of 100 funds, white-label factsheets, document extraction, fund history and a commercial licence; Scale is $249 for 10,000 requests with the change feed and webhooks on every fund and bulk export; Enterprise is metered at $0.01 per request on invoice. One request is one fund found (a PDF factsheet is two); search is free, and so are misses, up to 15 a month or the plan's allowance if larger.
The plans
| Plan | Price | Requests / month | Batch size | Includes |
|---|---|---|---|---|
| Free | $0 | 5 | 1 | Full payload, search, docs; personal use |
| Starter | $9.99 | 60 | 10 | Portfolio look-through, holdings overlap, batch lookups, HTML / PDF factsheets, a watchlist of 10 funds (e-mail alerts, signed webhooks, change feed), AI companion kit, 2 keys |
| Pro | $49 | 1,000 | 50 | 50 ISINs per batch, portfolio or overlap call, a watchlist of 100 funds, KID / factsheet extraction, fund history, white-label factsheets, client reports, commercial use, 10 keys; $0.05 per extra request, capped |
| Scale | $249 | 10,000 | 200 | Change feed and signed webhooks on every fund in the store, bulk NDJSON export; $0.04 per extra request, capped |
| Enterprise | $0.01 / request | Unlimited | 1,000 | Monthly invoice, DPA, SLA, named contact |
The allowance resets on the first of each month (UTC). Details and the checkout are on the pricing page.
What counts as a request
One per fund found on /funds/{isin}, POST /funds, /portfolio and /overlap, whether the payload came from the store (within its 24 hours or flagged stale: true) or was freshly loaded. An ISIN with no fund data (404 fund_not_found) is not counted, up to 15 misses a month or the plan's allowance if larger, and is queued: FundFacts rechecks it from the next day, then weekly (every 3 days when several accounts wait for it), tells you the estimated date in the 404 body (recheck.nextRecheckAt) and e-mails you when it is covered; Pro and up skip the wait by uploading the fund's own KID in the Factsheets tab. POST /extract counts 5 per document; a PDF factsheet counts 2, an HTML one 1; GET /funds/{isin}/history counts 1 per call. /search, /me, the watchlist, the change feed and the demo endpoint are free. Invalid ISINs, pending batch entries and rejected calls (401, 429) cost nothing.
Sizing an application
- A screener over 500 funds refreshed daily needs about 15,000 requests a month: Scale with overage at $0.04, or Scale alone if the refresh is spread and prioritised.
- A client-reporting tool that renders a few hundred factsheets a month sits comfortably on Pro.
- A chatbot that answers questions about funds users mention uses one request per distinct ISIN per day thanks to the 24-hour store: Starter or Pro.
Cache by ISIN until expiresAt and the count stays close to one request per fund per day.
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]}'