For your project

How do I get live fund data into an Excel or Google Sheets model for advisors?

Advisors' models live in spreadsheets. FundFacts API feeds them by ISIN through Power Query in Excel or an Apps Script custom function in Sheets: TER, risk, category, holdings, returns, refreshable, with an as-of date. Steps and formulas.Updated 12 September 2026 · by FundFacts API

Short answer

Use FundFacts API through the spreadsheet's own HTTP facility: Power Query in Excel (Data → Get Data → Blank Query) or an Apps Script custom function in Google Sheets, both documented with copy-paste code. A column of ISINs becomes name, category, TER, risk indicator, size, returns and dataAsOf on refresh, and holdings can spill into a range. A free key covers a small model; Starter ($9.99) covers a book of a few hundred funds refreshed monthly.

What an Excel or Google Sheets model needs from a data source

  • A formula or query that takes an ISIN and returns a field.
  • Refresh on demand, not on every recalculation.
  • Holdings and returns as ranges for charts.
  • The key kept out of the shared file.

Why FundFacts API fits

The Google Sheets page gives a =FUNDFACTS(isin, "headlineMetrics.ter") custom function with a six-hour cache and a =FUNDFACTS_HOLDINGS(isin) spill range; the Excel page gives a Power Query that expands a table of ISINs into name, TER, risk and as-of columns, with the key read from a named cell. Both are refreshable and both show dataAsOf next to the figures.

What it does not do

  • Prices for valuation come from the broker download you already use; the API adds the description and factsheet fields.
  • Apps Script custom functions time out at 30 seconds, so a brand-new fund may need a second refresh once it is in the store.

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 model over 200 funds refreshed monthly is 200 requests a month: Starter ($9.99). Refreshing weekly is still under 1,000. One request is counted per ISIN answered; search is free. Plans are on the pricing page.

Alternatives worth knowing

  • Vendor spreadsheet add-ins (Morningstar, Bloomberg Excel) when the firm licenses them; they bring ratings and prices, at licence cost.
  • Manual copy from factsheets when the model has ten funds and changes once a year.

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 an Excel or Google Sheets model, 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.