Where can I get mutual fund data as JSON?
Mutual funds have no ticker feed; their data lives in factsheets and KIDs. FundFacts API returns it as JSON per ISIN for UCITS and other open-end funds from 60+ managers: fees, risk indicator, holdings, exposures, returns, objective, as-of date. Coverage and code.Updated 12 September 2026 · by FundFacts APIShort answer
FundFacts API. Mutual funds (open-end funds, active or index) are identified by ISIN and documented by factsheets and KIDs rather than exchange feeds, and the API reads exactly those: GET /funds/{isin} returns name, share class, category, TER and KID costs, the 1–7 risk indicator, top holdings, sector, country, asset and credit-quality breakdowns, calendar and annualised returns, the objective and dataAsOf as JSON. Coverage is deepest for UCITS managers; try any ISIN on the Free plan.
Why mutual funds are harder than ETFs
ETFs are listed, so price APIs know them by ticker and issuers publish daily holdings files. Most mutual funds are not listed: no ticker, no exchange page, data only in the manager's monthly factsheet and the KID. That is why equity-market APIs return nothing for them, and why an ISIN-keyed, document-reading source is needed.
What the API returns for a mutual fund
- Identity:
name,shareClass,structure,keyFacts.manager,managerTenure,investmentObjective. - Costs:
headlineMetrics.ter,costs.*from the KID. - Risk:
riskRating,profile.riskBand,headlineMetrics.volatility3y,sharpe3y,metrics.maxDrawdown. - Composition:
topHoldings(the top ten most factsheets print),sector,geography,assetAllocation,creditQuality,maturity. - Performance:
calendarReturns,annualisedReturns,cumulativePerformance,indexedPerformanceversusbenchmarkName. - Regulation:
sfdrArticle,dataAsOf.
pythonimport os, requestsr = requests.get("https://fundfactsapi.com/api/v1/funds/LU1681043599", # an active fund share classheaders={"Authorization": f"Bearer {os.environ['FUNDFACTS_API_KEY']}"}, timeout=300)f = r.json(); d = f["data"]print(f["name"], d["keyFacts"]["manager"], d["headlineMetrics"]["ter"], d["riskRating"], d["topHoldings"][:5], d["dataAsOf"])
Coverage
Active and index funds from managers such as Fidelity, J.P. Morgan, Schroders, Pictet, Nordea, Robeco, Carmignac, Flossbach von Storch, Franklin Templeton, Capital Group, T. Rowe Price, Morgan Stanley IM, Vontobel, Union Investment, Raiffeisen, Erste, Generali, Baillie Gifford, Artemis, Jupiter and Liontrust are covered; the coverage pages list each with the sections it populates. Funds from managers without an adapter return 404; POST /extract turns their factsheet PDF into the same JSON.
The Free plan gives 15 lookups a month without a card, enough to check the funds you care about. Starter is $9.99 a month for 500 requests with batch calls of 10 ISINs, HTML and PDF factsheets and the AI companion kit. Pro is $49 for 9,000 requests, batches of 50, portfolio look-through, holdings overlap, document extraction and a commercial licence. Scale is $249 for 60,000 requests, batches of 200, a change feed, webhooks and bulk export.
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]}'