Mutual Fund NAV API (India): Free, No-Auth AMFI Data - Download All 20M+ NAVs in One Call
Published: June 12, 2026
If you have ever tried to get Indian mutual fund NAV data programmatically, you know the pain. AMFI publishes it, but as a giant daily text dump. Most "APIs" make you pull one scheme at a time, with rate limits, and only recent history.
So I built an open one. Free, no API key, no sign-up. And it does the thing I have not seen anyone else do: let you download the entire NAV history - every scheme, every day - in a single call.
What you get
- 20.4 million+ daily NAV records - and growing, refreshed daily from AMFI
- 18,000+ schemes - every live and historical AMFI scheme
- History back to October 2008 - not just the last couple of years
- Source: AMFI India (the official Association of Mutual Funds in India feed)
- No authentication. No key, no sign-up, no quota games. Just call it.
The endpoints
Base URL: https://api.tigzig.com/mf/v1. Interactive docs (Swagger UI): api.tigzig.com/mf/v1/docs.
1. Search for a scheme
Find a scheme code by name:
GET https://api.tigzig.com/mf/v1/search?q=hdfc flexi cap
Returns matching scheme codes and names:
{"query":"hdfc flexi","count":6,"results":[
{"scheme_code":118955,"scheme_name":"HDFC Flexi Cap Fund - Growth Option - Direct Plan"},
{"scheme_code":101762,"scheme_name":"HDFC Flexi Cap Fund - Growth Plan"}
]}
2. Get a scheme's full NAV history
Pass the scheme code. You get the ENTIRE history back - no pagination:
GET https://api.tigzig.com/mf/v1/nav?scheme=118955
Add &since=2020-01-01 to filter by date. In Python:
import requests
r = requests.get(
"https://api.tigzig.com/mf/v1/nav",
params={"scheme": 118955, "since": "2020-01-01"},
)
navs = r.json()
3. Download the WHOLE database in one call
This is the part that matters. Instead of looping over 18,000 schemes, grab everything at once - a single pre-generated file:
GET https://api.tigzig.com/mf/v1/download?format=parquet
Formats: parquet, csv.gz, tsv.gz, sqlite. The full file is ~130 MB for all 20M+ rows.
Load it straight into pandas:
import pandas as pd
df = pd.read_parquet("https://api.tigzig.com/mf/v1/download?format=parquet")
print(df.shape) # every scheme, every day - all 20M+ rows
Want file sizes and the last refresh time before you download? Hit the manifest:
GET https://api.tigzig.com/mf/v1/downloads/manifest
What you can build with it
- A returns calculator (1Y / 3Y / 5Y / SIP / rolling) over the full history
- Backtests, fund-of-funds, and rebalancing strategies
- Your own dashboards and notebooks, without scraping AMFI
- Research-grade history, no subscription paywall
Why one-call download matters
Every other route I have seen makes you paginate - one scheme, one request, rate-limited, often capped at recent history. For any real analysis you need all of it, locally. One call, one file, done. That is the whole point.
This is part of a small set of open data APIs I run - mutual fund NAVs, India corporate red-flag signals, and ~300 global macro indicators - all free, no auth, with a machine-readable catalog so AI agents can discover and use them. The same MF NAV data also powers the MFPRO analytics app.
Quick reference
| What | Endpoint |
|---|---|
| Search schemes | GET /mf/v1/search?q=... |
| Full NAV history (one scheme) | GET /mf/v1/nav?scheme=CODE&since=YYYY-MM-DD |
| Download everything | GET /mf/v1/download?format=parquet (or csv.gz, tsv.gz, sqlite) |
| File manifest | GET /mf/v1/downloads/manifest |
| Swagger docs | api.tigzig.com/mf/v1/docs |
Free to use. If it helps your work, a link back to tigzig.com is appreciated.