September 22, 2026 · 11 min read
Morningstar Scraper: $5.00 per 1,000 results (2026)
This Actor retrieves data for stocks and ETFs from Morningstar, delivering a dataset of 12 controls and 1 required field that includes intraday prices, market caps, and trading volumes. The scraper bypasses technical challenges using a headless browser to access live quote services without requiring an API key or account. It provides real-time equity data but does not support mutual funds, bonds, or historical price series. This tool is designed for quantitative analysts and developers building trading dashboards, but it is not for those requiring deep historical fundamental records.
What does a Morningstar Scraper run cost?
Each result costs $0.005 on the free tier, which is $5.00 per 1,000 results. Starting a run is charged separately at $0.01 per GB of Actor memory.
| Apify plan | Per result | Per 1,000 results |
|---|---|---|
| FREE | $0.005 | $5.00 |
| BRONZE | $0.00433 | $4.33 |
| SILVER | $0.00367 | $3.67 |
| GOLD | $0.003 | $3.00 |
| PLATINUM | $0.003 | $3.00 |
| DIAMOND | $0.003 | $3.00 |
The cost is $0.005 per result on the free tier, making the total spend dependent on the number of tickers or the maxItems cap. The movers and search modes are the most expensive because they can return many records per run, so testing with a small maxItems value is the most economical way to start.
How do you run Morningstar Scraper from the API?
The schema marks 1 of its 12 controls as required: mode. Nothing in the payload below is illustrative. Those are the schema's prefilled defaults for Morningstar Scraper, so the request works once your token is in place.
Call the synchronous endpoint to start a run and receive dataset items in one request:
curl -X POST "https://api.apify.com/v2/acts/crawlerbros~morningstar-scraper/run-sync-get-dataset-items?token=$APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{"mode":"search","searchQuery":"apple","securityType":"stock","exchange":"xnas","tickers":[],"moversGroup":"gainers","maxItems":50}'
The same run from Python, using the official client:
from apify_client import ApifyClient
client = ApifyClient("<YOUR_APIFY_TOKEN>")
run_input = {
"mode": "search",
"searchQuery": "apple",
"securityType": "stock",
"exchange": "xnas",
"tickers": [],
"moversGroup": "gainers",
"maxItems": 50
}
run = client.actor("crawlerbros~morningstar-scraper").call(run_input=run_input)
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item)
And from Node.js:
import { ApifyClient } from 'apify-client'
const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' })
const input = {
"mode": "search",
"searchQuery": "apple",
"securityType": "stock",
"exchange": "xnas",
"tickers": [],
"moversGroup": "gainers",
"maxItems": 50
}
const run = await client.actor('crawlerbros~morningstar-scraper').call(input)
const { items } = await client.dataset(run.defaultDatasetId).listItems()
console.log(items)
Because the call is synchronous, your client waits for the whole run. Keep it for exploration. For scheduled work, start the run without waiting and collect the dataset afterwards, so network trouble costs you a retry rather than the results.
Which Morningstar Scraper inputs matter, and which can you skip?
The mode selector is the most critical control as it defines whether the scraper uses search, ticker, or URL-based logic. Most practitioners should start with byTicker and only use the moversGroup settings when they specifically need top-performing or high-volume stocks during US market hours.
mode(string): What to fetch. Default:"search".searchQuery(string): Company name or ticker, e.g.apple,tsla,vanguard(mode=search). Default:"".securityType(string): Stock or ETF universe (mode=search). Default:"stock".exchange(string): Primary exchange used for ticker lookups (mode=byTicker). Default:"xnas".tickers(array): Stock/ETF ticker symbols on the selected exchange, e.g.AAPL,MSFT. Default:[].startUrls(array): Morningstar quote URLs, e.g.https://www.morningstar.com/stocks/xnas/aapl/quoteorhttps://www.morningstar.com/etfs/arcx/ivv/quote.moversGroup(string): Which movers list to fetch (mode=movers). Available ~15 minutes after US market open. Default:"gainers".minPrice(number): Only emit quotes with last price >= this value.maxPrice(number): Only emit quotes with last price <= this value.minPercentChange(number): Only emit quotes with percent change >= this value (e.g. 2.5).maxPercentChange(number): Only emit quotes with percent change <= this value.maxItems(integer): Hard cap on emitted records. Default:50.
Fixed-choice controls: mode accepts search, byTicker, byUrl, movers; securityType accepts stock, etf; exchange accepts xnas, xnys, xase, xotc; moversGroup accepts gainers, losers, actives.
Move one control per run. Compare each new sample against the previous one and keep the accepted, uncertain, and excluded counts side by side. A control that increases volume without improving decision quality still bills at $0.005 per result.
What does Morningstar Scraper return?
The resulting records contain essential trading metrics like lastPrice, bidPrice, and askPrice, which are ideal for populating real-time dashboards. Note that the output excludes historical OHLCV data and focuses exclusively on the current trading session and the 52-week price range.
The Actor does not publish a per-field output list, so treat the first run as the specification: collect a small sample and record which fields are present before anything downstream depends on them.
How do you build the workflow end to end?
Open Morningstar Scraper and work through these in order. Each step ends with something to check, so a bad configuration surfaces on a small run rather than a scheduled one.
- Select byTicker in the mode control to fetch specific equity data for your portfolio.
- Choose the target exchange from the dropdown menu, such as xnas for NASDAQ or xnys for NYSE.
- Add your list of symbols to the tickers array to define exactly which securities to scrape.
- Set maxItems to a small number like 5 to verify the output schema without consuming your full budget.
- Run the Actor and inspect the dataset for fields like lastPrice and marketCap to ensure the data matches your requirements.
- Update your input to movers mode and set moversGroup to gainers if you need to identify high-performing stocks.
- Apply filters like minPercentChange to restrict the results to significant market movements.
- Save the configuration and use the API endpoint to integrate the performanceID into your internal trading dashboard.
How do you apply it? Three worked playbooks
These are Morningstar Scraper's own documented use cases, each worked through as an operating pattern rather than a description.
Use case 1: Trading dashboards
Outcome: one-shot quote snapshots with day and year ranges
Configure: Set mode to byTicker and provide an array of symbols in the tickers field.
Working method: Execute the Actor for a specific list of stocks and ETFs to retrieve a point-in-time snapshot of their performance.
Deliverable: A JSON dataset containing lastPrice, netChange, and dayHighPrice for every valid ticker provided.
Stop condition: The tickers array is empty or the exchange selected does not match the symbols provided.
Use case 2: Screening
Outcome: filter by price and % change across search results and movers
Configure: Set mode to search and enter the company name in the searchQuery field.
Working method: Input a broad search term like 'vanguard' to find all related securities and their current trading status.
Deliverable: An array of search results including ticker symbols and exchange names for matching entities.
Stop condition: The maxItems limit is reached before the desired security is found in the results.
Use case 3: Market commentary
Outcome: top movers with volumes and market caps
Configure: Set mode to movers and choose gainers, losers, or actives in moversGroup.
Working method: Run the Actor during US market hours to extract the most volatile or high-volume stocks of the day.
Deliverable: A ranked list of market movers including volume, marketCap, and percentNetChange.
Stop condition: The output contains zero records due to the market being closed or in the pre-opening phase.
What breaks, and how do you design around it?
- Test a small, representative input against your acceptance criteria before increasing scope.
If you hit the exchange restriction in byTicker mode, use the startUrls mode to scrape tickers from multiple exchanges in a single run. When the movers lists return no data, ensure you are not running the scraper during the first 15 minutes of the market session.
When should you not use Morningstar Scraper?
Do not use this Actor if your project requires mutual fund data or bond pricing, as these security types use a different identification system not currently supported. If you need historical price data spanning several years, an official financial API or a specialized historical data provider is the correct choice. For high-frequency trading where latency must be kept in the millisecond range, scraping a public website through a headless browser is significantly too slow compared to a direct exchange feed. If your objective is simply to track major market indices like the Dow Jones or S&P 500, a lighter scraper or a basic finance API would be more efficient than this full-scale Morningstar browser automation.
What should you check before trusting the output?
- Verify that lastPrice is a positive number and not zero for active securities.
- Confirm that performanceID is present in the record to ensure the security is cross-referenced correctly.
- Check that records from movers mode contain a rank value between 1 and the specified maxItems.
- Ensure that currency matches the expected exchange denomination, such as USD for US exchanges.
- Monitor for an empty result set if running movers mode within 15 minutes of the US market open.
None of this proves a record is correct. It gives a scheduled Morningstar Scraper run defined points where it should stop instead of quietly passing bad data downstream.
Frequently asked questions
What is the cost of scraping 1,000 results from Morningstar?
Using the free tier, the price is $5.00 per 1,000 results, which is $0.005 per result. This allows you to scale your data collection predictably based on the number of tickers or movers you choose to monitor.
Why are my mover results returning empty?
Morningstar typically populates its top gainers, losers, and most active lists approximately 15 minutes after the US market opens. If you run the Actor before the market opens or immediately at the bell, you will receive a 0-record result.
Does this scraper require a Morningstar account?
No account or API key is needed. The scraper uses a headless browser to solve anti-bot challenges and access the public data endpoints used by the Morningstar website, making the process transparent for the user.
Can I scrape international stocks with this tool?
The byTicker mode supports US exchanges like NASDAQ and NYSE. For international stocks or ETFs on other exchanges, you should use the byUrl mode and provide the specific Morningstar quote page URL for those securities.
How fresh is the price data returned by the Actor?
The data is live. Every run queries Morningstar's real-time quote service directly, so the figures you receive reflect the most recent data published on the Morningstar website at the moment of execution.
Where to go next
Start with the Morningstar Scraper Actor page for the current input schema, pricing tier, and run history.
If you are comparing approaches rather than committing to one Actor, these category pages list every option we publish:
- Search results scrapers covers 11 Actors in this family.
- Product and price scrapers covers 378 Actors in this family.
Readers running Morningstar Scraper commonly pair it with:
- RateYourMusic Album & Chart Scraper Scrape RateYourMusic - the world's largest music ratings community.
- Corporations Canada Registry Scraper Look up federally incorporated Canadian companies on Corporations Canada (ised-isde.canada.ca).
- VLR.gg Valorant Esports Scraper Scrape Valorant esports data from VLR.gg - world and regional team rankings, match results, upcoming matches, and tournament events.
- Monday.com Marketplace Scraper Scrape the monday.com App Marketplace, browse featured, trending, editor's choice, and new apps; browse by category; or search for specific apps.
- Boxing Stats Scraper Scrape boxing fighter profiles and fight records using TheSportsDB free API.
- Dev.to Scraper Scrape Dev.to, the popular blogging platform for developers (forem.com).
- OpenAlex Scraper Scrape OpenAlex the free, open catalog of 250M+ scholarly works, authors, institutions, and concepts.
- FBref Football Statistics Scraper Scrape FBref (fbref.com) - the Football Reference site.
Related guides:
- Vivian Health Jobs Scraper: Build 3 Robust Healthcare Data Playbooks
- United Real Estate Homes for Sale Scraper: 3 Practical Use Cases
- Uganda Business Directory Scraper: 3 Operational Workflows
- Tally (Cactus) DAO Governance Scraper: $5.00 per 1,000 results (2026)
Resources
Actor documentation, input schema, and pricing: verified against the published Actor on 2026-09-22.
Actor last updated by its maintainers on 2026-08-04.
Run outcome figures cover the 30 day public window ending 2026-09-22.
● Featured actors
Morningstar Scraper
Scrape Morningstar - stock and ETF quotes with intraday and yearly price data, market cap, volume, pre/post-market prices, plus top gainers/losers/actives. Search by company name or fetch by ticker or quote URL.
Run on Apify ↗