Built and run by one person.
Pulling Indian Mutual Fund NAVs One Scheme at a Time? Three Ways to Get the Same Data in Far Fewer Calls.

Pulling Indian Mutual Fund NAVs One Scheme at a Time? Three Ways to Get the Same Data in Far Fewer Calls.

Published: August 13, 2026

If you are pulling Indian mutual fund NAVs from the MFPro API one scheme at a time, there are three ways to get the same data in far fewer calls, and all three are already in the API.

All updated 3x a day.

Docs are at tigzig.com/apis/mf-nav.

What the docs cover, if you are deciding between the three

If you are deciding between the three, the docs go into the detail. The data dictionary lists every field in both files, how the data is built covers the sources and the three-times-a-day sync, and there is now a guides and FAQ page that collects the questions that come up most, including why a lookup returns nothing and why an AUM figure can look lower than the number published elsewhere.

All of it sits under Docs on the MFPRO App: tigzig.com -> MFPRO

And every page has a plain markdown version if you would rather hand it to an AI agent than read it yourself.

A fourth way, if you do not want the file on disk at all

And there is a fourth way if you do not want the file on disk at all. The full history file is parquet, and parquet supports range requests, so DuckDB or Polars can query it straight off the URL and pull only the bytes they actually need. Counting all 37 million rows moved under half a megabyte, and pulling one fund's complete history moved about 1.3 megabytes, out of a file of roughly 175 megabytes.

Detailed writeup here: Range requests on the MFPRO NAV file

Putting some numbers on it

To put some numbers on it, if you want every active fund's latest NAV each morning, that is about 8,600 schemes. One at a time is 8,600 calls, batched at 50 it comes down to about 172, and the latest file is a single request, roughly 10 MB as CSV or about 1 MB if you take the gzipped version. The data is the same in all three cases.

What counts as active, and how to check whether anything changed

On active, I work it out from the data, and a scheme counts as active if it has reported a NAV in the last 45 days. I kept that window much wider than it needs to be as a buffer and you can apply a further cut based on the nav date.

And if you are checking each day whether anything has changed, the files and the manifest both support conditional requests, so if you send If-None-Match or If-Modified-Since with what you already have you get a 304 back with no body at all, and you only pull the file on the days there is something new in it.