Morningstar Fund & ETF Scraper
Pricing
from $2.70 / 1,000 investments
Morningstar Fund & ETF Scraper
Scrape public Morningstar data for stocks, mutual funds, and ETFs. Get prices, ratings, fees, assets, holdings, sector exposure, source IDs, and audit facts from URLs, symbols, or search phrases.
Pricing
from $2.70 / 1,000 investments
Rating
0.0
(0)
Developer
Maxime Dupré
Maintained by CommunityActor stats
0
Bookmarked
12
Total users
5
Monthly active users
4 days ago
Last modified
Categories
Share
📈 Morningstar research data for stocks, funds, and ETFs
Investors, analysts, researchers, and developers can collect public data from Morningstar for stocks, mutual funds, and ETFs. Submit Morningstar URLs, symbols, fund identifiers, or search phrases, then save source-backed rows with prices, ratings, fees, assets, holdings, sector exposure, source IDs, and audit facts for review, exports, and downstream workflows.
- Compare fund fees, ratings, assets, holdings, and returns with Morningstar Mutual Fund Data.
- Review public prices, valuation, sector, and industry fields with Morningstar Stock Data.
- Pull ETF categories, ratings, fees, returns, holdings, and exposure with Morningstar ETF Data.
- Collect mixed Morningstar URLs, symbols, and phrases with Morningstar Data Scraper.
- Reuse the main public investment collection flow with Morningstar Scraper.
📦 Morningstar investment rows
Each saved row represents one public Morningstar stock, mutual fund, or ETF investment. The shared row shape keeps the submitted target, instrument type, source identity, quote fields, research fields, portfolio fields, and extra source-visible facts together. Missing public values stay null or in empty arrays when Morningstar does not show them.
The Actor accepts public source pages only. It does not collect private portfolios, logged-in dashboards, paid Morningstar Direct data, alerts, recommendations, analyst summaries, or investment advice.
▶️ Run Morningstar collections
- Open the Input tab.
- Add one Morningstar URL, symbol, ticker, fund identifier, or search phrase per line in Morningstar targets.
- Choose Asset scope when a search phrase should return only stocks, mutual funds, or ETFs.
- Set Search results per target for phrase discovery. Leave it empty to return all available results until the source is exhausted.
- Start the Actor and open the dataset.
Exact URLs, symbols, and fund identifiers resolve to their matching source type before phrase discovery. If the same source investment is found through more than one submitted value, the Actor saves the first eligible match and skips later matches of that investment. The saved row describes that first match.
You can export the dataset as JSON, CSV, Excel, XML, RSS, or HTML. You can also read the rows through the Apify API after the run finishes.
⚙️ Input
Use one target per line. You can submit a full public Morningstar quote URL, a stock ticker, a mutual fund symbol, an ETF symbol, a fund identifier such as 0P0001PHV0, or a search phrase such as Vanguard index fund. The input accepts up to 500 targets. Exact URLs, symbols, and fund identifiers are resolved first, while Asset scope applies to search phrase discovery.
Input fields
| Field | Type | What it does |
|---|---|---|
targets | array of strings, required | Lists the Morningstar URLs, symbols, tickers, fund identifiers, or search phrases to collect, with one value per line. |
assetScope | string, optional | Limits search phrase matches to all, stocks, funds, or etfs. Exact URLs, symbols, and fund identifiers still resolve to their matching type. |
maxSearchResultsPerTarget | integer, optional | Sets the number of matches to collect for each search phrase. Leave it empty to return all available results until the source is exhausted. Exact URLs, symbols, and fund identifiers return their direct match. |
Default input
The hosted default input for a successful QA run is:
{"targets": ["AAPL","VFIAX","VOO","https://www.morningstar.com/stocks/xnas/aapl/quote","Vanguard 500"],"assetScope": "all","maxSearchResultsPerTarget": 5}
🧾 Output
Run output
| Field | Type | What it does |
|---|---|---|
results | URL string | Opens the default dataset with successful public Morningstar rows. |
Stocks, mutual funds, and ETFs use the same dataset row shape. Optional source fields can be null, and optional arrays can be empty when Morningstar does not show a value.
Dataset row fields
| Field | Type | What it does |
|---|---|---|
target | string, required | Submitted URL, symbol, ticker, fund identifier, or search phrase that produced the row. |
instrumentType | string, required | Morningstar result type: stock, fund, or etf. |
symbol | string or null | Source ticker, fund symbol, or ETF symbol when Morningstar exposes it. |
exchange | string or null | Source exchange or market code when exposed. |
name | string, required | Source display name for the security, fund, or ETF. |
sourceId | string, required | Canonical Morningstar path after the domain, used for audit, reruns, and URL reconstruction. |
currency | string or null | ISO currency code when identifiable from the source value. |
price | number or null | Current or latest source-visible price. |
priceChange | number or null | Absolute price change when Morningstar exposes it. |
priceChangePercent | number or null | Percentage price change when Morningstar exposes it. |
tradingVolume | number or null | Source-visible trading volume for the latest quote period. |
marketCap | number or null | Market capitalization as a number when visible. |
peRatio | number or null | Price-to-earnings ratio when visible. |
dividendYieldPercent | number or null | Dividend yield percentage when visible. |
beta | number or null | Source-visible beta value when available. |
fiftyTwoWeekRange | object or null | Contains the source 52-week low and high prices. |
fiftyTwoWeekRange.low | number or null | 52-week low price. |
fiftyTwoWeekRange.high | number or null | 52-week high price. |
fairValue | number or null | Morningstar fair value estimate when source-visible. |
starRating | number or null | Morningstar star rating when source-visible. |
economicMoat | string or null | Morningstar economic moat label when source-visible. |
sector | string or null | Source-visible sector classification. |
industry | string or null | Source-visible industry classification. |
category | string or null | Morningstar category for funds or ETFs when visible. |
expenseRatioPercent | number or null | Expense ratio percentage for funds or ETFs when visible. |
netAssets | number or null | Net assets as a number when visible. |
fundFamily | string or null | Fund family or provider name when visible. |
investmentStyle | string or null | Morningstar investment style label when visible. |
returns | object | Contains common-period source-visible return percentages. |
returns.ytdPercent | number or null | Year-to-date return percentage. |
returns.oneYearPercent | number or null | One-year return percentage. |
returns.threeYearPercent | number or null | Three-year return percentage. |
returns.fiveYearPercent | number or null | Five-year return percentage. |
holdings | array of holding objects | Top holdings when Morningstar exposes them. |
holdings[].name | string | Holding name. |
holdings[].symbol | string or null | Holding symbol when visible. |
holdings[].weightPercent | number or null | Portfolio weight percentage when visible. |
sectorExposure | array of objects | Sector or portfolio exposure labels and weights when Morningstar exposes them. |
sectorExposure[].sector | string | Sector or exposure label. |
sectorExposure[].weightPercent | number or null | Exposure weight percentage when visible. |
sourceFacts | array of source fact objects | Additional source-visible label and value pairs useful for audit. |
sourceFacts[].label | string | Source-visible fact label. |
sourceFacts[].value | string, number, boolean, or null | Source-visible fact value. |
Example stock row from the current beta run
{"target": "AAPL","instrumentType": "stock","symbol": "AAPL","exchange": "XNAS","name": "Apple Inc","sourceId": "stocks/xnas/aapl/quote","currency": "USD","price": 330.32,"priceChange": -2.7,"priceChangePercent": -0.81,"tradingVolume": 36000000,"marketCap": 4820000000000,"peRatio": 38.68,"dividendYieldPercent": 0.32,"beta": 0.698551,"fiftyTwoWeekRange": {"low": 243.42,"high": 345.34},"fairValue": null,"starRating": null,"economicMoat": null,"sector": "Technology","industry": "Consumer Electronics","category": null,"expenseRatioPercent": null,"netAssets": null,"fundFamily": null,"investmentStyle": "Large Core","returns": {"ytdPercent": 21.79798,"oneYearPercent": 29.72402,"threeYearPercent": 24.87343,"fiveYearPercent": 18.63467},"holdings": [],"sectorExposure": [],"sourceFacts": [{"label": "Previous Close Price","value": "$333.02"},{"label": "Day Range","value": "$325.81–332.48"},{"label": "52-Week Range","value": "$243.42–345.34"},{"label": "Bid/Ask","value": "$330.10 / $330.25"},{"label": "Shares Outstanding","value": "14.59B"},{"label": "Market Cap","value": "$4.82T"},{"label": "Volume/Avg","value": "36M / 47M"},{"label": "Price/Earnings (Normalized)","value": "38.68"},{"label": "Price/Sales","value": "10.54"},{"label": "Dividend Yield (Trailing)","value": "0.32%"},{"label": "Dividend Yield (Forward)","value": "0.32%"},{"label": "Dividend Payment Schedule","value": "Feb, May, Aug, Nov"},{"label": "Total Yield","value": "2.01%"},{"label": "Sector","value": "Technology"},{"label": "Industry","value": "Consumer Electronics"},{"label": "Stock Style Box","value": "Large Core"},{"label": "Total Number of Employees","value": "166,000"},{"label": "Website","value": "https://www.apple.com"}]}
Example fund row from the current beta run
{"target": "VFIAX","instrumentType": "fund","symbol": "VFIAX","exchange": "XNAS","name": "Vanguard 500 Index Admiral","sourceId": "funds/xnas/vfiax/quote","currency": "USD","price": 707.76,"priceChange": null,"priceChangePercent": -0.24302,"tradingVolume": null,"marketCap": null,"peRatio": null,"dividendYieldPercent": null,"beta": 1,"fiftyTwoWeekRange": null,"fairValue": null,"starRating": 4,"economicMoat": "Wide","sector": null,"industry": null,"category": "Large Blend","expenseRatioPercent": 0.04,"netAssets": 1756880431574,"fundFamily": "Vanguard","investmentStyle": "Large Blend","returns": {"ytdPercent": 12.71123,"oneYearPercent": 15.68955,"threeYearPercent": 22.83743,"fiveYearPercent": 13.74248},"holdings": [{"name": "NVIDIA Corp","symbol": "NVDA","weightPercent": 8.08},{"name": "Apple Inc","symbol": "AAPL","weightPercent": 7.03},{"name": "Microsoft Corp","symbol": "MSFT","weightPercent": 5.7},{"name": "Amazon.com Inc","symbol": "AMZN","weightPercent": 3.84},{"name": "Alphabet Inc Class A","symbol": "GOOGL","weightPercent": 3.01},{"name": "Broadcom Inc","symbol": "AVGO","weightPercent": 2.65},{"name": "Alphabet Inc Class C","symbol": "GOOG","weightPercent": 2.4},{"name": "Meta Platforms Inc Class A","symbol": "META","weightPercent": 1.9},{"name": "Micron Technology Inc","symbol": "MU","weightPercent": 1.63},{"name": "Tesla Inc","symbol": "TSLA","weightPercent": 1.57}],"sectorExposure": [{"sector": "Technology","weightPercent": 25.089999999999996},{"sector": "Consumer Cyclical","weightPercent": 5.41},{"sector": "Communication Services","weightPercent": 7.3100000000000005}],"sourceFacts": [{"label": "NAV / 1-Day Return","value": "706.04 / −0.24 %"},{"label": "Total Assets","value": "1.8T"},{"label": "Adj. Expense Ratio","value": "0.040%"},{"label": "Expense Ratio","value": "0.040%"},{"label": "Distribution Fee Level","value": "Low"},{"label": "Share Class Type","value": "Institutional"},{"label": "Category","value": "Large Blend"},{"label": "Investment Style","value": "Large Blend"},{"label": "Min. Initial Investment","value": "3,000"},{"label": "Status","value": "Open"},{"label": "TTM Yield","value": "1.05%"},{"label": "Turnover","value": "2%"},{"label": "Current Portfolio Date","value": "Aug 31, 2026"},{"label": "% Assets in Top 10 Holdings","value": "37.8"},{"label": "Average Economic Moat","value": "Wide"}]}
Example ETF row from the current beta run
{"target": "VOO","instrumentType": "etf","symbol": "VOO","exchange": "ARCX","name": "Vanguard S&P 500 ETF","sourceId": "etfs/arcx/voo/quote","currency": "USD","price": 700.86,"priceChange": null,"priceChangePercent": -0.24204,"tradingVolume": null,"marketCap": null,"peRatio": null,"dividendYieldPercent": null,"beta": 1,"fiftyTwoWeekRange": null,"fairValue": 761.60753,"starRating": 4,"economicMoat": "Wide","sector": null,"industry": null,"category": "Large Blend","expenseRatioPercent": 0.03,"netAssets": 1756880431574,"fundFamily": "Vanguard","investmentStyle": "Large Blend","returns": {"ytdPercent": 12.71956,"oneYearPercent": 15.7029,"threeYearPercent": 22.8531,"fiveYearPercent": 13.74964},"holdings": [{"name": "NVIDIA Corp","symbol": "NVDA","weightPercent": 8.08},{"name": "Apple Inc","symbol": "AAPL","weightPercent": 7.03},{"name": "Microsoft Corp","symbol": "MSFT","weightPercent": 5.7},{"name": "Amazon.com Inc","symbol": "AMZN","weightPercent": 3.84},{"name": "Alphabet Inc Class A","symbol": "GOOGL","weightPercent": 3.01},{"name": "Broadcom Inc","symbol": "AVGO","weightPercent": 2.65},{"name": "Alphabet Inc Class C","symbol": "GOOG","weightPercent": 2.4},{"name": "Meta Platforms Inc Class A","symbol": "META","weightPercent": 1.9},{"name": "Micron Technology Inc","symbol": "MU","weightPercent": 1.63},{"name": "Tesla Inc","symbol": "TSLA","weightPercent": 1.57}],"sectorExposure": [{"sector": "Technology","weightPercent": 25.089999999999996},{"sector": "Consumer Cyclical","weightPercent": 5.41},{"sector": "Communication Services","weightPercent": 7.3100000000000005}],"sourceFacts": [{"label": "Current Portfolio Date","value": "Aug 31, 2026"},{"label": "% Assets in Top 10 Holdings","value": "37.8"},{"label": "ETF Fair Value","value": "761.60753"},{"label": "Average Economic Moat","value": "Wide"}]}
💳 Pricing
The Actor uses pay-per-event pricing. It charges one investment-result event after it saves one successful public Morningstar stock, mutual fund, or ETF investment row.
Invalid, unresolved, blocked, unsupported, skipped, and no-match targets do not create an investment row and are not charged as a saved investment. The current rate is shown in the pricing panel.
🔌 Integrations
Run the Actor in Apify Console or call it through the Apify API. Export the finished dataset as JSON, CSV, Excel, XML, RSS, or HTML, schedule repeat runs, or send finished datasets to webhooks and other Apify integrations.
❓ FAQ
Can I use Morningstar URLs directly?
Yes. Paste public Morningstar stock, mutual fund, or ETF quote URLs in Morningstar targets. The Actor stores the canonical Morningstar path in sourceId.
Can I mix stocks, funds, ETFs, URLs, and search phrases?
Yes. Add them to the same targets list. Exact URLs, symbols, and fund identifiers resolve to their matching source type, and Asset scope filters search phrase discovery.
What happens when two targets find the same investment?
The Actor saves the first eligible match and skips later matches of the same source investment. The saved row keeps the target that found that first match.
What if I leave Search results per target empty?
The Actor returns all available phrase matches until the source is exhausted. Exact URLs, symbols, and fund identifiers still return their direct match.
Why are some fields empty?
Morningstar does not show every fact for every investment type or page. The Actor leaves unavailable public values as null or empty arrays instead of guessing or using another provider.
Do I need a Morningstar account or API key?
No. The Actor reads supported public Morningstar pages and does not ask for Morningstar login credentials, cookies, an API key, or Morningstar Direct access.
Does this Actor give investment advice?
No. It returns public source data for research and exports. It does not provide recommendations, analyst summaries, alerts, or trading decisions.
Can I read the dataset through the Apify API?
Yes. Start the Actor from Console or the API, then read the default dataset or export it in the format you need.
📝 Changelog
v0.2 (30-09-2026)
- Return more source-visible Morningstar facts for stocks, mutual funds, and ETFs when Morningstar provides them.
- Resolve exact symbols more reliably and return the source ticker or null instead of a generic asset label.
- Show saved-row progress as a running count and keep no-match targets out of saved output and charges.
v0.1
- Initial release.
🆘 Support
For issues, questions, or feature requests, file a ticket and I'll fix or implement it in less than 24h 🫡
🔗 Related Actors
- SEC 13F Manager Quarterly Report Scraper helps compare a manager's reported holdings by quarter.
- Barchart Scraper adds stock and ETF quote data or options data to a market snapshot.
- MarketWatch Scraper collects stock quotes alongside public market news.
- OpenInsider finds public SEC Form 4 trades for a ticker or insider.
- Stocktwits Scraper adds public symbol messages and sentiment context to investment research.
Made with ❤️ by Maxime Dupré