Indian financial market data can cost companies lakhs of rupees every year.
But a lot of the underlying data is already publicly available.
The expensive part isn't always the data itself. It's figuring out where it lives and how to reliably consume it.
If you've ever tried building something around Indian financial data, you've probably encountered the same problems: undocumented endpoints, APIs with strange headers, inconsistent file formats, identifier changes, historical gaps, and datasets spread across different public sources.
I've spent a lot of time digging through those problems.
So instead of keeping the findings in a pile of scripts and notes, I mapped the endpoints I could find and open-sourced them.
What's in the repository?
The repository currently documents public endpoints covering several areas of Indian financial data.
Mutual fund NAV data
Around 14,000 mutual fund schemes with more than 18 years of NAV history.
There are also parameterized APIs for retrieving historical NAV timelines.
Expense ratios
Daily Total Expense Ratio (TER) data, broken down across the available regulatory expense components.
NSE index data
Historical valuation metrics including:
The dataset covers 140+ NSE indices.
There's also historical Total Return Index (TRI) data for Nifty indices.
Industry AUM
Industry-wide mutual fund AUM statistics going back to 2009.
Corporate shareholding
Corporate shareholding data sourced from public iXBRL disclosures.
The goal isn't to build another financial-data product.
It's to make the underlying discovery work easier for developers building things on top of public data.
The interesting part: the data has traps
Finding an endpoint is only the beginning.
While mapping these sources, I ran into several things that could quietly cause problems in production.
Historical discontinuities
Some datasets have historical discontinuities around April 2019.
If you're building a long-term time series, you can't blindly assume that the data behaves consistently across the entire history.
Some files claim to be one format while actually containing data in another.
That can be particularly annoying when you're writing automated ingestion pipelines that trust file extensions or content types.
Fund identifiers aren't always stable
Mergers, rebranding and other changes can make fund identifier mappings surprisingly messy.
If you're maintaining historical data, you need to account for those relationships rather than treating every identifier as permanently immutable.
Here's one of my favorite examples.
There's a public corporate shareholding endpoint that appears to reject automated requests.
You might assume there's authentication, some elaborate anti-bot mechanism, or another access restriction involved.
In one case, the problem was simply the Origin header.
Remove it and the request works.
That's it.
One HTTP header was the difference between "this endpoint doesn't work" and getting the data immediately.
Why I open-sourced this
I've had to spend hours figuring out things that probably shouldn't take hours to figure out.
And I know I'm not the only developer doing it.
Someone building a portfolio tracker shouldn't have to spend days reverse-engineering network requests just to discover where historical data comes from.
Someone building a quantitative research tool shouldn't have to rediscover the same identifier mappings.
Someone building a fintech prototype shouldn't have to start from zero because the documentation around a public endpoint is scattered or nonexistent.
So I decided to put the findings in one place.
The repository is MIT licensed, so you can use it as a starting point for projects involving:
- Indian fintech
- Wealth management
- Quantitative research
- Portfolio tracking
- Market analytics
- Financial data pipelines
There are probably still gaps.
That's intentional.
I mapped what I could find, documented the behavior I encountered, and would rather have other developers extend it than keep trying to maintain a private collection of scripts.
One less thing to reverse-engineer
The data was public.
The documentation wasn't.
That's the problem I'm trying to solve with this repository.
If you're building something around Indian financial data, hopefully this saves you a few days of digging through network requests and figuring out why an otherwise perfectly reasonable API request gets rejected because of one header.
Repository: https://github.com/satwikbasu
If you know of other undocumented Indian market-data endpoints, PRs and contributions are very welcome.