Built and run by one person.
Three Upgrades on the India Mutual Fund NAV API. Easier to Pull, Whatever You Already Use.

Three Upgrades on the India Mutual Fund NAV API. Easier to Pull, Whatever You Already Use.

Published: August 28, 2026

Three upgrades on the India mutual fund NAV API last week, to get data into whatever you already work in. Should make it easier for anyone using Power Query, Excel WEBSERVICE or an HTML tracker.

The all-scheme file now comes back compressed. It was going out at 9.3 MB and arrives at about 1.1 MB, same file and same link, so an Excel or Power Query import is roughly three times faster. Nothing changes at your end.

Any NAV call can now come back as CSV. Add format=csv and you get plain rows instead of JSON, so Power Query reads it in one step and there is nothing to unpack.

And the bulk download files can now be fetched from a browser. They were missing the header. That is in place now, so you can pull the data straight into a web page or your own HTML tool.

Free, no sign up, no key. Every scheme from April 2006, updated three times a day.

Docs

Using WEBSERVICE one fund at a time?

If you are using Excel WEBSERVICE one fund at a time for a long list, that can error out. Excel fires those calls together, so they reach my backend as a burst and some can get refused. Instead you can pass a concatenated string of scheme codes to the batch endpoint, up to 50 in a single call, and it flows straight into your sheet and sits nicely in rows. No JSON parsing needed.

The same endpoint takes a whole list. Use schemes= with commas instead of scheme= with a single code, add format=csv, and up to 50 funds come back as plain rows in one call.

Here is an example you can paste straight into a cell and it will work. Ten funds, one request.

=LET(raw,IFERROR(WEBSERVICE("https://api.tigzig.com/mf/v1/nav?schemes=120564,141925,118275,119076,118535,118955,148990,120166,122639,119718&latest=true&format=csv"),""),IF(LEN(raw)<50,"no data back yet - the call is slow or it failed, press F9 to retry",LET(rws,TEXTSPLIT(raw,,CHAR(10)),keep,IFERROR(TEXTBEFORE(rws,",",3),""),TEXTSPLIT(TEXTJOIN(CHAR(10),TRUE,keep),",",CHAR(10)))))

Keep your own list of codes in a column, join it with TEXTJOIN, and build the URL from that. Then it is one formula for the whole tracker rather than one per fund.

I had my AI (Claude Code) set up the formula and it works. For any changes, just share it with any AI (including the regular ChatGPT) and it will modify the formula for you or help you debug as you apply to your trackers.

tigzig.com/apis/mf-nav

If you want to go deeper, some useful guides

tigzig.com/mfpro

API Docs. For you: tigzig.com/apis/mf-nav. For your AI: api.tigzig.com/mf/v1/openapi.json

MFPRO Docs hub. tigzig.com/mfpro ➜ Docs. Covers how the data is built, the data dictionary and other docs.

Getting an error. The FAQ, the errors people actually hit: tigzig.com/post/mf-nav-api-faq-aug2026

ISIN comes back empty? Checker at isin.tigzig.com, and why one fund has ten identifiers: tigzig.com/post/isin-checker-mutual-fund-identifiers-aug2026

SIF codes are not on the mutual fund API. That data is separate: sif.tigzig.com

Pulling more, calling less. Three ways to cut your call count: tigzig.com/post/mfpro-nav-fewer-calls-batch-files-parquet-aug2026

The scheme master in one small file: tigzig.com/post/mfpro-scheme-master-download-aug2026

Into Excel, a few clicks, no code: tigzig.com/post/mfpro-nav-into-excel-aug2026

Categories changed this year. SEBI reissued the framework, what moved: tigzig.com/post/sebi-mf-categorisation-changes-jul2026

Cross-tab every scheme by category: tigzig.com/post/mfpro-scheme-explorer-sebi-categories-jul2026


Working on something similar? How I work covers the rates, the availability and what I take on.