ETFHoldingsFundamentals

Physical vs synthetic ETF replication: what the holdings list really shows

Full replication, optimised sampling and swap-based ETFs: how each works, what the holdings show, counterparty exposure, and how to detect the method in data.Published 14 September 2026 · 6 min read · by FundFacts API

Two ETFs can track the same index, publish the same benchmark name and show similar returns, and still hold completely different securities. The reason is the replication method: how the fund actually obtains the index return. It affects what the holdings file contains, what a look-through of your portfolio will show, and what kind of risk sits inside the wrapper. This article explains the three methods, what each one's holdings list looks like, and how to detect the method from the fund's documents and from the JSON FundFacts API returns. It does not argue for one over another; each is a legitimate design with trade-offs the fund house documents.

The three methods

Full physical replication. The fund buys every constituent of the index at (approximately) its index weight. If the index has 500 names, the fund holds 500 names. This is the simplest to reason about and is common for indices with liquid, accessible constituents.

Optimised (or stratified) sampling. The fund holds a subset of the index chosen so that the portfolio's characteristics (country, sector, size, sometimes factor exposures) match the index closely, without buying every small or illiquid constituent. A global index with well over a thousand constituents might be tracked with a somewhat smaller number of holdings. The fund still owns real securities from the index; it just does not own all of them. See the replication method glossary entry for the terminology fund houses use.

Synthetic (swap-based) replication. The fund does not buy the index constituents. It holds a basket of securities (the substitute or collateral basket) and enters a total return swap with one or more counterparties, typically investment banks. Under the swap, the fund pays the counterparty the return of the basket it holds and receives the return of the index. The investor gets the index return; the securities in the fund are there to back the swap, not to represent the index. Two variants exist: the unfunded model, where the fund owns the basket outright, and the funded model, where the fund passes cash to the counterparty and receives collateral pledged in a segregated account.

What the holdings list shows for each

This is where the difference becomes visible to anyone reading data rather than marketing.

Full physicalOptimised samplingSynthetic
Number of holdings vs indexRoughly equalFewer, sometimes far fewerUnrelated to the index
Top holdingsIndex leaders at index weightsIndex leaders at close to index weightsWhatever is in the substitute basket
Names match the index?YesMostlyOften not: a Japanese equity basket can back a US index
Swap line in the holdingsNoneNonePresent, small positive or negative weight
Cash and derivativesSmall, for flowsSmall, plus futures for equitisationBasket plus swap

For a physical fund the top holdings tell you what you are exposed to. For a synthetic fund, the top holdings tell you what the fund owns as security, which is not the same thing. A swap-based ETF on a US large-cap index may list European or Japanese blue chips as its largest positions, because the basket is chosen for liquidity, custody convenience and regulatory eligibility, not for resemblance to the index. Its holdings count can be a few dozen or a few hundred regardless of the index size.

Fund houses that run synthetic ETFs publish the substitute basket and the swap counterparties daily or on their product page, and UCITS rules require the basket to meet diversification and quality criteria. So the information exists; it just means something different.

Counterparty exposure and collateral, briefly

A synthetic ETF's investor is exposed to the swap counterparty for the difference between the index value and the value of the basket or collateral. UCITS caps that net exposure to any single counterparty at 10% of the fund's net assets, and in practice most providers reset the swap (exchange the difference) frequently and hold collateral above the swap value, which keeps the actual exposure well below the cap. Many use several counterparties.

Physical ETFs are not exposure-free either: most lend out a portion of their securities to earn extra return, which creates a collateralised exposure to the borrower. The mechanics differ but the structure, a counterparty plus collateral held against it, rhymes. Both are disclosed in the prospectus and annual report. Which arrangement a given investor prefers is a matter of policy, not something a data feed can decide.

Why it matters for look-through

Portfolio look-through means decomposing a fund position into the underlying exposures, usually by sector and country, sometimes to the security level. The portfolio look-through use case describes the aggregation. Replication method changes what you should feed into it:

  • For physical and sampled funds, the published sector, geography and topHoldings describe the economic exposure. Use them directly, with the caveat that top holdings are a subset.
  • For synthetic funds, the published sector and country breakdowns are usually of the index, because that is the economic exposure the investor has. The topHoldings, however, are the substitute basket. Mixing the two in one look-through double counts: you would add the basket's Japanese banks to an exposure that is already 100% US technology by index.

