Morningstar APImorningstar.com ↗
Access Morningstar data via API: stock quotes, income statements, balance sheets, valuation metrics, ownership, dividends, and market movers. 11 endpoints.
What is the Morningstar API?
The Morningstar API exposes 11 endpoints covering real-time stock quotes, multi-year financial statements, valuation multiples, institutional ownership, dividends, and market movers. Starting with search_securities, you can resolve any company name or ticker to a Morningstar performanceID, then pass that ID to endpoints like get_income_statement or get_valuation_metrics to pull structured, historically deep financial data.
curl -X GET 'https://api.parse.bot/scraper/ff5e9ddb-e072-40f9-9cbb-800529fa46e5/search_securities?query=Apple' \ -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-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 Financial Data API — search, quote, financials, ownership, news."""
from parse_apis.morningstar_financial_data_api import Morningstar, SecurityNotFound
client = Morningstar()
# Search for securities and iterate results.
for security in client.securities.search(query="Apple", limit=3):
print(security.name, security.ticker, security.exchange)
# Drill into a single security for detailed operations.
apple = client.securities.get(performance_id="0P000000GY")
print(apple.name, apple.ticker, apple.exchange_country)
# Get real-time quote data.
quote = apple.get_quote()
print(quote.last_price, quote.volume, quote.trading_status)
# Get income statement financials.
income = apple.get_income_statement()
print(income.column_defs, income.currency)
# Get top institutional holders — bounded iteration.
for holder in apple.get_ownership(limit=3):
print(holder.name, holder.total_shares_held, holder.current_shares)
# Get latest news for the security.
for article in apple.get_news(limit=2):
print(article.title, article.display_date)
# Market movers — top-level operation.
overview = client.marketoverviews.get_movers()
print(overview.updated_on)
# Typed error handling.
try:
client.securities.get(performance_id="INVALID_ID")
except SecurityNotFound as exc:
print(f"Not found: {exc.performance_id}")
print("exercised: search / get / get_quote / get_income_statement / get_ownership / get_news / get_movers")
Full-text search for financial instruments by name or ticker symbol. Returns matching securities (stocks, funds, ETFs) with their Morningstar performance IDs, and related news/article content. Use the performanceID from results to call other endpoints.
| Param | Type | Description |
|---|---|---|
| queryrequired | string | Search keyword such as a company name or ticker symbol (e.g. Apple, AAPL, MSFT) |
{
"type": "object",
"fields": {
"content": "array of related news/article stories with headlines, URLs, and dates",
"entities": "array of matching securities with performanceID, ticker, exchange, name, investmentType"
},
"sample": {
"data": {
"content": [
{
"type": "story",
"score": 9.08,
"value": {
"id": "NQKEC7AJYE775VOHWNIXESET5E",
"format": "Article",
"headline": {
"title": "Apple: Hey Siri",
"subtitle": "We think Apple stock is moderately overvalued."
},
"displayDate": "2026-06-10",
"canonicalURL": "/stocks/apple-hey-siri"
}
}
],
"entities": [
{
"type": "security",
"score": 30.27,
"value": {
"name": "Apple Inc",
"ticker": "AAPL",
"exchange": "XNAS",
"companyID": "0C00000ADA",
"securityID": "0P000000GY",
"performanceID": "0P000000GY",
"investmentType": "EQ",
"exchangeCountry": "USA"
}
}
]
},
"status": "success"
}
}About the Morningstar API
Security Lookup and Quotes
All data-fetching endpoints center on a performance_id, which you obtain from search_securities. That endpoint accepts a company name or ticker symbol and returns matching securities with fields including ticker, exchange, investmentType, and performanceID, plus an array of related news articles. Once you have a performance_id, get_stock_quote returns real-time price data: lastPrice, netChange, percentNetChange, bidPrice, askPrice, volume, marketCap, and 52-week high/low — all keyed directly by the performance_id in the response object.
Financial Statements and Valuation
get_income_statement, get_balance_sheet, and get_cash_flow_statement each return a rows array of hierarchical line items. Each row carries a label, a datum array of values aligned to fiscal years listed in columnDefs (e.g., 2016 through TTM), and a subLevel array for child line items. get_valuation_metrics returns two objects — Collapsed for basic ratios (P/S, P/E, P/CF, P/B) and Expanded for advanced ratios including PEG, Earnings Yield, EV/EBIT, and EV/EBITDA — both with their own columnDefs spanning calendar years.
Ownership, Dividends, and News
get_ownership lists the top mutual fund and ETF holders of a security, returning each holder's name, ticker, currentShares, changeAmount, changePercentage, and date. The isRestricted boolean signals whether full data is gated at the access level returned. get_dividends_and_splits surfaces per-year dividend metrics (dividend per share, yield, payout ratio, ex-dividend dates) alongside a dividendData object with detailed history. get_stock_news takes a ticker and exchange code (e.g., XNAS, XNYS) and returns articles with title, subtitle, url, author, displayDate, and format.
Market Movers
get_market_movers requires no inputs and returns three arrays — gainers, losers, and actives — each with current price and percentage change. This endpoint reflects live US market data and returns empty arrays outside regular trading hours (9:30 AM–4:00 PM ET), so build your integration to handle that case.
The Morningstar API is a managed, monitored endpoint for morningstar.com — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when morningstar.com 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 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?+
- Build a stock screener that resolves tickers via
search_securitiesand displays real-time quotes fromget_stock_quote. - Construct multi-year financial models by pulling income statement, balance sheet, and cash flow data for side-by-side fiscal year comparison.
- Track institutional ownership shifts over time using
changeAmountandchangePercentagefields fromget_ownership. - Generate valuation dashboards showing P/E, EV/EBITDA, and PEG trends from
get_valuation_metricsacross multiple calendar years. - Monitor dividend history and payout ratio trends using
get_dividends_and_splitsfor income-focused portfolio analysis. - Surface daily market movers for a financial news feed using
get_market_moversduring US trading hours. - Aggregate recent analyst commentary and news for a given ticker using
get_stock_newswith exchange-specific filtering.
| 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 have an official developer API?+
What does `get_valuation_metrics` return, and how is it structured?+
Collapsed covers basic ratios (P/S, P/E, P/CF, P/B) and Expanded covers advanced ratios (P/Forward E, PEG, Earnings Yield, EV, EV/EBIT, EV/EBITDA). Each has its own rows array and columnDefs array of calendar years, so values are positionally aligned to years across both views.Does `get_market_movers` work at all times of day?+
gainers, losers, and actives arrays will be empty. The updatedOn ISO timestamp in the response indicates when the data was last refreshed.Does the API return quarterly financial statement data?+
get_income_statement, get_balance_sheet, and get_cash_flow_statement return annual figures with TTM (trailing twelve months) as the most recent column. You can fork this API on Parse and revise it to add a quarterly statement endpoint if that granularity is required.Is intraday price history or charting data available?+
get_stock_quote returns a point-in-time snapshot of the current price, change, and volume. Historical OHLCV time-series data is not exposed by any current endpoint. You can fork this API on Parse and revise it to add a historical price endpoint.