Morningstar Fund & ETF Scraper avatar

Morningstar Fund & ETF Scraper

Pricing

from $2.70 / 1,000 investments

Go to Apify Store
Morningstar Fund & ETF Scraper

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é

Maxime Dupré

Maintained by Community

Actor stats

0

Bookmarked

12

Total users

5

Monthly active users

4 days ago

Last modified

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.

📦 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

  1. Open the Input tab.
  2. Add one Morningstar URL, symbol, ticker, fund identifier, or search phrase per line in Morningstar targets.
  3. Choose Asset scope when a search phrase should return only stocks, mutual funds, or ETFs.
  4. Set Search results per target for phrase discovery. Leave it empty to return all available results until the source is exhausted.
  5. 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

FieldTypeWhat it does
targetsarray of strings, requiredLists the Morningstar URLs, symbols, tickers, fund identifiers, or search phrases to collect, with one value per line.
assetScopestring, optionalLimits search phrase matches to all, stocks, funds, or etfs. Exact URLs, symbols, and fund identifiers still resolve to their matching type.
maxSearchResultsPerTargetinteger, optionalSets 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

FieldTypeWhat it does
resultsURL stringOpens 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

FieldTypeWhat it does
targetstring, requiredSubmitted URL, symbol, ticker, fund identifier, or search phrase that produced the row.
instrumentTypestring, requiredMorningstar result type: stock, fund, or etf.
symbolstring or nullSource ticker, fund symbol, or ETF symbol when Morningstar exposes it.
exchangestring or nullSource exchange or market code when exposed.
namestring, requiredSource display name for the security, fund, or ETF.
sourceIdstring, requiredCanonical Morningstar path after the domain, used for audit, reruns, and URL reconstruction.
currencystring or nullISO currency code when identifiable from the source value.
pricenumber or nullCurrent or latest source-visible price.
priceChangenumber or nullAbsolute price change when Morningstar exposes it.
priceChangePercentnumber or nullPercentage price change when Morningstar exposes it.
tradingVolumenumber or nullSource-visible trading volume for the latest quote period.
marketCapnumber or nullMarket capitalization as a number when visible.
peRationumber or nullPrice-to-earnings ratio when visible.
dividendYieldPercentnumber or nullDividend yield percentage when visible.
betanumber or nullSource-visible beta value when available.
fiftyTwoWeekRangeobject or nullContains the source 52-week low and high prices.
fiftyTwoWeekRange.lownumber or null52-week low price.
fiftyTwoWeekRange.highnumber or null52-week high price.
fairValuenumber or nullMorningstar fair value estimate when source-visible.
starRatingnumber or nullMorningstar star rating when source-visible.
economicMoatstring or nullMorningstar economic moat label when source-visible.
sectorstring or nullSource-visible sector classification.
industrystring or nullSource-visible industry classification.
categorystring or nullMorningstar category for funds or ETFs when visible.
expenseRatioPercentnumber or nullExpense ratio percentage for funds or ETFs when visible.
netAssetsnumber or nullNet assets as a number when visible.
fundFamilystring or nullFund family or provider name when visible.
investmentStylestring or nullMorningstar investment style label when visible.
returnsobjectContains common-period source-visible return percentages.
returns.ytdPercentnumber or nullYear-to-date return percentage.
returns.oneYearPercentnumber or nullOne-year return percentage.
returns.threeYearPercentnumber or nullThree-year return percentage.
returns.fiveYearPercentnumber or nullFive-year return percentage.
holdingsarray of holding objectsTop holdings when Morningstar exposes them.
holdings[].namestringHolding name.
holdings[].symbolstring or nullHolding symbol when visible.
holdings[].weightPercentnumber or nullPortfolio weight percentage when visible.
sectorExposurearray of objectsSector or portfolio exposure labels and weights when Morningstar exposes them.
sectorExposure[].sectorstringSector or exposure label.
sectorExposure[].weightPercentnumber or nullExposure weight percentage when visible.
sourceFactsarray of source fact objectsAdditional source-visible label and value pairs useful for audit.
sourceFacts[].labelstringSource-visible fact label.
sourceFacts[].valuestring, number, boolean, or nullSource-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 🫡

Made with ❤️ by Maxime Dupré