Indian mutual fund data, one clean API.
Daily NAV for every AMFI scheme, full NAV history, 52-week and CAGR figures, and month-end portfolio holdings. Plain JSON, API-key auth, built to drop into apps and Google Sheets.
No card needed. Try the live demo on the right first, or browse funds in the explorer. Both use a shared demo key, so no sign-up either.
Loading…Loading…
Everything a fund screen needs
The pieces that free NAV-only APIs leave out, behind one key and one response format.
NAV and history
Latest and previous NAV with dates for every scheme, plus full history by scheme code or ISIN with start and end dates.
Holdings by month
Stocks, ISIN, sector and weight from each fund's month-end portfolio disclosure. Coverage is growing; see below for what is loaded today.
52-week and CAGR
52-week high and low, and 1, 3, 5 and 10 year CAGR computed from the stored history, so the numbers match the NAVs you fetch.
Search and lookup
Search by name, or look up by scheme code, ISIN, AMC or fund house. Compare up to five schemes in one call.
API keys and quotas
Each key has its own monthly quota and can be revoked at any time. Rate limit is 120 requests a minute.
Works in Sheets
A few lines of Apps Script turn any scheme code into a live NAV cell. The docs include a copy-paste function.
Call it from anywhere
One header, x-api-key. Every response uses the same envelope: status, statusCode, message, data.
curl -H "x-api-key: YOUR_KEY" \ "https://fin.ejiapi.com/api/mf/scheme-code/122639"
import requests
r = requests.get(
"https://fin.ejiapi.com/api/mf/scheme-code/122639",
headers={"x-api-key": "YOUR_KEY"},
timeout=30,
)
fund = r.json()["data"]
print(fund["schemeName"], fund["latestNav"], fund["latestNavDate"])
const res = await fetch("https://fin.ejiapi.com/api/mf/scheme-code/122639", {
headers: { "x-api-key": "YOUR_KEY" },
});
const { data } = await res.json();
console.log(data.schemeName, data.latestNav, data.latestNavDate);
// Extensions → Apps Script. Store the key under Project Settings → Script properties as EJI_KEY.
function FUNDNAV(code) {
const key = PropertiesService.getScriptProperties().getProperty("EJI_KEY");
const res = UrlFetchApp.fetch("https://fin.ejiapi.com/api/mf/scheme-code/" + code,
{ headers: { "x-api-key": key } });
return JSON.parse(res.getContentText()).data.latestNav;
}
// In a cell: =FUNDNAV(122639)
How it compares
Against the typical free, NAV-only fund API.
| EJI API | Free NAV-only APIs | |
|---|---|---|
| Scheme master and latest NAV | Yes | Yes |
| NAV history | Yes, by code or ISIN | Yes |
| Portfolio holdings (stock, sector, weight) | Yes, month-end, growing coverage | Usually not offered |
| 52-week high/low and CAGR | Computed for you | You compute it |
| Per-key quotas, revocable keys | Yes | Open, shared limits |
| Fixed JSON envelope with status codes | Yes | Varies |
Where the data comes from
No black boxes. Each field has a source you can check.
NAV
AMFI's published NAV file, refreshed every 6 hours. AMFI itself publishes the day's NAVs in the evening, so the date shown is the last published one.
History
Loaded from public historical NAV records and extended with each new daily NAV, stored per scheme code.
Holdings
Read from the AMC's own month-end portfolio disclosure files. Loaded today: PPFAS and DSP. More fund houses are being added. A fund title that cannot be matched exactly is skipped rather than guessed.
Free while we are in beta
Tell us what you are building and we will issue a key with a quota that fits.
Beta access
- All endpoints, including holdings and CAGR
- A monthly request quota set per key, raised on request
- 120 requests per minute
- No card needed, keys by email
Higher volume
- Larger quotas for production apps
- Priority on new AMC holdings coverage
- Pricing for paid plans will be announced before the beta ends
Questions
Do I need a key to try it?
/api/mf) and the health check are open to everyone. Everything else needs your own key.How fresh is the NAV?
latestNavDate can differ between schemes. That is the fund's own NAV date, not a delay on our side.