ETFIndex fundsPerformance

Tracking difference vs tracking error for index funds and ETFs

Tracking difference is what investors pay, tracking error is what traders watch. Definitions, formulas, drivers, and how to compute TD from calendar returns.Published 9 September 2026 · 5 min read · by FundFacts API

Every index fund and ETF publishes a number that describes how well it follows its index. The problem is that there are two such numbers, they are routinely confused, and they measure different things. Tracking difference is a return gap. Tracking error is the volatility of return gaps. This post defines both, gives the formulas, explains which one matters to whom, and shows how to compute tracking difference from the calendar-year data in a fund factsheet.

Definitions

[Tracking difference](/glossary/tracking-difference) (TD) is the difference between the fund's return and the index's return over a period:

text
TD = R_fund - R_index (same period, same currency)

A fund that returned 9.6% in a year when its index returned 10.0% has a tracking difference of -0.4 percentage points for that year. TD is usually negative, because the fund carries costs the index does not, but it can be positive.

[Tracking error](/glossary/tracking-error) (TE) is the standard deviation of the periodic return differences, annualised:

text
d_t = r_fund_t - r_index_t (daily, weekly or monthly)
TE = stdev(d_t) * sqrt(periods_per_year)

TE says nothing about direction. A fund that lags its index by exactly 0.2% every single period has a TD of -0.2% per period and a TE of zero. A fund that alternates +1% and -1% relative to the index has an average TD near zero and a meaningful TE.

Tracking differenceTracking error
What it measuresReturn gap over a periodDispersion of return gaps
SignSigned, usually negativeAlways positive
UnitPercentage points per periodPercent, annualised
HorizonLong: 1, 3, 5 yearsShort: daily or weekly differences
Who cares mostBuy-and-hold investorsTraders, hedgers, market makers
Relation to feesRoughly minus the TER, plus adjustmentsLargely independent of fees

Why TD is what investors pay

For an investor who holds the fund for years, what matters is the total return received compared with the index they intended to own. That is the cumulative tracking difference, and it compounds: a TD of -0.3% a year over ten years leaves roughly 3% less than the index (1 - 0.997^10 ≈ 2.96%). The TER is a published estimate of one component of TD; the realised TD is the number that actually shows up in the account. See TER and ongoing charges explained for what is and is not inside the TER.

Why TE is what traders care about

Anyone who holds the fund for days, or uses it to hedge or arbitrage against the index, cares about whether the fund moves with the index each day, not about the annual gap. A high TE means the fund's daily behaviour is noisier relative to the index, which widens hedging error, complicates pairs trades and, for market makers, raises the cost of quoting tight spreads. TE is also the standard measure for comparing replication methods: full replication, optimised sampling and synthetic replication produce visibly different TE profiles.

What drives each

DriverEffect on TDEffect on TE
TER / ongoing chargesNegative, steady, roughly minus the TERNone, deducted smoothly
Securities lending revenuePositive, smallSlightly positive
Withholding tax vs index assumptionPositive or negative depending on domicile and index rulesSmall
Sampling / optimisationEither signPositive, the main source for large or illiquid indices
Cash dragNegative in rising markets, positive in falling onesPositive
Rebalancing and transaction costsNegativePositive around index rebalances
Swap fees (synthetic)NegativeVery low, which is the point of the structure
Fair-value pricing, holiday mismatchesNeutral over timePositive on daily data

Withholding tax deserves a note. Net total return indices assume a specific withholding rate on dividends. A fund domiciled in a jurisdiction with favourable tax treaties can pay a lower rate than the index assumes, which shows up as positive TD relative to a net index and has nothing to do with skill. Always compare a fund with its own stated benchmark, not with a generic index you picked.

Computing TD from calendar returns

FundFacts API returns the fund's and its benchmark's calendar-year returns as parallel arrays, read from the factsheet:

json
{
"benchmarkName": "Example Developed Markets Net Total Return USD Index",
"calendarReturns": {
"years": [2021, 2022, 2023, 2024, 2025],
"fund": [21.6, -18.0, 23.5, 18.4, 12.1],
"benchmark": [21.8, -18.1, 23.8, 18.7, 12.4]
}
}

Example values. Compute the yearly TD and its mean:

python
import os
import statistics
import requests
isin = os.environ.get("ISIN", "IE00B4L5Y983")
res = requests.get(
f"https://fundfactsapi.com/api/v1/funds/{isin}",
headers={"Authorization": f"Bearer {os.environ['FUNDFACTS_API_KEY']}"},
)
res.raise_for_status()
data = res.json()["data"]
cr = data["calendarReturns"]
rows = [
(y, f, b, f - b)
for y, f, b in zip(cr["years"], cr["fund"], cr["benchmark"])
if f is not None and b is not None
]
for year, fund, bench, td in rows:
print(f"{year}: fund {fund:6.2f}% index {bench:6.2f}% TD {td:+.2f} pp")
tds = [td for *_, td in rows]
print(f"mean TD {statistics.mean(tds):+.2f} pp over {len(tds)} years")
print(f"TER {data['headlineMetrics']['ter']}% benchmark: {data['benchmarkName']}")

With the example values the yearly TDs are -0.2, +0.1, -0.3, -0.3 and -0.3, and the mean is -0.2 percentage points. A TD close to minus the TER is the normal case for a physically replicated fund. A TD noticeably better than minus the TER points to lending income or a withholding-tax advantage; noticeably worse points to sampling, cash drag, or a benchmark mismatch.

Do not compute TE from five annual points. Five observations give a meaningless standard deviation, and annual differences hide the daily behaviour TE is meant to capture. For TE you need a daily or weekly fund series, which indexedPerformance.points provides for the fund side, plus the matching index series, and then the stdev * sqrt(N) formula above.

Caveats: net, gross or price return benchmark

The biggest source of misleading tracking numbers is comparing against the wrong flavour of index. The same index typically comes in three versions:

  • Price return ignores dividends. A fund compared against it appears to beat the index by roughly the dividend yield.
  • Gross total return reinvests dividends with no tax deducted. A fund compared against it looks worse than it is, because no fund can collect gross dividends.
  • Net total return reinvests dividends after an assumed withholding tax. This is what most UCITS index funds use as their official benchmark and it is the fairest comparison.

Read benchmarkName and look for "Net", "NR" or "NTR" versus "Gross", "GR", "TR" or nothing at all. If the factsheet benchmark is a price index, the reported calendarReturns.benchmark will make TD look generous; flag it in your output rather than silently accepting it.

Two more checks before publishing a TD figure:

  • Currency. The benchmark must be in the share-class currency (keyFacts.currency). A EUR share class measured against a USD index produces a TD that is mostly foreign exchange.
  • Distributing share classes. The fund return must be total return with distributions reinvested. Factsheet calendar returns are, but if you rebuild returns from raw NAV you must add distributions back.

Using it in a product

An ETF comparison site can show a realised TD table next to the TER for every index fund in a category, computed identically from calendarReturns so that funds from different houses are comparable. Pair it with headlineMetrics.ter and benchmarkName so users see both the promised cost and the delivered one. Create a free key to pull the data for the ISINs you care about; the same response also carries the holdings and exposures for the portfolio side of the analysis.

Try it on your own ISINs

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