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.Published September 12, 2026 · Updated October 13, 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 5 lookups a month without a card (2 PDF factsheets), enough to check a few of the funds you care about. Starter is $9.99 a month for 60 requests (30 PDF factsheets) with portfolio look-through, holdings overlap and batch calls of 10 ISINs and the AI companion kit. Pro is $49 for 1,000 requests (500 PDF factsheets), 50 ISINs per call, white-label factsheets, document extraction and a commercial licence. Scale is $249 for 10,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]}'