FactsheetFundamentalsField reference

How to read a fund factsheet, section by section (with the JSON field for each)

A walkthrough of every block on a fund or ETF factsheet — key facts, risk, fees, holdings, exposures, performance — and the API field that carries each figure.Published 15 September 2026 · 7 min read · by FundFacts API

A fund factsheet is a one- or two-page monthly summary that a fund house publishes for each share class: what the fund is, how big it is, what it costs, what it holds, how risky it is and how it has performed. Reading it means knowing which numbers are facts (fund size, fees), which are snapshots (holdings and exposures as of a date), and which are computed (returns, volatility) and therefore depend on a method. This guide walks through the standard layout and names the JSON field that carries each figure in FundFacts API, so you can move from PDF to code without losing meaning.

In short
Every factsheet has six blocks: identity and key facts, objective and benchmark, risk indicator and statistics, fees, portfolio breakdowns, and performance. Every figure is "as of" a date printed somewhere on the page; carry that date with the data. Weights are percentages that may not sum to 100. Returns are total returns in the share-class currency unless stated. The whole page maps to one JSON object with dataAsOf at the top.

Block 1: identity and key facts

The header names the fund and share class, and a "key facts" panel lists the static properties. Read the share class carefully: "USD (Acc)" versus "EUR Hedged (Dist)" is the difference between two ISINs with different fees and returns.

On the factsheetMeaningAPI field
Fund name and share classThe exact share class the page describesenvelope name, shareClass
ISINGlobal identifier of the share classenvelope isin
Asset classEquity, fixed income, money market, allocationkeyFacts.assetClass
Fund size / net assets / AUMTotal assets of the fund (usually the whole sub-fund, not the share class)keyFacts.aum
Base currencyCurrency the share class is denominated inkeyFacts.currency
Inception / launch dateWhen the share class startedkeyFacts.inception
Distribution policyAccumulating or distributingkeyFacts.distribution
Number of holdingsPositions in the portfoliokeyFacts.holdings
Manager / management companyWho runs itkeyFacts.manager, managerTenure
StructureETF or open-ended fundsecurityType, structure

Two traps. Fund size is normally quoted for the fund, so two share classes of the same fund show the same AUM; do not add them up. And the inception date is per share class, which is why a fund launched in 2005 can have a share class with three years of history.

Block 2: objective and benchmark

A paragraph states what the fund tries to do and which index, if any, it tracks or measures itself against. For index funds the benchmark is the index; for active funds it is a comparator and the fund can differ from it substantially.

  • The objective paragraph is investmentObjective.
  • The benchmark is benchmarkName, and if the fund publishes benchmark returns they appear alongside the fund's in calendarReturns.benchmark and annualisedReturns[].index.

Whether a tracker holds the index physically or via a swap is usually a line in this block or in key facts; the replication post explains what it changes in the holdings list.

Block 3: risk indicator and risk statistics

Most European factsheets show the regulatory risk indicator as a 1–7 scale, with the fund's class highlighted. Under PRIIPs it is the summary risk indicator (SRI); older UCITS KIIDs used the SRRI, which is on the same 1–7 scale but computed differently, so a fund can carry different numbers in a 2022 KIID and a 2024 KID. The SRRI and SRI explainer covers the two methods.

Next to it, a small table of statistics:

StatisticWhat it isAPI field
Risk indicator1 (lowest) to 7 (highest)riskRating
Volatility (3y)Annualised standard deviation of returnsheadlineMetrics.volatility3y
Sharpe ratio (3y)Return per unit of volatilityheadlineMetrics.sharpe3y
Maximum drawdownLargest peak-to-trough fallmetrics.maxDrawdown
Tracking error / differenceFor index funds, how closely it followsNot a standard field; see tracking difference vs error

Statistics depend on the window and frequency. FundFacts computes volatility, Sharpe and drawdown from the issuer's NAV history over the trailing three years of monthly returns with a 0% risk-free rate when a NAV series is published, and otherwise takes the factsheet's stated figure. The NAV series post shows the formulas so you can reproduce them.

Block 4: fees

Factsheets show one headline fee, called TER, OCF or ongoing charges depending on the house and country. The PRIIPs KID breaks it down further into entry, exit, ongoing (management and other), transaction and performance costs.

Fee lineAPI field
TER / OCF / ongoing charges (factsheet)headlineMetrics.ter
Ongoing costs (KID)costs.ongoing
Entry and exit costscosts.entry, costs.exit
Portfolio transaction costscosts.transaction
Performance feecosts.performanceFee
Cost impact after one year / at the recommended holding periodcosts.riy1y, costs.riyRhp

Fees are strings with the percent sign kept ("0.20%") so the format printed in the document survives; parse with a regex when you need a number. The fund fees post explains why the headline fee and the KID's total differ.

Block 5: portfolio breakdowns

This is the block with the charts: top ten holdings, sector split, country or region split, and for bond funds the credit-quality and maturity ladders. Every one of these is an array of { label, weight } in the API, weight in percent.

  • topHoldings (with name instead of label): the largest positions. A factsheet usually shows ten; when the issuer publishes a full holdings file the array is longer.
  • sector: GICS-style sectors for equity funds; instrument types for bond funds.
  • geography and region: countries and regions. When the factsheet has only one of the two panels, region mirrors geography.
  • creditQuality, maturity, instrument: bond and money-market panels, empty for equity funds.
  • assetAllocation: equity, bond, cash and other, for multi-asset funds.

