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 APIA 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.
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 factsheet | Meaning | API field |
|---|---|---|
| Fund name and share class | The exact share class the page describes | envelope name, shareClass |
| ISIN | Global identifier of the share class | envelope isin |
| Asset class | Equity, fixed income, money market, allocation | keyFacts.assetClass |
| Fund size / net assets / AUM | Total assets of the fund (usually the whole sub-fund, not the share class) | keyFacts.aum |
| Base currency | Currency the share class is denominated in | keyFacts.currency |
| Inception / launch date | When the share class started | keyFacts.inception |
| Distribution policy | Accumulating or distributing | keyFacts.distribution |
| Number of holdings | Positions in the portfolio | keyFacts.holdings |
| Manager / management company | Who runs it | keyFacts.manager, managerTenure |
| Structure | ETF or open-ended fund | securityType, 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 incalendarReturns.benchmarkandannualisedReturns[].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:
| Statistic | What it is | API field |
|---|---|---|
| Risk indicator | 1 (lowest) to 7 (highest) | riskRating |
| Volatility (3y) | Annualised standard deviation of returns | headlineMetrics.volatility3y |
| Sharpe ratio (3y) | Return per unit of volatility | headlineMetrics.sharpe3y |
| Maximum drawdown | Largest peak-to-trough fall | metrics.maxDrawdown |
| Tracking error / difference | For index funds, how closely it follows | Not 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 line | API field |
|---|---|
| TER / OCF / ongoing charges (factsheet) | headlineMetrics.ter |
| Ongoing costs (KID) | costs.ongoing |
| Entry and exit costs | costs.entry, costs.exit |
| Portfolio transaction costs | costs.transaction |
| Performance fee | costs.performanceFee |
| Cost impact after one year / at the recommended holding period | costs.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(withnameinstead oflabel): 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.geographyandregion: countries and regions. When the factsheet has only one of the two panels,regionmirrorsgeography.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.
| Table | What the numbers are | API field |
|---|---|---|
| Calendar-year returns | Total return in each full calendar year | calendarReturns.years, .fund, .benchmark |
| Cumulative returns (1y, 3y, 5y, since launch) | Total growth over the window, not annualised | Derived from cumulativePerformance |
| Annualised returns (3y p.a., 5y p.a.) | Geometric average per year over the window | annualisedReturns[] |
| Growth of 100 / 10,000 chart | Series rebased to a starting value | indexedPerformance.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:
bashcurl 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
- Which share class is this, and does the ISIN match the one you hold?
- What is the as-of date, and is it the same for every block? (Holdings often lag performance by a month.)
- Is the fee the factsheet TER or the KID total? They differ.
- Are the returns cumulative or annualised, and in which currency?
- Do the breakdown weights sum to roughly 100, and if not, why (cash, derivatives, only top ten shown)?
- 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.