A safe rule for a look-through engine: use exposure tables (sector, geography, region) for economic exposure, and use security-level holdings only when the replication is physical. When it is synthetic, treat the holdings as collateral and report them separately, if at all.

Detecting the method from the documents

The KID and the factsheet both say it, in slightly different words. Look for:

  • The phrase "physical replication", "full replication", "optimised sampling" or "sampling" in the investment objective or the "replication method" row of the key facts table.
  • "Swap-based", "synthetic", "unfunded swap", "indirect replication" or "total return swap" for synthetic funds. The objective usually reads "...aims to track the performance of the index through the use of derivatives" or similar.
  • A holdings count that is much smaller than the index, combined with top holdings that do not belong to the index.
  • A named swap counterparty (or several) in the fund's documentation.

Where the API surfaces it

FundFacts API does not have a dedicated replicationMethod field, but the method is readable from three fields that come straight from the fund's own documents.

investmentObjective carries the wording above. keyFacts.holdings gives the holdings count to compare with the index size. topHoldings shows whether the largest positions are index names or a basket. A small classifier over those three is enough to flag the method for most ETFs, and to flag "unsure" honestly for the rest.

typescript
// lib/replication.ts
type Method = "synthetic" | "physical_full" | "physical_sampled" | "unknown";
const SYNTHETIC = /\b(swap|synthetic|indirect replication|total return swap|derivatives? to (track|replicate))\b/i;
const SAMPLED = /\b(optimi[sz]ed|sampling|representative sample|stratified)\b/i;
const FULL = /\b(full(y)? replicat|physical(ly)? replicat|holds? (all|every) (of the )?(constituent|securit))/i;
export function detectReplication(d: any, indexSize?: number): { method: Method; evidence: string[] } {
const evidence: string[] = [];
const text: string = d.investmentObjective ?? "";
if (SYNTHETIC.test(text)) evidence.push("objective mentions swap/derivatives");
if (SAMPLED.test(text)) evidence.push("objective mentions sampling");
if (FULL.test(text)) evidence.push("objective mentions full/physical replication");
const swapLine = (d.topHoldings ?? []).some((h: any) => /swap/i.test(h.name));
if (swapLine) evidence.push("a swap appears in top holdings");
const n = Number(d.keyFacts?.holdings);
if (indexSize && n) {
const ratio = n / indexSize;
if (ratio >= 0.9) evidence.push(`holdings ${n} ≈ index ${indexSize}`);
else if (ratio < 0.6) evidence.push(`holdings ${n} well below index ${indexSize}`);
}
if (SYNTHETIC.test(text) || swapLine) return { method: "synthetic", evidence };
if (SAMPLED.test(text)) return { method: "physical_sampled", evidence };
if (FULL.test(text) || (indexSize && n / indexSize >= 0.9)) return { method: "physical_full", evidence };
return { method: "unknown", evidence };
}

Feed it the data object from a request and, where you know it, the constituent count of the benchmark named in benchmarkName:

typescript
const r = await fetch("https://fundfactsapi.com/api/v1/funds/IE00B4L5Y983", {
headers: { Authorization: `Bearer ${process.env.FUNDFACTS_API_KEY}` },
});
const { data, name } = await r.json();
console.log(name, detectReplication(data, 1400));
// example output (example values):
// iShares Core MSCI World UCITS ETF { method: "physical_sampled",
// evidence: [ "objective mentions sampling", "holdings 1344 well below index 1400" ] }

Treat the result as a hint to display next to the holdings panel, with the sentence from the objective as evidence, rather than as a fact to store silently. Where the objective is ambiguous, "unknown" is the right answer, and the fund's own KID is the tie-breaker. The ETF holdings API post covers the holdings fields themselves and their limits.

Summary

Full physical, optimised sampling and synthetic replication all deliver an index return by different routes. The holdings list of a physical or sampled ETF describes the economic exposure; the holdings list of a synthetic ETF describes the collateral behind a swap, while its exposure tables describe the index. Look-through engines, screeners and client reports need to know which they are reading. The method is stated in the fund's documents and readable from investmentObjective, keyFacts.holdings and topHoldings in the API response; for UCITS ETFs the disclosure is a requirement, not a courtesy. Try the classifier on your own ETFs with a free key and the field reference.

Try it on your own ISINs

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