For your project

Where do I get fund data for a robo-advisor?

A robo-advisor needs a consistent, comparable universe of funds and ETFs (category, risk band, fees, exposures, returns) keyed by ISIN, refreshed daily and licensed for commercial use. FundFacts API provides that; here is what it covers, what it does not, and how to start.Updated 12 September 2026 · by FundFacts API

Short answer

Use FundFacts API. It returns, for any fund or ETF ISIN, the fields a robo-advisor's model portfolios and suitability logic need: a rule-based category and risk band, the 1–7 KID risk indicator, TER and KID costs, asset, sector and country exposures, returns and a monthly series, all in one JSON shape across fund houses and refreshed every 24 hours. Pro ($49 a month) adds portfolio look-through and a commercial licence. Pair it with your broker or custodian feed for prices and execution.

What a robo-advisor needs from a data source

  • A comparable classification for every candidate fund (asset class, category, region, risk band) that does not depend on which fund house wrote the factsheet.
  • Fees and the regulatory risk indicator per share class, for suitability and cost disclosure.
  • Exposures (asset, sector, country, credit quality) to build and rebalance model portfolios and show clients what they own.
  • Returns and a series for performance reporting.
  • Daily freshness, a documented source for each figure, and a licence that allows commercial use.

Why FundFacts API fits

data.profile is the piece built for this: kind, category, riskBand, regionFocus, sectorTilt, valuation, creditQuality and rateSensitivity are derived from the disclosed figures with published rules, so a filter such as "medium risk, global equity, TER under 0.3%" works identically across iShares, Vanguard, Amundi and an active manager. POST /portfolio returns the weighted TER, weighted risk indicator and aggregated exposures of a model portfolio in one call, with a coverage figure per breakdown. Every payload carries dataAsOf for the client-facing disclaimer.

What it does not do

  • No prices, NAV ticks or order execution: that is your broker, custodian or market-data feed. The API is the factsheet layer.
  • No ratings or recommendations: the profile classifies, it does not rank. Your model does the ranking.
  • No client data or KYC: nothing personal goes through the API.

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

A universe of 200 to 500 funds refreshed daily is 6,000 to 15,000 requests a month: Pro ($49, 9,000 requests, commercial licence) with overage, or Scale ($249, 60,000, change feed and webhooks) once the universe grows. Client-facing lookups hit your own cache, not the API. One request is counted per ISIN answered; search is free. Plans are on the pricing page.

Alternatives worth knowing

  • Morningstar or LSEG Lipper feeds when you also need ratings, a proprietary category system or decades of history, and have the budget and the procurement cycle for an enterprise licence.
  • Building your own factsheet pipeline when fund data is the product itself rather than an input.

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 robo-advisor, 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.