ETF desk: method
Code: pipeline/tipsheet/compute/etf.py (build) and publish/etf.py (bundles). Shared AMFI readers: compute/amfi.py. Tests: pipeline/tests/test_etf.py.
What is measured
For every exchange-traded fund listed on NSE, day by day, as far back as both the exchange price and the AMFI NAV exist:
- Premium or discount: the exchange close divided by the same day’s NAV, minus one. Measured only on days the ETF traded.
- Liquidity: traded value in rupees crore, and its median over the last 20 sessions. A session with no trade counts as zero.
- Tracking difference: the ETF’s annualised NAV total return minus its benchmark’s annualised total return, over 1 and 3 years, in percentage points. A negative number means the ETF lagged.
- Costs and size: the latest total expense ratio (TER) and the latest quarterly average AUM.
Sources
| What | Dataset (Data bank warehouse) | From |
|---|---|---|
| Closes, traded value, ISIN | nse_bhavcopy and its eras, series EQ | 2002 for the oldest ETFs; ISINs printed from 2011-06-22 |
| NAV | amfi_nav_history and its eras, amfi_nav_latest | 2006-04-03 |
| Benchmarks | nifty_index_total_returns via compute/indices.load_tri (bad prints repaired) | index launch dates |
| Gold benchmark (rough) | domestic gold price in rupees from asset_tri_daily.parquet | 2005 |
| Distributions and splits | stocks_events_corporate_actions (ETF ISINs) | 2001 |
| TER | amfi_ter_daily* | 2018-04 |
| AUM | amfi_aum_schemewise (quarterly average, rupees lakh) | 2006 |
| AMFI’s own tracking difference | amfi_tracking_difference | 2022-05 |
How ETFs are matched to AMFI schemes
- The universe. Every NSE security in series EQ with a mutual-fund ISIN (
INF…). Before NSE printed ISINs, a symbol’s earlier rows take the symbol’s first ISIN, if that ISIN was already trading in the first month ISINs were printed. - By ISIN. The ISIN appears in AMFI NAV history or NAVAll.
- By symbol chain. The same NSE symbol continues under a later ISIN that did match. ISINs change at unit splits and AMC mergers.
- By NAV fit. The close tracks one AMFI ETF scheme at a constant unit factor on at least 90% of 20 or more overlapping days, within ±3%.
- Candidates from the same AMC are tried first. The AMC is identified from the ISIN’s issuer prefix.
- If two schemes fit about equally well (for example, gold ETFs from different AMCs priced per gram), the ISIN is left unmatched rather than guessed.
- One ETF can span several AMFI codes. ISINs that share an AMFI code, or follow each other on one symbol, form one ETF. Its NAV is assembled from all those codes in time order.
- AMCs re-code schemes when they merge. The BeES funds went from Benchmark to Goldman Sachs to Reliance to Nippon, and each step brought a new AMFI code.
- Remaining traded days without a NAV are filled the same way, by NAV fit against AMFI ETF codes no other ETF has claimed. The 2006–2011 Benchmark codes carry no ISIN at all.
Result (2026-09-30):
- Matched: 438 of 444 NSE
INFISINs (98.6%), covering 99.85% of all ETF traded value since 2011. - Unmatched (6):
- four Franklin close-ended capital-protection funds from 2007–2012, which are not ETFs
- the pre-2015 Kotak Gold ETF ISIN and the pre-2016 ICICI Gold ETF ISIN, where the fit was ambiguous between several gold ETFs
- ETFs: 368 in all, 351 live.
- 260 equity, 40 debt (20 of them liquid), 26 gold, 19 silver and 6 international.
- 98.5% of traded days have a same-day NAV.
Unit splits
ETFs split their units, and Nippon’s in particular have. AMFI and the exchange do not always apply a split on the same day.
- NAV split. A step in NAV equal to a clean factor (2, 4, 5, 10, 20, 25, 50, 100, 1000, or their inverses), within 10%, is treated as a split.
- Checked against price. The close is checked for the same step within seven days.
- Price-to-NAV unit factor. Constant between detected steps (NAV steps, price steps and AMFI code switches), set from each stretch’s median close-to-NAV ratio. A genuine 20% premium that lasts a few weeks is therefore never mistaken for a unit change.
- Result: 70 NAV splits found, 64 confirmed by price. Of the 91 splits recorded in the corporate-action table for matched ETFs, 87 are found in NAV.
Tracking difference
- NAV total return: splits undone, and distributions from the corporate-action table added back on the first NAV date on or after the ex-date. Most ETFs are growth schemes and never distribute; the old BeES funds did.
- Benchmark mapping:
- Equity ETFs are matched to an NSE total-return index by name. The longest index name contained in the scheme name wins, so a Nifty 500 ETF maps to Nifty 500, not Nifty 50.
- 212 of the 260 live equity ETFs have a benchmark. The rest track BSE or MSCI indices, which are not in the warehouse.
- Gold ETFs are compared with the domestic gold price in rupees, including import duty. This is a rough check: it is not the LBMA-based benchmark AMFI uses, and the series updates with a lag.
- Windows: calendar 1 and 3 years ending at each month-end. Start and end must each lie within seven days of a common NAV and benchmark date.
Agreement with AMFI’s own disclosure.
- AMFI’s
period_date(the 1st of a month) refers to the end of that same month. Ours agree far better on that reading (median absolute difference 0.003 points) than on the previous month-end (0.026). - Equity ETFs, 4,678 ETF-months, 156 ETFs, 2022-05 to 2026-08:
- median absolute difference 0.0025 percentage points
- 97.5% within 0.10 points; 98.5% within 0.25 points
- The rest are mostly months around distributions or splits, where a one-day placement difference moves a 1-year return.
- Latest month, per ETF: 88% within 0.10 points and 98% within 0.25 points (n = 170).
- Gold: our rough check sits a median 0.10 points from AMFI’s, and only half the months fall within 0.10. It is labelled rough everywhere.
Caveats
- Timing. The close is at 15:30 and NAV is struck on end-of-day prices, so they are not simultaneous. For domestic equity ETFs the gap is minutes and the premium is meaningful.
- For ETFs that hold foreign shares, the gap is hours of foreign trading, so the premium mixes mispricing with timing.
- Those six ETFs are tagged
internationaland kept out of the domestic aggregates. - Separately, overseas investment limits have stopped creations at times. Their premiums of about 20% in the last 60 sessions (Motilal Oswal Nasdaq 100, Nasdaq Q50, FANG+ and S&P Top 50; Mirae Hang Seng TECH) are real and persistent, not timing.
- The close of an illiquid ETF can be a stale last trade, so its premium is noisy. Single-day premiums above 60% in absolute terms are dropped as bad prints.
- Liquid ETFs keep NAV near Rs 1,000 and pay a daily dividend, so their premium is zero by construction. They have their own aggregate and no detail pages.
- TER is matched by scheme name: 98.9% of live ETFs. From April 2026 AMFI’s printed total includes month-to-date brokerage, so the base expense ratio is shown where it is printed.
- AUM is the quarterly average, not month-end.
Bundles
| Logical name | What it is |
|---|---|
etf/universe | One row per live ETF: category, benchmark, AUM, TER, 1- and 3-year tracking difference (ours and AMFI’s), median premium over the last 60 sessions, latest premium, median traded value (20 and 60 sessions), first date with both price and NAV, whether a detail page exists. Compact table (columns + rows) |
etf/premium/<group>_weekly | equity, gold, silver, debt, liquid, international. Per week: median of the daily cross-sectional median premium, with quartiles and the number of ETFs |
etf/detail/<symbol> | Top 40 non-liquid ETFs by traded value. Weekly premium, 20-session median traded value, NAV TR and benchmark TR rebased to 100, 1-year tracking difference at month-ends. meta.splits lists detected splits |
etf/stats/premium_median_{equity,gold,silver,international} | Stat bundles of the daily median premium |
etf/stats/traded_value_all_etfs_20d | Total ETF traded value, 20-session average, Rs crore a session |
etf/stats/td_1y_median_equity | Monthly median 1-year tracking difference across equity ETFs |
Derived tables in .cache/derived:
etf_universe.parquetetf_daily.parquetetf_td_monthly.parquet(with AMFI’s figures joined)etf_splits.parquetetf_isin_match.parquetetf_premium_by_category_daily.parquetetf_checks.json, which holds all the numbers above
What the data says (2026-09-30)
- Domestic equity ETFs trade close to NAV. The median premium over the last 60 sessions is +0.03%. The share of traded equity-ETF days more than 1% away from NAV fell from 40–55% in 2008–2014 to 1–2% in 2025–26.
- Tracking difference. The median 1-year figure for equity ETFs is −0.23 points, and the middle half sits between −0.43 and −0.10. Across equity ETFs it moves closely with TER (correlation −0.71), so cost explains most of it. Factor ETFs (alpha, momentum) lag their indices most, by 1 to 1.6 points.
- Gold ETFs traded at sustained discounts in 2015–2017 (a median of −1.9%, −2.9% and −1.0% a year across all of them). They have been at small premiums since 2024.
- ETF trading has exploded. Average daily traded value across all ETFs was about Rs 60 crore in 2011, Rs 470 crore in 2022, Rs 2,510 crore in 2025 and Rs 5,840 crore so far in 2026.
- Silver, gold and liquid ETFs now lead.
- Nippon Silver ETF has the highest median traded value over the last 60 sessions, about Rs 405 crore a session.