Indian Mutual Fund NAV Scraper (AMFI)
Pricing
from $0.19 / 1,000 fund navs
Indian Mutual Fund NAV Scraper (AMFI)
Net asset values of Indian mutual fund schemes from AMFI's own published files. One row per scheme: scheme code, name, fund house, category, plan, ISINs, the NAV and the trading date it belongs to. Wound-up schemes frozen at an old value are left out. History back to 2010. $0.20 per 1,000 NAV rows.
Pricing
from $0.19 / 1,000 fund navs
Rating
0.0
(0)
Developer
Dami's Studio
Maintained by CommunityActor stats
0
Bookmarked
1
Total users
0
Monthly active users
4 days ago
Last modified
Categories
Share
Get the NAVs Indian mutual fund schemes publish through AMFI, each with the trading day it belongs to: one row per scheme with the scheme code, name, fund house, category, plan, option, ISINs and the NAV, or one row per scheme per day in history mode, back to 2010. Name the schemes by AMFI code, fund house, name or category, or take the whole market.
The catch is that AMFI's daily file is a register rather than a price list. On the day we measured it, about 40% of its rows were schemes that had stopped trading, some as far back as 2016, frozen at their last value. Anything older than your age limit is left out and not charged.
| Input | Latest or history, which schemes (by code, fund house, name or category), and age limits |
| Output | One row per scheme, or per scheme per day in history mode: code, name, fund house, category, plan, option, ISINs, NAV and its date |
| Ceiling | 50,000 rows and 366 days of history per run |
| Account needed | None |
| Price | $0.20 per 1,000 NAV rows on the Free plan, a little less on paid plans. The free plan's $5 a month covers about 25,000 |
🔍 What Indian Mutual Fund NAV Scraper does
In latest mode it reads AMFI's daily file: one row per scheme, carrying that scheme's most recent
published NAV. Every row says which trading day its value is for, in navDate, and how many days old
that was, in navAgeDays.
The whole file is checked before a single row is billed. If the newest NAV anywhere in it is older
than maxFileAgeDays, the run charges nothing and writes a free FILE_STALE row with the date it
found, because a file that has stopped moving still downloads normally. If the file's format changes
shape, the run stops the same way rather than guessing at columns.
In history mode it reads AMFI's date-ranged report instead, one row per scheme per day. Every row is
checked against the dates you asked for, and any outside them are dropped uncharged.
A NAV is struck once per valuation day and published in the evening, India time. There is no live price here, so once a day after the evening refresh is all you need.
Measured on 20 September 2026, on the file covering every scheme:
| NAV date on the row | Rows |
|---|---|
| 18 September 2026, the previous trading day | 7,982 |
| 20 September 2026, that morning | 706 |
| Anything earlier, back to April 2016 | 5,687 |
| Total rows in the file | 14,375 |
The rows dated that same morning are liquid and overnight schemes, which price every calendar day, weekends included.
📋 What data you get from each mutual fund scheme
| What you get | Field |
|---|---|
| AMFI's scheme code, the scheme name and the fund house | schemeCode, schemeName, fundHouse |
| The category it is filed under, and its type | category, categoryType |
| Plan and option | plan, option |
| The NAV as a number and as published, in rupees | nav, navRaw, currency |
| The trading day the NAV is for, and how old it is | navDate, navDateRaw, navAgeDays, navStale |
| The ISINs | isinGrowth, isinReinvestment |
| Which AMFI file it came from, and how fresh that file is | source, filePublishedAt, fileLatestNavDate |
▶️ How to scrape Indian mutual fund NAVs
- Open Indian Mutual Fund NAV Scraper and click Try for free.
- Leave What to read on latest, or pick history and fill History from and History to.
- Keep Which schemes on open, the form's starting choice, unless you want every scheme on the register.
- Narrow it with Scheme codes (optional) or Fund houses (optional), and set Maximum rows.
- Click Start, then download the dataset as CSV, JSON or Excel.
💰 How much does it cost to scrape mutual fund NAVs?
$0.20 per 1,000 NAV rows on the Free plan. Paid plans pay a little less: $0.198 on Starter, $0.196 on Scale and $0.194 on Business. On the free plan, the $5 Apify gives you each month covers about 25,000 NAV rows. The whole live market on a normal day, around 8,700 schemes, comes to under two dollars.
You pay for NAV rows and nothing else per row. The sample row and every diagnostic row are not charged, and neither are schemes your filters drop, schemes past your age limit, history rows outside your range, or any row of a run where the file failed a check. If you set a maximum charge on the run, it stops at that figure instead of going past it.
📥 What you give it
{"mode": "latest","universe": "open","fundHouses": ["HDFC Mutual Fund"],"categoryContains": ["Large Cap"],"maxItems": 200,"maxNavAgeDays": 7}
| Field | Default | What it is |
|---|---|---|
mode | latest | latest for the daily file, one row per scheme. history for a date range, one row per scheme per day. |
universe | all, the form starts on open | latest mode only. all (about 14,400 rows), open (about 9,600), close (about 4,700) or interval (about 40). open is the one most people want. |
maxItems | 1000 | Total rows, 1 to 50,000. Rows come in the file's own order, by category and fund house, so filter rather than raise this. |
maxNavAgeDays | 7 | latest mode only. A scheme whose last NAV is older than this many days is left out and not charged. 7 covers a weekend and a holiday. Raise it to 20000 for the whole register. |
maxFileAgeDays | 7 | latest mode only. If nothing in the file is newer than this, the run charges nothing. |
schemeCodes | none | AMFI scheme codes exactly as published, such as 119551. The cheapest way to track a fixed set every day. |
fundHouses | any | Part of the fund house name, any case. HDFC catches HDFC Mutual Fund. |
nameContains | any | Part of the scheme name, any case. Several terms mean any of them. |
categoryContains | any | Part of the category, any case, such as Large Cap, Liquid or ELSS. |
dateFrom | 6 days before dateTo | history mode only. 2026-09-01 or 01-Sep-2026. A range longer than 366 days is trimmed, and a backwards one swapped, each with a free INPUT_ADJUSTED row saying so. |
dateTo | today | history mode only, same formats. |
proxyUrls | none | Leave it empty for a normal run. Fill it only if you want the traffic to leave through your own servers, as http://user:pass@host:port. |
Any input at all starts a real read, even just maxItems. Only a completely empty input, {} sent
through the API, returns the free sample row.
📤 What you get back
A real row from a run on 30 September 2026:
{"ok": true,"charged": true,"recordType": "fund","schemeCode": "135762","schemeName": "Axis Children's Fund","fundHouse": "Axis Mutual Fund","category": "Open Ended Schemes (Children’s Fund - Childrens' Fund)","categoryType": "Open Ended","plan": "Direct Plan","option": "Growth Option","nav": 29.2283,"navRaw": "29.2283","currency": "INR","navDate": "2026-09-29","navDateRaw": "29-Sep-2026","navAgeDays": 1,"navStale": false,"isinGrowth": "INF846K01WO1","isinReinvestment": null,"source": "daily-file","filePublishedAt": "2026-09-30T02:28:33.000Z","scrapedAt": "2026-09-30T02:31:14.544Z","fileLatestNavDate": "2026-09-29"}
| Field | How to read it |
|---|---|
schemeCode | AMFI's own code and the key to use. It is stable across days, and it is the same in both modes while the name is not. |
schemeName | The name as the source writes it. The history report folds plan and option into the name, so match on schemeCode. |
category, categoryType | The category heading AMFI files the scheme under. Several categories appear under two spellings, Equity Scheme - and Equity Schemes -, so filter on a substring. |
plan, option | Direct Plan or Regular Plan, and growth, IDCW and the rest as published. option has hundreds of spellings, so treat it as text. |
nav, navRaw | The NAV in rupees, and the text exactly as published. A value that does not read as a number is left out, never turned into a zero. |
navDate, navAgeDays | The trading day the NAV belongs to, not the day you ran this, and how old that was. On a Monday morning the newest equity NAVs are Friday's. |
navStale | Always false on a row you receive, because anything past your limit is left out. |
isinGrowth, isinReinvestment | The ISINs, null where none is published. |
filePublishedAt, fileLatestNavDate | When the daily file was last written, and the newest NAV date anywhere in it. If the second is not close to today, nothing in the file is current. |
🧾 Reading the output
Three kinds of row can share a dataset, and charged is the field that separates them.
| Row | How to spot it | Billed |
|---|---|---|
| A NAV | charged: true | yes |
| The sample | _sample: true, charged: false | no |
| A diagnostic | _diagnostic: true, charged: false, an errorCode | no |
The sample row also says recordType: "fund", so filter on charged == true, not on recordType.
| Code | What it means |
|---|---|
FILE_STALE | The file downloaded fine, but its newest NAV is past maxFileAgeDays. |
ALL_STALE | Schemes matched your filters, but every one last published a NAV past maxNavAgeDays. Almost always wound-up schemes. |
NO_RESULTS | Nothing matched your filters, or a history range held no NAVs, such as a weekend. |
RANGE_MISMATCH | In history mode, rows came back dated outside your range and were dropped. |
INPUT_ADJUSTED | A history range was trimmed or swapped. The row says what changed. |
FORMAT_UNRECOGNISED, FORMAT_DRIFT | The file's header or column layout changed, so nothing was read as data. |
FEED_HTTP, FEED_UNREACHABLE, FEED_TRUNCATED, FEED_EMPTY, NO_DATE | The file answered with an error, could not be reached, stopped part-way, held no scheme rows, or carried no readable dates. |
TIME_BUDGET | The run ran out of time before every row was written. |
💡 What people use it for
- Keeping a portfolio tracker up to date without anyone retyping numbers off a website every evening.
- Filling in NAV history for a set of schemes after the fact, one run over a date range rather than a request per scheme per day.
- Reconciling a statement against the published value for the exact date on it, by scheme code.
- Keeping your own archive. AMFI overwrites the daily file in place, so the only way to have last Tuesday is to have saved last Tuesday.
🚧 What it does not do
- India only. AMFI publishes Indian schemes, every value in rupees.
- No live prices. One NAV per valuation day, published in the evening.
- Only the NAV. No assets under management, expense ratio, holdings, returns or ratings, because none of that is in the file.
- No advice. It does not rank schemes or calculate returns.
- No weekend NAVs for most schemes, and none on Indian public holidays, so a short history range can come back empty.
- Not a spread by default. A low
maxItemsgives you the first schemes in the file's order, not a sample of the market. Use the filters. - History is slow to start. The report is generated when asked for, so a long range can take 20 to 30 seconds before the first row. A month of the whole market is around 160,000 rows.
- It is not an official AMFI tool. Dami's Studio is independent and is not affiliated with or endorsed by AMFI, or by any other company named on this page.
🧭 Which market data scraper do you need?
| If you want | Use |
|---|---|
| Stock, ETF, index, FX and crypto quotes with daily price history | Yahoo Finance Scraper |
| Coin prices, market caps and rankings | CoinGecko Scraper |
| Price, liquidity and volume of a DEX trading pair | DexScreener Pair Price & Liquidity Scraper |
| The daily Crypto Fear and Greed reading, back to 2018 | Crypto Fear and Greed Index Scraper |
| Large Polymarket trades and the wallets behind them | Polymarket Whale Tracker |
| Company filings by keyword, ticker or CIK | SEC EDGAR Scraper |
| Indian mutual fund NAVs, today's or back to 2010 | This one |
❓ Questions people ask
Is the NAV live?
No, and it cannot be. A fund's NAV is struck once per valuation day from its closing holdings.
navDate tells you which day.
Why would a row be dated years ago?
It would not, unless you raised maxNavAgeDays. The file keeps wound-up schemes frozen at their
final value, and those are left out by default.
How do I track just a few schemes?
Put their codes in schemeCodes. You pay only for the rows that come back.
How do I find a scheme code?
Run it once with nameContains set to part of the name and read schemeCode off the rows. Names
change wording, codes do not.
When should I run it each day?
Once a day in the evening, India time, is the right pace. Key on schemeCode plus navDate to match
rows across runs.
Can I call it from code or connect it to an AI assistant?
Yes. The API tab has ready-made
code for Python, JavaScript and the command line. For Claude, ChatGPT or another MCP client, connect
https://mcp.apify.com/?tools=fetch-actor-details,dami_studio/mutual-fund-nav-scraper. Either way the
run happens on your Apify account at the same price.
Is it legal to use AMFI's NAV data?
AMFI publishes these files openly for investors, and they describe funds, not people. Apify's write-up on the legality of web scraping is a good starting point, and we are not lawyers.
🆘 If something breaks
Open the Issues tab on the actor page and send the run ID with the input you used. The
errorCode and details on a diagnostic row usually name the reason already.