Morningstar APImorningstar.in ↗
Access NAV, expense ratios, star ratings, holdings, risk metrics, and analyst pillar ratings for Indian mutual funds via the Morningstar India API.
What is the Morningstar API?
The Morningstar India API covers 7 endpoints for querying Indian mutual funds and stocks, from initial search through detailed analyst analysis. Start with search_funds to resolve a fund name or ticker into a Morningstar fund ID, then call endpoints for NAV and expense ratios, trailing returns, portfolio holdings with sector weights, risk ratings across 3-, 5-, and 10-year windows, and Morningstar analyst pillar ratings.
curl -X GET 'https://api.parse.bot/scraper/ec82e258-fc0e-4fb4-bf98-edad2c8df9b7/search_funds?query=HDFC' \ -H 'X-API-Key: $PARSE_API_KEY'
Typed, relational, agent-ready
A generated client with real types, enums, and the links between objects — the structure a flat JSON response can't carry. Autocompletes in your editor and reads cleanly to coding agents.
- Fully typed · autocompletes
- Objects link to objects
- Typed errors & pagination
Typed Python client. Set up the SDK in your uv project, then pull this API’s typed client:
uv add parse-sdk uv run parse init uv run parse add --marketplace morningstar-in-api
uv run parse add --marketplace pulls a pinned snapshot of this canonical API — it won’t change underneath you. To customize it, subscribe and swap to your own copy.
"""Walkthrough: Morningstar India SDK — search funds, drill into details."""
from parse_apis.morningstar_india_api import MorningstarIndia, FundNotFound
client = MorningstarIndia()
# Search for HDFC funds — limit caps total items fetched
for fund in client.funds.search(query="HDFC", limit=5):
print(fund.description, fund.type, fund.exchange)
# Drill into a single fund's overview
fund = client.funds.search(query="SBI Blue Chip", limit=1).first()
if fund:
overview = fund.overview()
print(overview.quote.investment_name, overview.quote.nav, overview.quote.category_name)
# Check performance data
perf = fund.performance()
print(perf.trailing_returns.category_name, perf.trailing_returns.as_of_date)
# Get portfolio holdings
portfolio = fund.detailed_portfolio()
summary = portfolio.holdings.holding_summary
print(summary.number_of_holding, summary.top_holding_weighting)
# Risk rating
risk = fund.risk_rating()
print(risk.risk_rating.category_name, risk.risk_rating.for_3_year)
# Typed error handling for a non-existent fund
try:
bad_fund = client.fund(id="INVALID_ID_XXXX")
bad_fund.overview()
except FundNotFound as exc:
print(f"Fund not found: {exc.fund_id}")
print("exercised: funds.search / overview / performance / detailed_portfolio / risk_rating")
Search for mutual funds and stocks by name or ticker on Morningstar India. Returns up to 20 matching results with fund IDs, types, tickers, and exchange information. Use the returned fund ID to fetch detailed data from other endpoints.
| Param | Type | Description |
|---|---|---|
| queryrequired | string | Search keyword (fund name, ticker, or company name) |
{
"type": "object",
"fields": {
"results": "array of fund/stock search result objects with id, type, ticker, description, exchange"
},
"sample": {
"data": {
"results": [
{
"id": "F00000T3MO",
"type": "Fund",
"ticker": "-",
"exchange": "-",
"description": "HDFC Arbitrage Fund - Direct Plan - Growth Option"
},
{
"id": "0P0000C3NZ",
"type": "Stock",
"ticker": "HDFCBANK",
"exchange": "NSE",
"description": "HDFC Bank Ltd"
}
]
},
"status": "success"
}
}About the Morningstar API
What the API covers
The API exposes seven endpoints focused on Indian mutual funds listed on Morningstar India. search_funds accepts a keyword—fund name, ticker, or company name—and returns up to 20 results, each with a fund id, type, ticker, description, and exchange. That fund_id (formatted like F00000XXXX) is the key passed to every other endpoint.
Fund data: quotes, performance, and growth
get_fund_overview returns a quote object containing NAV, expenseRatio, inceptionDate, morningstarRating, categoryName, isin, and many additional metadata fields, alongside growth_of_10k series for the fund, its category, and a benchmark index. get_fund_performance goes deeper with trailing_returns that include columnDefs, rows for fund/category/index/percentileRank comparisons, currentValues, and an asOfDate. Both endpoints also return a performance_summary object when available.
Portfolio and holdings
get_fund_portfolio returns asset_allocation broken down into stock, bond, cash, and other buckets with net, long, and short figures plus category comparisons, alongside portfolio_stats with ownership zone scores (scaledSizeScore, scaledStyleScore). For individual positions, get_fund_detailed_portfolio provides an equityHoldingPage with a holdingList that includes securityName, weighting, sector, market value, share count, and holding trend data, plus a holdingSummary with total holding count and top-holding weighting.
Risk and analyst ratings
get_fund_risk_rating returns Morningstar risk and return classification relative to category for 3-, 5-, and 10-year periods (for3Year, for5Year, for10Year), each with riskVsCategory, returnVsCategory, and numberOfFunds. Note that some fund types such as Arbitrage funds may return null risk values. get_fund_morningstar_analysis returns analyst pillar scores for process, people, parent, price, and performance; for funds not eligible for a rating, a reasonMissing object explains why with a title and description.
The Morningstar API is a managed, monitored endpoint for morningstar.in — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when morningstar.in changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.
This isn't an official morningstar.in API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.
Will this API break when the source site changes?+
Is this an official API from the source site?+
Can I fix or extend this API myself if I need a new endpoint or field?+
What happens if I call an endpoint that has an issue?+
- Aggregate NAV and expense ratios across fund categories to build an Indian mutual fund comparison tool
- Track trailing return percentile ranks from
get_fund_performanceto screen top-quartile funds in a given category - Pull
growth_of_10kseries fromget_fund_overviewto chart fund vs. benchmark historical growth - Extract
equityHoldingPageholdings data for portfolio overlap analysis across multiple funds - Use
asset_allocationfromget_fund_portfolioto classify funds by equity/debt/cash exposure for risk profiling - Fetch analyst pillar ratings from
get_fund_morningstar_analysisto surface qualitatively rated funds in an advisory platform - Retrieve 3-, 5-, and 10-year
riskVsCategoryscores for quantitative risk-adjusted fund ranking
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 100 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
One credit = one API call regardless of which marketplace API you call. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.
Does Morningstar India have an official developer API?+
What does `get_fund_risk_rating` return, and when might values be null?+
get_fund_risk_rating returns riskVsCategory and returnVsCategory classifications for 3-, 5-, and 10-year periods, along with the number of funds in the category for each window. For certain fund types—Arbitrage funds are documented as one example—risk values may be null rather than a classification string.Does the API return SIP calculators, fund manager bios, or fund house-level data?+
Is historical NAV time-series data available, or only the current NAV?+
quote object from get_fund_overview returns the current NAV. Historical point-in-time NAV series are not a dedicated endpoint. The growth_of_10k arrays provide date/value pairs as a proxy for fund value over time, but are indexed to a 10,000-unit baseline rather than raw NAV. You can fork this API on Parse and revise it to add a dedicated historical NAV endpoint.How are funds identified across endpoints?+
fund_id string in the format F00000XXXX. This ID is returned in the results array from search_funds. The same ID appears in the fund_id field echoed back by each subsequent endpoint response, which can be useful for correlating responses when making multiple parallel requests.