Yahoo Finance Scraper: Stock Prices & News
Pricing
from $2.00 / 1,000 results
Yahoo Finance Scraper: Stock Prices & News
Search Yahoo Finance by company name or a list of tickers and get clean JSON: current price, currency, day high and low, exchange, sector and industry, plus related news headlines. Stocks, ETFs, indices, crypto and forex. No API key, no LLM.
Pricing
from $2.00 / 1,000 results
Rating
0.0
(0)
Developer
Turgay NANTA
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
a month ago
Last modified
Categories
Share
Yahoo Finance Scraper: Stock Prices, Tickers and News to JSON
Looking up a list of tickers by hand, copying prices into a sheet and scanning headlines every morning is slow, and a full market-data subscription is overkill when you only need the current price, the exchange and what the news says.
Type a company name or a list of tickers. The Actor searches Yahoo Finance and returns clean JSON rows: the matching tickers with their current regular-market price, currency, day high and low, exchange, sector and industry, plus the latest related news headlines with links and publisher.
- Two modes: free-text search (
nvidia) to resolve names to tickers, or comma-separated exact tickers (NVDA,AAPL,MSFT) for a watchlist. - Stocks, ETFs, indices, crypto and forex: anything Yahoo Finance lists with a ticker, for example
AAPL,SPY,^GSPC,BTC-USD,EURUSD=X. - Exact-ticker mode drops look-alikes:
NVDAreturns NVDA, not leveraged or income ETFs with similar symbols. - Headlines included: up to 5 related news items per search term or ticker, each with title, link, publisher and related tickers.
- No account, no API key, no LLM: deterministic output from Yahoo Finance's public endpoints.
- Cheap to run: $0.002 per result row. A 10-ticker price check costs about two cents.
- Scheduled watch: monitor mode flags tickers and headlines that were not in the previous run for the same query.
At a glance
| Input | A search term (nvidia) or comma-separated tickers (NVDA,AAPL). Nothing is required; the default is nvidia. |
| Output | Dataset rows: one per ticker (price data) and one per related headline, plus a run summary row |
| Price fields | price, currency, day_high, day_low, exchange, sector, quote type, industry |
| News fields | Headline, link, publisher, related tickers |
| Asset types | Equities, ETFs, indices, cryptocurrencies, currency pairs, and other Yahoo Finance tickers |
| Rows per run | 1-500 (maxResults, default 20) |
| Pricing | $0.002 per result row; see Pricing |
| Runs on | Apify Console, API, schedules, n8n, Make, Zapier, AI agents via MCP |
Quick start
- Click Start. With no input the Actor searches
nvidiaso you can see the output format. - Replace Search term or tickers with your own term, or with tickers separated by commas, for example
NVDA,AAPL,MSFT,BTC-USD. - Open the Dataset tab and export to JSON, CSV, Excel or HTML, or fetch the rows through the API.
What the output looks like
A ticker row and a headline row from a live run of the default nvidia search:
[{"id": "NVDA","title": "NVIDIA Corporation","url": "https://finance.yahoo.com/quote/NVDA","price": 225.07,"price_text": "225.07","location": "Technology","seller": "NASDAQ","rating": null,"reviews": null,"description": "EQUITY / Semiconductors","currency": "USD","day_high": 226.94,"day_low": 223.133},{"id": "7069fbdd-4a0c-3f85-95ec-95d756aa4547","title": "Update: Market Chatter: Nvidia's New AI Chips Could Enter Chinese Market","url": "https://finance.yahoo.com/technology/ai/articles/market-chatter-nvidia-apos-ai-091525871.html","price": null,"price_text": "","location": "","seller": "MT Newswires","rating": null,"reviews": null,"description": "news / NVDA,BABA"}]
That run returned 12 rows: 7 matching tickers (all with a price) and 5 headlines. Prices and headlines change with the market; your run shows the values at the moment it runs.
Why people use it
Most finance tools either give you everything behind a subscription, or give you a web page you have to read and copy. This Actor sits in between: it answers "what is the ticker, where does it trade, what is it at right now, and what is the news" in one structured call.
- Name to ticker in one step. Search
rheinmetallorvanguard totaland get the matching tickers, exchanges and quote types, so you use the right symbol before you build anything on it. - A watchlist in one call. Put 5 or 50 tickers in one input and get one price row per ticker.
- Headlines next to prices. Every term or ticker brings its latest related news, so a morning check shows both the number and the reason it moved.
- Clean rows. Tracking parameters are removed from links, numbers are real numbers, and a headline that is related to several of your tickers appears once.
- Fits into automations. Zero required fields, a stable row format and a summary row make it easy to call from a sheet, a scheduler or an AI agent.
Page scraping vs. this Actor
| Copying from finance pages | This Actor | |
|---|---|---|
| Many tickers at once | One page per ticker | One run, one row per ticker |
| Output format | Text on a page | JSON, CSV, Excel via the dataset |
| Look-alike symbols | Easy to pick the wrong one | Exact-ticker mode keeps only the symbol you typed |
| News | A separate page | Up to 5 related headlines per term or ticker |
| Automation | Manual | API, schedules, n8n, Make, Zapier, MCP |
Use cases
Individual investors and portfolio trackers
Keep a Google Sheet of your holdings up to date. Put your tickers in one input, schedule the Actor for the market close, and pull price, day_high and day_low into the sheet through Make, Zapier or n8n.
Financial analysts and researchers
Resolve a list of company names to tickers, exchanges, sectors and industries before a deeper analysis. Search mode shows the listings Yahoo Finance matches for the name, with exchange and quote type, so you can pick the correct one.
Newsletter writers and finance content creators
Before writing a market note, run your watchlist and read the headline rows. Each headline carries its publisher and related tickers, which makes it quick to see which stories touch several of your names.
Fintech developers and product teams
Prototype a dashboard, a price widget or an internal tool without signing up for a data vendor. The row format is stable, every field has a fixed name, and the API returns results in one synchronous call for small inputs.
AI agent builders
Give an assistant a tool that answers "what is NVDA trading at and what is the latest news?". Through the Apify MCP server an agent can call the Actor with a ticker list and read the rows back.
Investor relations and communications teams
Schedule monitor mode on your own ticker and your peers. Each run flags headlines that were not there last time, so new coverage reaches a Slack channel or an inbox without anyone refreshing a news page.
Crypto and forex watchers
Use Yahoo Finance symbols such as BTC-USD, ETH-USD or EURUSD=X in the ticker list. The price is returned in the currency Yahoo Finance reports for that symbol.
How it works
- Read the input. If the query contains a comma, it is treated as a list of exact tickers. Otherwise it is one search term.
- Search. For each term or ticker the Actor calls Yahoo Finance's public search endpoint and collects matching quotes and related news.
- Exact match (ticker mode). Only the quote whose symbol equals the ticker you typed is kept. Neighbours with similar symbols are dropped.
- Headlines only with a match. News is added only when the term or ticker matched at least one quote, so an unknown ticker never brings unrelated general headlines.
- Prices. For every kept ticker the Actor reads Yahoo Finance's chart endpoint to get the regular-market price, currency and the day's high and low. Up to 10 lookups run at the same time, in batches, until every ticker is covered.
- Retry. If Yahoo Finance answers with a rate limit or a temporary block, the request is tried up to three times in total, with a growing pause.
- Clean and de-duplicate. Fields are normalised, tracking parameters are removed from links, and rows with the same ID (for example the same headline found for two tickers) are merged.
- Output. Ticker rows come first, then headline rows, up to
maxResults. A final_summaryrow reports the counts.
Input
| Field | Type | Default | Description |
|---|---|---|---|
query | string | nvidia | A search term, or comma-separated exact tickers such as NVDA,AAPL. Leave empty to run the default example. |
maxResults | integer | 20 | Maximum rows returned, 1-500. Ticker rows come before headline rows. |
enrich | boolean | false | Adds domain and a completeness score to each row (and any email address found in the description). Charged per enriched row. |
monitor | boolean | false | Compares this run with the previous run of the same query and flags rows that are new. Charged per new row. |
Example: resolve a company name
{"query": "berkshire hathaway","maxResults": 20}
Example: watchlist, prices only
Ticker rows are returned before headline rows, so setting maxResults to the number of tickers returns only the price rows:
{"query": "NVDA,AAPL,MSFT,SPY,BTC-USD","maxResults": 5}
Example: one exact ticker
A single ticker without a comma runs as a search and can return similar symbols. Add a trailing comma to force exact-ticker mode:
{"query": "NVDA,","maxResults": 6}
Example: daily headline watch
{"query": "NVDA,AMD,INTC,TSM","maxResults": 40,"monitor": true}
Output
Ticker rows
| Field | Meaning |
|---|---|
id | Ticker symbol, for example NVDA, ^GSPC, EURUSD=X |
title | Short name, or long name when no short name is published |
url | Yahoo Finance quote page |
price | Regular-market price as Yahoo Finance reports it at run time |
price_text | The same price as text |
currency | Currency of the price |
day_high, day_low | The day's range from the same source |
seller | Exchange, for example NASDAQ or NYSE |
location | Sector, when Yahoo Finance publishes one (empty for crypto, forex and indices) |
description | Quote type and industry, for example EQUITY / Semiconductors, ETF, CRYPTOCURRENCY, INDEX |
Headline rows
| Field | Meaning |
|---|---|
id | Yahoo Finance news ID |
title | Headline |
url | Link to the article |
seller | Publisher |
description | Starts with news /, followed by the related tickers |
price | Always null for headlines |
To separate the two row types in a sheet or a script, filter on description starting with news /.
The fields rating and reviews are part of the shared row format and are always null for this source.
Summary and change rows
_summary(last row):total_raw,total_clean,deduped,with_url,with_price,enriched. When nothing is found, it carries anoteinstead._changes(monitor mode, only when something is new): the list of row IDs that were not in the previous snapshot for this query.
These two rows are not billed as results. Skip rows that have a _summary or _changes key when you import the dataset.
Pricing
This Actor charges per event. Current prices are on the Pricing tab; at the time of writing:
| Event | When | Price |
|---|---|---|
actor-start | Once per run | $0.0001 |
result | Per ticker or headline row returned | $0.002 |
enrichment | Per row enriched, only when enrich is on | $0.01 |
change-alert | Per new row in monitor mode | $0.005 |
Cost examples
| Scenario | Rows | Cost per run |
|---|---|---|
Default nvidia search (the live run above) | 12 | $0.0241 |
10 tickers, prices only (maxResults 10) | 10 | $0.0201 |
| 10 tickers with headlines (at most 5 per ticker) | up to 60 | up to $0.1201 |
| 50 tickers, prices only | 50 | $0.1001 |
| 500 rows, the maximum | 500 | $1.0001 |
A month of daily price checks on 50 tickers, prices only: 30 runs x $0.1001 = $3.003.
Monitor mode: a run that returns 40 rows, of which 6 are new headlines, costs $0.0001 + 40 x $0.002 + 6 x $0.005 = $0.1101. The first monitored run of a query only records the baseline and raises no change alerts.
Enrichment: adds $0.01 per enriched row, so 20 enriched rows add $0.20. For finance data the extra fields are rarely needed; leave it off unless you use the completeness score.
Scheduled monitoring: what it does and what it does not do
Turn on monitor and keep the query exactly the same between runs.
- The Actor keeps one snapshot per query in a named key-value store called
yahoo-finance-scraper-monitorin your own Apify account. - The first run of a query saves the baseline. No change alerts are raised and none are charged.
- Each later run compares its row IDs with the saved snapshot. Rows whose ID was not there before are listed in the
_changesrow and charged aschange-alert. - The snapshot is then replaced with the current run.
In practice, a change is a new headline or a ticker that newly appears in the search results for your query.
What is not a change alert: a price move. The Actor compares IDs, not prices, so a ticker whose price moved is not flagged. For price thresholds, keep the price column in your sheet or workflow and compare it there, for example "alert me when NVDA is 5% below yesterday's close".
Changing the query text, including the order of tickers, starts a new snapshot and a new baseline. Delete the yahoo-finance-scraper-monitor store to reset every baseline.
Integrations
API (synchronous, returns the rows)
curl -X POST "https://api.apify.com/v2/acts/enezli~yahoo-finance-scraper/run-sync-get-dataset-items?token=YOUR_TOKEN" \-H "Content-Type: application/json" \-d '{"query":"NVDA,AAPL,MSFT","maxResults":3}'
Python
from apify_client import ApifyClientclient = ApifyClient("YOUR_TOKEN")run = client.actor("enezli/yahoo-finance-scraper").call(run_input={"query": "NVDA,AAPL,MSFT", "maxResults": 20})for row in client.dataset(run["defaultDatasetId"]).iterate_items():if "_summary" in row or "_changes" in row:continuekind = "news" if str(row.get("description", "")).startswith("news /") else "quote"print(kind, row["id"], row.get("price"), row.get("title"))
JavaScript
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: 'YOUR_TOKEN' });const run = await client.actor('enezli/yahoo-finance-scraper').call({query: 'NVDA,AAPL,MSFT', maxResults: 3,});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items.filter((r) => r.price != null));
Schedules
Save your input as a task and add a schedule in Apify Console, for example once a day after the market close for prices, or every few hours with monitor on for headlines.
n8n, Make, Zapier
Run the Actor, then map the dataset rows to Google Sheets, Airtable or a database. A common flow: scheduled run, filter headline rows, post each new headline to Slack or email.
AI agents (MCP)
The Actor is available through the Apify MCP server. An assistant can call it with a ticker list and answer questions such as "which of my holdings are down today and what is the news about them?" from the returned rows.
Workflow recipes
Morning watchlist. Schedule your 20-50 tickers with maxResults equal to the number of tickers. Write price, day_high and day_low to a sheet with a date column; after a few weeks you have your own price log.
Headline digest. Run the same tickers with a higher maxResults and monitor on. Send only the _changes IDs, matched to their headline rows, to a Slack channel.
Name cleanup. You have a list of company names from a CRM or a spreadsheet. Run each name in search mode and keep the row whose exchange and quote type fit (for example the EQUITY on NYSE instead of a foreign listing).
Tips for better results
- Use exact tickers for watchlists. A comma switches on exact-ticker mode; add a trailing comma for a single ticker (
TSLA,). - Use Yahoo Finance symbols. Non-US listings, crypto and currency pairs use Yahoo's suffixes, such as
SAP.DE,BTC-USD,EURUSD=X, and indices start with^. - Control cost with
maxResults. Ticker rows come first, so a limit equal to the number of tickers returns prices only and no headlines. - Search broadly, then narrow. Use a company name to find the right symbol once, then switch to exact tickers for regular runs.
- Keep monitored queries identical. Any change in the query text starts a new baseline.
Limitations
- Current quote only. The Actor returns the regular-market price and the day's range. It does not return historical price series, financial statements, fundamentals such as P/E or market cap, dividends, or options data.
- Data timing follows Yahoo Finance. Prices are what Yahoo Finance reports at run time and may be delayed depending on the exchange. Do not use them for order execution.
- Search results are chosen by Yahoo Finance. A search term returns the matches Yahoo's search provides, which may be fewer than
maxResults(thenvidiasearch returned 7 tickers). - Headlines: at most 5 per search term or ticker, as returned by Yahoo Finance's search.
- Missing fields: sector and industry are empty for asset types that do not have them. If a price lookup fails after retries, that ticker's
priceisnulland the row is still returned. - Monitor mode compares IDs, not values, as described above.
- Public endpoints can change. If Yahoo Finance changes or rate-limits its public endpoints, results may be empty until the Actor is updated.
Troubleshooting
| Symptom | Likely cause | Fix |
|---|---|---|
Only a _summary row with "No results" | The term or ticker matched nothing, or Yahoo Finance did not answer | Check the spelling or the Yahoo Finance symbol; try a broader term; run again later |
| A ticker is missing from a watchlist | Its symbol did not match exactly | Use the symbol exactly as on Yahoo Finance, including suffixes such as .DE or -USD |
| Similar symbols appear for one ticker | Single ticker without a comma runs as a search | Add a trailing comma: NVDA, |
| No headlines in the output | maxResults was reached by ticker rows | Raise maxResults |
price is null on a ticker row | The price lookup failed after retries, or Yahoo Finance has no current price for it | Run again; check the symbol on Yahoo Finance |
| Every row is flagged as new in monitor mode | The query text changed, or this is a new query | Keep the query identical between runs |
FAQ
Do I need a Yahoo account or an API key? No. The Actor uses Yahoo Finance's public endpoints. You only need an Apify account.
Is the price real-time? It is the regular-market price Yahoo Finance returns at the moment of the run. Some exchanges are delayed on Yahoo Finance.
Can I get historical prices or financial statements? No. This Actor returns the current quote, the day's range, the ticker details and related headlines.
Which assets work?
Anything Yahoo Finance lists with a symbol. Equities, ETFs, indices (^GSPC), crypto (BTC-USD) and currency pairs (EURUSD=X) were checked in a live run.
How many tickers can I put in one run?
Up to 500 rows per run. For large lists, keep maxResults equal to the number of tickers if you only want prices.
Why do I get more rows than tickers? Each ticker or search term also brings up to 5 related headlines. They are separate rows and are billed as results.
Does monitor mode alert me when a price changes? No. It flags new tickers and new headlines. Compare prices in your own sheet or workflow.
Where is the monitor snapshot stored?
In a named key-value store called yahoo-finance-scraper-monitor in your Apify account, one record per query.
Is there an LLM involved? No. Output is deterministic; the same Yahoo Finance response always produces the same rows.
Can I use it from an AI assistant? Yes, through the Apify MCP server. There are no required fields, so an agent can call it with just a query.
How long does a run take? Usually seconds for a small watchlist. Time grows with the number of tickers because prices are fetched in batches of 10, and with retries when Yahoo Finance rate-limits.
Can I export to Excel or Google Sheets? Yes. Export the dataset as Excel or CSV from Apify Console, or push the rows to Google Sheets with Make, Zapier or n8n.
Trademarks
This Actor is not affiliated with, endorsed by, or connected to Yahoo Finance. All product names are trademarks of their respective owners. Use the output in line with the source's terms and the rules that apply to you.