Read weights as published. They may sum to less than 100 because of cash and derivatives, or to more than 100 for funds using leverage or short positions, and the API does not renormalise them. The derived profile object summarises the block with fixed rules: profile.concentration from the top-ten weight, profile.regionFocus from the largest region, profile.sectorTilt from the largest sector. The rules are versioned in profile.rules, so the label can be recomputed from the same payload. The holdings API post has worked examples per asset class.

Block 6: performance

The performance block is the one most likely to be misread. It typically contains a line chart, a table of cumulative or annualised returns over standard windows, and a row of calendar-year returns, often with the benchmark alongside.

TableWhat the numbers areAPI field
Calendar-year returnsTotal return in each full calendar yearcalendarReturns.years, .fund, .benchmark
Cumulative returns (1y, 3y, 5y, since launch)Total growth over the window, not annualisedDerived from cumulativePerformance
Annualised returns (3y p.a., 5y p.a.)Geometric average per year over the windowannualisedReturns[]
Growth of 100 / 10,000 chartSeries rebased to a starting valueindexedPerformance.points

Three reading rules. First, check the currency: returns are in the share-class currency, and a EUR investor in a USD share class experiences something different. Second, distinguish cumulative from annualised; "45% over 5 years" and "7.7% p.a." describe the same thing, and the returns conversion post has the formulas. Third, partial years are not calendar years: calendarReturns.years excludes the current year until it is complete.

When the issuer publishes a NAV history, FundFacts computes the series and the returns from it using the last observation of each month; otherwise the figures are those stated in the factsheet. Either way dataAsOf tells you the date the figures refer to.

Reading the whole page as JSON

Put together, a factsheet is one object. Here is a trimmed example for an equity ETF, with each block visible:

bash
curl https://fundfactsapi.com/api/v1/funds/IE00B3RBWM25 \
-H "Authorization: Bearer ffk_live_..."
json
{
"isin": "IE00B3RBWM25",
"name": "Vanguard FTSE All-World UCITS ETF (USD) Distributing",
"cached": true,
"generatedAt": "2026-09-14T06:12:40.511Z",
"expiresAt": "2026-09-15T06:12:40.511Z",
"data": {
"investmentObjective": "…",
"benchmarkName": "FTSE All-World Index",
"keyFacts": { "assetClass": "Equity", "currency": "USD", "distribution": "Distributing", "holdings": 3600 },
"riskRating": 6,
"profile": { "kind": "equity", "category": "Global Blend Equity", "riskBand": "high", "concentration": "diversified", "regionFocus": "Global", "regionTilt": "North America", "rules": "fundfacts-profile/1" },
"headlineMetrics": { "ter": "0.22%", "volatility3y": "…", "sharpe3y": "…" },
"costs": { "ongoing": "0.22%", "entry": "0.00%", "exit": "0.00%" },
"topHoldings": [{ "name": "…", "weight": 4.9 }],
"sector": [{ "label": "Technology", "weight": 26.1 }],
"geography": [{ "label": "United States", "weight": 61.4 }],
"calendarReturns": { "years": ["2021", "2022", "2023", "2024", "2025"], "fund": [], "benchmark": [] },
"annualisedReturns": [{ "label": "1 Year", "fund": null, "index": null }],
"dataAsOf": "2026-08-31"
}
}

Ellipses and empty arrays stand in for live values; the field names and types are exact. The field reference documents every key, and the factsheet glossary entry has the short version of this post.

A reading checklist

  1. Which share class is this, and does the ISIN match the one you hold?
  2. What is the as-of date, and is it the same for every block? (Holdings often lag performance by a month.)
  3. Is the fee the factsheet TER or the KID total? They differ.
  4. Are the returns cumulative or annualised, and in which currency?
  5. Do the breakdown weights sum to roughly 100, and if not, why (cash, derivatives, only top ten shown)?
  6. Is the risk indicator SRI (PRIIPs) or SRRI (old KIID)?

If you are doing this for more than a handful of funds, the factsheet automation post describes the parsing problem and why a structured API is the shorter route. A free key lets you request the JSON for any ISIN and compare it with the PDF side by side.

FAQ

What is the difference between a factsheet and a KID?

The KID (key information document) is a regulated three-page document under the PRIIPs Regulation with a fixed layout: risk indicator, performance scenarios, cost table and recommended holding period. The factsheet is a voluntary marketing document, usually monthly, with holdings, exposures and realised returns. The KID is the legal source for fees and the risk indicator; the factsheet is the source for portfolio detail.

Why do the holdings weights on a factsheet not add up to 100%?

Most factsheets show only the top ten holdings, so the remainder is simply not listed. Sector and country charts can also exclude cash, derivatives and unclassified positions. The API returns weights as published in topHoldings, sector and geography without renormalising.

Is the fund size on the factsheet for the share class or the whole fund?

Almost always the whole fund (the sub-fund), even though the factsheet describes one share class. Two share classes of the same fund show the same figure in keyFacts.aum.

Are factsheet returns net of fees?

Yes. Published fund returns are calculated from the NAV, which is already net of the ongoing charges. They exclude any entry or exit costs and any platform or adviser fees you pay separately.

How often does a factsheet change?

Most fund houses publish monthly, some quarterly. FundFacts refreshes each fund's payload every 24 hours and reports the date the figures refer to in dataAsOf, so you can see when the underlying document actually moved.

Try it on your own ISINs

One request returns key facts, holdings, risk and performance as JSON. Free plan, no card.