---
title: "How to read a fund factsheet, section by section (with the JSON field for each)"
description: "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."
canonical: https://fundfactsapi.com/blog/how-to-read-a-fund-factsheet
published: 2026-09-15
updated: 2026-10-06
publisher: FundFacts API
---

# 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.

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](https://fundfactsapi.com/), 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 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](https://fundfactsapi.com/glossary/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](https://fundfactsapi.com/blog/physical-vs-synthetic-etf-replication) 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](https://fundfactsapi.com/blog/srri-risk-indicator-explained) 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](https://fundfactsapi.com/blog/tracking-difference-vs-tracking-error) |

Statistics depend on the window and frequency. FundFacts returns the fund house's own volatility, Sharpe and drawdown when its documents state them. Otherwise it computes them from the issuer's total-return history over the last 36 complete monthly returns, with the Sharpe ratio taken over a same-currency money-market fund (and not computed when there is none, or for a money-market fund). The [NAV series post](https://fundfactsapi.com/blog/volatility-sharpe-max-drawdown-from-nav-series) 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](https://fundfactsapi.com/blog/ter-ongoing-charges-fund-fees) 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, and the array keeps ten even when the issuer publishes a full holdings file (up to 50 for a few issuers' product data); the file's total number of positions goes to `keyFacts.holdings`.
- `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](https://fundfactsapi.com/blog/etf-holdings-api) 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](https://fundfactsapi.com/blog/cumulative-vs-annualised-vs-calendar-returns) 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](https://fundfactsapi.com/docs/fields) documents every key, and the [factsheet glossary entry](https://fundfactsapi.com/glossary/factsheet) 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](https://fundfactsapi.com/blog/fund-factsheet-automation) describes the parsing problem and why a structured API is the shorter route. A [free key](https://fundfactsapi.com/signup) 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.

## About FundFacts API

FundFacts turns any fund or ETF ISIN into one dated factsheet (fees and KID costs, the 1–7 risk indicator, holdings, sector and country exposure, returns) read from the fund house's own documents: as a client-ready PDF under your firm's name for advisers and wealth managers, as JSON through its API for developers, or inside ChatGPT and Claude through its MCP server.

FundFacts works inside ChatGPT and Claude as a connector (a remote MCP server): ask about any fund or ETF by ISIN, ticker or name and the assistant answers from FundFacts' dated figures, fees, risk, holdings, exposure and returns, with fund cards, side-by-side comparisons, holdings overlap and portfolio look-through.

- Free API key, no card: https://fundfactsapi.com/signup
- Documentation: https://fundfactsapi.com/docs (OpenAPI: https://fundfactsapi.com/openapi.json)
- MCP server: https://fundfactsapi.com/api/mcp (set-up for every client: https://fundfactsapi.com/mcp-server)
- Pricing: https://fundfactsapi.com/pricing
- Site index for AI assistants: https://fundfactsapi.com/llms.txt
- Informational data, not investment advice.
