Morningstar APImorningstar.com.au ↗
Retrieve Australian stock, ETF, and managed fund data from Morningstar Australia. 12 endpoints covering financials, dividends, valuations, ownership, and more.
What is the Morningstar API?
The Morningstar Australia API gives developers access to 12 endpoints covering ASX-listed stocks, ETFs, and managed funds. You can pull Morningstar star ratings, multi-year financial statements, dividend history with franking rates, institutional ownership, and live market indices. The get_security_summary endpoint alone returns fair value estimates, moat ratings, ESG sustainability scores, and valuation ratios in a single call, while get_financial_statements delivers hierarchical income statement, balance sheet, and cash flow line items across annual or quarterly periods.
curl -X GET 'https://api.parse.bot/scraper/4904c488-66a8-49ff-a753-bd2399155900/search_securities?limit=5&query=BHP' \ -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-com-au-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.
"""
Morningstar Australia API - Usage Example
Get your API key from: https://parse.bot/settings
"""
from parse_apis.morningstar_australia_api import (
Morningstar,
Security,
ArticleCategory,
StatementType,
TimePeriod,
SecurityNotFound,
)
client = Morningstar(api_key="YOUR_API_KEY")
# Search for securities by name or ticker
for security in client.securities.search(query="BHP", limit=3):
print(security.name, security.symbol, security.exchange_code)
# Get market overview with indices, currencies, and commodities
overview = client.marketoverviews.get()
for index in overview.equity:
print(index.name, index.ticker, index.last.value, index.last.percent_change)
# List upcoming ASX dividends
for dividend in client.upcomingdividends.list(limit=5):
print(dividend.ticker, dividend.name, dividend.pay_date, dividend.div_cash_amount)
# Get news articles filtered by category
for article in client.articles.list(category=ArticleCategory.STOCKS, limit=3):
print(article.title, article.author, article.date)
# Construct a security directly and drill into sub-resources
bhp = Security(_api=client, id="0P00006WAE", symbol="BHP", exchange_code="ASX")
# Get summary overview (star rating, fundamentals, sustainability)
summary = bhp.summary.get()
print(summary.overview.star_rating, summary.overview.sector, summary.overview.market_cap)
# Get historical prices for 3 months
prices = bhp.historical_prices.get(period=TimePeriod.THREE_MONTHS)
print(prices.change.last_price, prices.change.net_change_percent)
# Get financial statements with typed error handling
try:
financials = bhp.financials.get(statement=StatementType.INCOME_STATEMENT)
for row in financials.rows:
print(row.label, row.data_point_id)
except SecurityNotFound as exc:
print(f"Security not found: {exc.symbol} on {exc.exchange}")
print("exercised: securities.search / marketoverviews.get / upcomingdividends.list / articles.list / summary.get / historical_prices.get / financials.get")
Search for stocks, ETFs, and managed funds by name or ticker symbol. Returns matching securities across all security types (stocks, ETFs, managed funds). Results include the security ID, performanceId, type, name, symbol, and exchange code needed to call other endpoints.
| Param | Type | Description |
|---|---|---|
| limit | integer | Maximum number of results to return. |
| queryrequired | string | Search term such as a company name or ticker symbol. |
{
"type": "object",
"fields": {
"results": "array of security objects with id, performanceId, securityType, name, symbol, exchangeCode"
},
"sample": {
"data": {
"results": [
{
"id": "0P00006WAE",
"apir": null,
"name": "BHP Group Ltd",
"symbol": "BHP",
"exchangeId": "EX$$$$XASX",
"exchangeCode": "ASX",
"securityType": "ST",
"performanceId": "0P00006WAE"
}
]
},
"status": "success"
}
}About the Morningstar API
Security Search and Identification
Start with search_securities, which accepts a query string (company name or ticker) and an optional limit. Results return each security's id, performanceId, securityType, symbol, and exchangeCode. The performanceId and exchangeCode values are required inputs for most other endpoints, so this is the typical entry point for any lookup flow.
Fundamentals and Financial Data
get_security_summary returns a broad snapshot including the Morningstar starRating, morningstarFundamentals (fair value, moat, stewardship), sustainability scores, marketCap, priceEarnings, and dividendYield. Fields marked _PO_ in the response require a premium Morningstar account. For deeper analysis, get_security_key_metrics provides multi-year growth rates for revenue, operating income, net income, and EPS, alongside profitability ratios (ROA, ROE, ROIC) and financial health metrics (current ratio, debt/equity). get_financial_statements accepts symbol, exchange, a statement parameter (incomeStatement, balanceSheet, or cashFlow), and a period flag (A for annual, Q for quarterly), returning hierarchical rows with label, dataPointId, and datum arrays matched to columnDefs year labels.
Dividends, Valuation, and Ownership
get_dividends returns per-share dividend amounts, trailing yield, payout ratio, and a full dividendHistory array with ex-date, declaration date, record date, payable date, type, and amount — including the franked rate, which is especially relevant for Australian investors. get_upcoming_dividends covers ASX-listed dividends within the next 90 days, sorted ascending by pay date. get_valuation provides both collapsed ratios (P/S, P/E, P/CF, P/B) and expanded metrics (PEG, Earnings Yield, EV, EV/EBIT, EV/EBITDA) with current values and 5-year averages. get_ownership returns the top 5 institutional and top 5 mutual fund holders with shares held, percentage of total shares, and change amounts.
Market Overview and News
get_market_overview requires no inputs and returns major equity indices (including ASX 200, S&P 500, NASDAQ), currency pairs (AUD/USD and others), and commodities (Gold, Oil, Silver) with latest prices and percentage changes. get_news_and_insights accepts an optional category and limit, returning Morningstar analyst article titles, URLs, authors, and publication dates. get_historical_prices returns a daily price time series as an array of ISO datetime/value pairs plus a change object with netChange and netChangePercent over the selected period.
The Morningstar API is a managed, monitored endpoint for morningstar.com.au — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when morningstar.com.au 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.com.au 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?+
- Screen ASX stocks by Morningstar star rating, moat classification, and fair value estimate using
get_security_summary. - Build a dividend calendar for Australian investors by combining
get_upcoming_dividendswith per-security franking rates. - Backtest valuation strategies using multi-year P/E, EV/EBITDA, and EV/EBIT series from
get_valuation. - Construct a financial health dashboard tracking debt/equity, current ratio, and ROIC trends via
get_security_key_metrics. - Monitor institutional ownership changes for a watchlist by polling
get_ownershipfor top holder movements. - Populate a portfolio tracker with daily historical price series and net change data from
get_historical_prices. - Aggregate ASX dividend income projections by pulling per-share amounts and payout ratios from
get_dividends.
| 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 Australia have an official developer API?+
What does `get_financial_statements` return, and how do I choose between annual and quarterly data?+
columnDefs. Set the period parameter to 'A' for annual or 'Q' for quarterly. The statement parameter selects which report to return: 'incomeStatement', 'balanceSheet', or 'cashFlow'. Some line items are marked premium-only and will be empty for non-premium requests.Are managed funds and ETFs covered, or only ASX equities?+
search_securities returns results across all three securityType values, and endpoints like get_dividends and get_historical_prices work for any security type returned from the search. Coverage is primarily ASX-listed securities, though the search may surface securities on other exchanges.Does the API return analyst price targets or full Morningstar research reports?+
get_security_summary, plus analyst articles via get_news_and_insights, but does not expose full analyst research PDFs or explicit price targets as discrete fields. You can fork this API on Parse and revise it to add an endpoint targeting the relevant report data.How current is the market data returned by `get_market_overview` and `get_historical_prices`?+
change object includes a lastPriceDate field indicating the most recent data point. Intraday tick data is not available through these endpoints.