Yahoo Finance Scraper
Get Yahoo Finance quotes and OHLCV history with no API key. Ticker search, current quote with change % and the 52-week range. $1.00 per 1,000 rows.
How it works
- 1Open it on Apify
Hit Run on Apify — it opens the tool in the cloud, no install.
- 2Set the inputs
Adjust
mode,query,symbols(sensible defaults are pre-filled). - 3Click Run
The tool runs on Apify’s cloud and collects the data for you.
- 4Export the results
Download as JSON, CSV or Excel, or pipe straight into your app, Google Sheets, or an AI agent.
Pricing
$0.001 per item = $1 per 1,000
| You are charged for | When | Price |
|---|---|---|
| Item returned | Charged per quote/history row returned. | $0.001 |
Pay-per-event pricing: you are billed per result, not per subscription. Billing is handled by Apify on your own account. These are the live Apify store prices, in effect since 2026-06-12, and they are what you are actually charged.
Inputs
| Field | What it does | Type |
|---|---|---|
mode | What to fetch. "search" = find ticker symbols by name (uses Query). "quote" = current price snapshot for each Symbol. "history" = OHLCV price history for each Symbol over Range/Interval. | string |
query | Company or asset name to search ticker symbols for, e.g. "apple", "vanguard s&p 500", "bitcoin". Only used when Mode is "search". | string |
symbols | One or more ticker symbols to fetch, e.g. AAPL, MSFT, ^GSPC (S&P 500 index), EURUSD=X (FX), BTC-USD (crypto). Used by "quote" and "history" modes. | array |
range | How far back the price history goes (history mode). Longer ranges return more rows. | string |
interval | The candle size / sampling interval for history. Intraday intervals (1m, 5m) only work with short ranges (about 1d-1mo). | string |
maxItems | Maximum number of result rows to return and charge for (caps history bars and search results). Quotes return one row per symbol. | integer |
notionConnector | Optional. Write each item as a page into your Notion when the run finishes. Authorize a Notion connector once in Settings → API & Integrations → MCP connectors, then pick it here. Leave empty to skip (default), results are always saved to the dataset regardless. | string |
notionParentId | Optional. The Notion data source ID of the database to write into (only used if a Notion connector is set). Leave empty to create the pages privately in your workspace instead. | string |
What you get
A structured dataset — each result includes fields like:
changePctclosecurrencydateexchangefiftyTwoWeekHighfiftyTwoWeekLowhighindustrylowmarketTimenameopenpreviousClosesymbolpricevolumeExport every run as JSON, CSV or Excel, or send it to your app, a database, Google Sheets, or an AI agent.
3 ready-to-run use cases
Ticker Symbol Lookup: Find a Symbol by Company Name
Type a company, fund or ETF name and get the matching symbols back with exchange and quote type. For when you have the name but not the ticker.
AAPL Stock Price as JSON: One Row per Quote
Apple's latest price, currency, exchange, previous close, percent change and 52-week high and low. One row, re-run whenever you want it fresh.
Download Historical Stock Data: TSLA Daily OHLCV
One year of daily Tesla bars, one row each: date, open, high, low, close and volume. Change the range and interval for a different window.
Related tools in News & Finance Data
Other ready-to-run tools in the same category — all pay-per-use on the Apify cloud.
CoinGecko Crypto Market Scraper
Scrape CoinGecko crypto market data with no API key. Get top coins, price, volume, 24h and 7d change, supply, ATH and ATL. $2.00 per 1,000 coins.
SEC EDGAR Filings Scraper
Search all SEC EDGAR filings by keyword, ticker or CIK. Get form, company, CIK, date and document link. $2.00 per 1,000.
Google News Scraper
Track Google News by keyword or topic. Get real publisher URLs, source, date and snippet. $3.00 per 1,000 articles.
GDELT Worldwide News Scraper
Search worldwide news via GDELT 2.0: headline, URL, domain, country, language and date. 250 articles per query. $2.00 per 1,000.
Where this tool sits
- Categories
- News & Finance Data
- Platforms
- Finance & Markets
Yahoo Finance Scraper: quotes, OHLCV history and ticker lookup, no API key
Three things in one actor. Look up a ticker symbol from a company name, take a price snapshot for a list of symbols, or pull OHLCV bars over a range you choose. Stocks, indices like ^GSPC, FX pairs like EURUSD=X and crypto like BTC-USD all work the same way.
Prices are delayed exactly as Yahoo delays them. This is not an exchange feed and it should not be used as one.
| Input | A company name, or a list of ticker symbols |
| Output | One row per symbol, or one row per price bar |
| Ceiling | 1,000 rows per run |
| Account needed | None, and no API key |
| Price | $1.00 per 1,000 rows, flat on every plan |
🔍 What Yahoo Finance Scraper does
Search mode takes a name like vanguard s&p 500 and gives you back the symbols that match, with the exchange, the instrument type and, for companies, the sector and industry. It is the mode to run first when you have names rather than tickers.
Quote mode takes symbols and returns the current price, the currency, the exchange, the previous close, the percentage change and the 52-week high and low.
History mode takes the same symbols and returns one row per bar: date, open, high, low, close and volume. Bars with nothing in them at all are skipped rather than delivered as a row of nulls.
Two settings shape history: Range, how far back to go, and Interval, how big each bar is. Minute and five-minute bars only exist for short ranges, which is Yahoo's rule rather than this actor's.
📥 What you give it
{
"mode": "history",
"symbols": ["AAPL", "MSFT", "BTC-USD"],
"range": "6mo",
"interval": "1d",
"maxItems": 500
}
| Field | Default | What it is |
|---|---|---|
mode | quote | search to find symbols, quote for a price snapshot, history for OHLCV bars. |
query | box starts at apple | The name to look up. Used by search mode only. |
symbols | box starts at AAPL, MSFT, BTC-USD | The symbols to fetch. Used by quote and history. A comma-separated string works too. |
range | 1mo | 1d, 5d, 1mo, 3mo, 6mo, 1y, 5y or max. Read the note below, it affects quote mode as well. |
interval | 1d | 1m, 5m, 1d, 1wk or 1mo. The intraday sizes need a short range. |
maxItems | 100 | How many rows to return, up to 1,000. |
notionConnector | none | Optional. Writes each row into your Notion once the run finishes. |
notionParentId | none | Optional. The Notion data source to write into. |
proxyConfiguration | off | Optional network settings. Off by default, and a normal run does not need it. |
range changes what changePct means in quote mode. The previous close is taken from just before the start of the range you asked for, so with the default one-month range you get the move over that month, not the move today. Set range to 1d when you want the day's change.
In history mode the cap keeps the first rows, and the first rows are the oldest. Asking for 5y of daily bars with maxItems: 100 returns the oldest hundred days of the first symbol, not the latest hundred, and later symbols in the list can be cut off entirely. Pick a range that fits inside your cap, or run one symbol at a time.
📤 What you get back
A real quote row from a recent run:
{
"ok": true,
"symbol": "AAPL",
"price": 332.27,
"currency": "USD",
"exchange": "NMS",
"previousClose": 304.91,
"changePct": 8.9731,
"fiftyTwoWeekHigh": 344.57,
"fiftyTwoWeekLow": 235.03,
"marketTime": "2026-09-11T20:00:01.000Z"
}
The row shape follows the mode.
| Mode | Fields |
|---|---|
search | symbol, name, exchange, quoteType, sector, industry |
quote | symbol, price, currency, exchange, previousClose, changePct, fiftyTwoWeekHigh, fiftyTwoWeekLow, marketTime |
history | symbol, date, open, high, low, close, volume |
| Field | What it is |
|---|---|
marketTime | When Yahoo last updated that price, as an ISO timestamp. Worth checking before you treat a number as fresh. |
previousClose | The close before the start of your range, not always yesterday. See the note above. |
changePct | Computed from price and previousClose, to four decimal places. |
date | The bar's own timestamp in history mode. Bars come back oldest first. |
volume | Rounded to a whole number. null where Yahoo published none. |
sector, industry | Search mode only, and only for companies. Funds, indices and crypto leave them null. |
🧾 Reading the output
Two kinds of row land in your dataset, and ok tells them apart.
| Row | How to spot it | Charged |
|---|---|---|
| A quote, bar or search hit | ok: true | yes |
| A diagnostic | ok: false and an errorCode | no |
A bad symbol does not stop the good ones. You get real rows for the symbols that worked and one uncharged diagnostic row per symbol that did not, with symbol on the row naming it.
The overview table in the Apify console shows the price columns only, so a diagnostic row appears there as a line with just the symbol filled in. Switch to the JSON or All fields view to read it.
| Code | What it means |
|---|---|
BAD_INPUT | search mode with no query, or quote and history with no symbols. |
NOT_FOUND | Yahoo has nothing under that symbol. It also shows up when the interval and range you picked are not a pair Yahoo supports, so check both before assuming the symbol is wrong. |
NO_RESULTS | The symbols resolved and Yahoo returned no rows for them. |
RATE_LIMITED | Yahoo asked for a slower pace than the run could keep. Try fewer symbols. |
SERVER_ERROR | Yahoo answered 5xx. Usually passes. |
BLOCKED | Yahoo refused the request. Re-run it. |
NETWORK | Yahoo was unreachable. Re-run it. |
▶️ How to run it
1. Open Yahoo Finance Scraper and click Try for free. 2. Pick a Mode. Start with quote if you already know your symbols, search if you do not. 3. Fill in Symbols, or Search query in search mode. 4. For history, set Range and Interval so the number of bars fits inside Max items. 5. Click Start, then download the dataset as JSON, CSV or Excel, or read it from the Apify API.
💰 How much does it cost?
$1.00 per 1,000 rows. Flat on every Apify plan, no volume tiers.
A quote row, a history bar and a search hit all count the same. Duplicate rows are dropped before they are counted, diagnostic rows are not charged, and a run that returns no data is not charged.
💡 What people use it for
- Turning a watchlist of company names into ticker symbols, then feeding those symbols back in.
- A daily snapshot of a portfolio, scheduled, with
rangeset to1dso the change is the day's. - Pulling six months of daily bars for a backtest without applying for a data licence.
- Tracking an FX pair or a crypto symbol alongside equities, since they all use the same fields.
- Giving a model a small, clean price table instead of a page of finance HTML.
🚧 What it does not do
- Prices are delayed, exactly as Yahoo delays them. Do not trade off this.
- No fundamentals. No earnings, balance sheets, dividends, splits or analyst numbers.
- 1,000 rows per run. A long daily history will not fit in one run, and the cap keeps the oldest
rows, not the newest.
- Intraday bars need a short range. Minute data over a year does not exist to be returned.
- Quote mode measures change against your range, so the default is a monthly move rather than a
daily one.
- Every symbol is fetched before the cap is applied, so a long list still takes the time even
when most of it is trimmed.
- These are Yahoo's public endpoints, not a contracted feed, and Yahoo can change them.
- No order book, no trades, no options chains.
🧭 Which market data scraper do you need?
| If you want | Use |
|---|---|
| Quotes, OHLCV history and ticker lookup | This one |
| SEC filings by phrase, ticker or CIK | SEC EDGAR Scraper |
| Crypto prices and market rankings | CoinGecko Scraper |
| Trades disclosed by members of Congress | Congress Stock Trades Scraper |
| Prediction market odds and volume | Kalshi Markets Scraper |
❓ Questions people ask
Do I need a Yahoo account or key? No. Nothing to apply for and no quota to watch.
Is this real time? No. The prices carry Yahoo's delay, and marketTime tells you how old each one is.
Why is my percentage change so large? Because range was left at a month. Set it to 1d for the day's move.
Why did the last symbol in my list return nothing? The row cap is shared across the whole run and is applied in list order. Raise maxItems, shorten the range, or run the symbols separately.
Why did a valid symbol come back NOT_FOUND? Check the interval and range together. Yahoo reports an unsupported pair the same way it reports an unknown symbol.
Can I get dividends or earnings? Not from this one. It covers quotes, bars and symbol lookup.
🆘 If something breaks
Open the Issues tab on the actor page. Send the run ID, the mode and the symbols you used. The errorCode on the diagnostic row usually names the problem on its own.