---
title: "How to Scrape Yahoo Finance (2026 Guide) | Scrape.ly"
description: "Scrape Yahoo Finance quotes, financial statements, price history, analyst ratings and options per ticker. No-code steps, API code, a real run and its cost."
url: https://scrape.ly/blog/scrape-yahoo-finance
markdown: https://scrape.ly/blog/scrape-yahoo-finance.md
---

[Tutorials](https://scrape.ly/blog/category/tutorials.md)

# How to Scrape Yahoo Finance: Quotes, Financials, History and Options

Scrape Yahoo Finance for any stock, ETF, crypto pair or index and get one JSON record per ticker: live quote, profile, price history, financial statements, dividends, analyst ratings, holders, options and earnings dates. A real three-ticker run, its cost and code.

[Querystone Actor publisher on the Scrape.ly Store](https://scrape.ly/blog/author/querystone.md)

- Published

  Oct 26, 2026

- Reading time

  9 min read

![Pixel-art robot with an orange >\_ on its terminal head pulls a chart slip with a purple rising line out of a monitor showing the purple Yahoo Finance icon beside ticker rows, above a rising candlestick chart, and drops it into a crate](https://scrape.ly/media/scrape-yahoo-finance.png?w=1080)

To scrape Yahoo Finance, give a scraper a list of tickers and let it collect what Yahoo Finance shows for each one: the live quote, company profile, price history, income statement, balance sheet, cash flow, dividends, analyst ratings, holders, options and earnings dates. On Scrape.ly that's one Actor and one row per ticker at $0.54 per 1,000 tickers, with no Yahoo account, API key or proxy to manage.

This guide covers the data you get, the no-code steps, the same job in curl, Python, Node.js and through an AI agent, and a real run from 26 October 2026 for Apple, Alphabet and Microsoft, with the log and the exact cost.

## What data you can get from Yahoo Finance

The [Yahoo Finance Scraper](https://scrape.ly/store/querystone/yahoo-finance-scraper.md) saves one dataset item per ticker, holding up to 15 data blocks you pick in `dataSections`:

| Block                                    | What it holds                                                                                                                                          |
| ---------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------ |
| Top-level fields                         | `ticker`, `name`, `quote_type`, `sector`, `industry`, `exchange`, `currency`, `current_price`, `change_percent`, `market_cap`                          |
| `stock_info`                             | Profile and key stats: P/E, forward P/E, EPS, beta, dividend yield (in %), 52-week range, moving averages, analyst target, employees, business summary |
| `price_info`                             | Price, previous close, change, market state, pre- and post-market price, quote time                                                                    |
| `history`                                | OHLCV candles with adjusted close, from 1-minute to 3-month intervals                                                                                  |
| `financials`                             | Income statement, balance sheet and cash flow, annual and/or quarterly                                                                                 |
| `dividends`, `splits`                    | Full dividend and split history                                                                                                                        |
| `recommendations`                        | Analyst strong-buy to strong-sell counts, month by month                                                                                               |
| `holders`                                | Major holders plus top institutional and mutual-fund holders                                                                                           |
| `options`                                | Calls and puts with bid, ask, volume, open interest and implied volatility                                                                             |
| `earnings`, `calendar`, `key_statistics` | Earnings data, next earnings date with estimates, and extended statistics                                                                              |
| `news`                                   | Latest headlines with summary and publisher                                                                                                            |
| `insiders`, `fund`                       | Insider holders and transactions; ETF and fund top holdings                                                                                            |

It works for US and international stocks (`SAP.DE`, `7203.T`), ETFs, mutual funds, crypto (`BTC-USD`), forex (`EURUSD=X`), indices (`^GSPC`) and futures (`GC=F`). Blocks Yahoo doesn't publish for an instrument, such as financial statements for a currency pair, come back as empty lists or nulls.

## How to scrape Yahoo Finance without code

1. Open the Actor's page in the Scrape.ly Store.
2. Pick the preset [Apple, Google and Microsoft data](https://scrape.ly/store/querystone/yahoo-finance-scraper/presets/default-2.md). "Try this input" loads it in the console. This is the exact input of our run:

```json
{
  "tickers": ["AAPL", "GOOG", "MSFT"],
  "startDate": "2025-01-01",
  "endDate": "2025-06-30",
  "maxItems": 15,
  "dataSections": ["profile", "price", "history", "financials", "dividends", "splits", "news",
                   "recommendations", "holders", "options", "earnings", "statistics", "calendar", "fund"],
  "historyRange": "1y",
  "historyInterval": "1d",
  "includePrePost": false,
  "financialsPeriod": "annual",
  "newsCount": 5,
  "optionsExpirations": 1,
  "screenerLimit": 5
}
```

3. Swap in your own tickers and click **Start**. Three tickers with every block took under 9 seconds.
4. Open the **Overview** view for the headline numbers, or export JSON, CSV, Excel or HTML for the full records.

The fields that matter most:

- `tickers`: symbols, company names (`tesla`), ISINs or Yahoo Finance quote URLs. One result per ticker.
- `dataSections`: the blocks to collect. Fewer blocks make the run faster and the records smaller.
- `startDate`, `endDate`, `historyRange`, `historyInterval`: the price-history window and candle size. A start date overrides the range.
- `financialsPeriod`: `annual`, `quarterly` or `both`. The [quarterly financials preset](https://scrape.ly/store/querystone/yahoo-finance-scraper/presets/default-filters.md) pairs quarterly statements with intraday prices.
- `screeners`: add tickers from Yahoo's screeners, such as `most_actives` or `day_gainers`, capped by `screenerLimit`.

Scrape.ly Store Yahoo Finance Scraper Quote, profile, price history, financial statements, dividends, analyst ratings, holders, options and earnings for any ticker, one JSON row each. $0.54 per 1,000 tickers.

[Try it free](https://scrape.ly/store/querystone/yahoo-finance-scraper.md) [Browse the Store](https://scrape.ly/store.md)

## Scrape Yahoo Finance with the API

Create a token under **Settings → API & Integrations** in the dashboard and export it as `SCRAPELY_TOKEN`. A few tickers finish in seconds, so the synchronous endpoint can return the records in one call:

```shell
curl -X POST "https://api.scrape.ly/v2/actors/querystone~yahoo-finance-scraper/run-sync-get-dataset-items"
  -H "Authorization: Bearer $SCRAPELY_TOKEN"
  -H "Content-Type: application/json"
  -d '{"tickers": ["AAPL", "GOOG", "MSFT"], "dataSections": ["profile", "price", "financials", "recommendations", "calendar"]}'
```

The call waits up to 45 seconds and returns a JSON array. The Actor handles roughly 4 tickers per second with all blocks, so a list of hundreds can pass 45 seconds. Then the call answers `408` while the run keeps going; don't call again. Start large runs with `POST /v2/actors/querystone~yahoo-finance-scraper/runs`, poll `/v2/actor-runs/RUN_ID?waitForFinish=60`, and read `/v2/actor-runs/RUN_ID/dataset/items`. The [Actors API docs](https://scrape.ly/docs/api-actors.md) show the full flow.

Python (`pip install scrapely-client-python`). This script builds a small valuation screen and writes each ticker's daily closes to a CSV:

```python
import csv
import os
from scrapely_client import ScrapelyClient

client = ScrapelyClient(os.environ["SCRAPELY_TOKEN"], api_url="https://api.scrape.ly")

run = client.actor("querystone/yahoo-finance-scraper").call(
    run_input={
        "tickers": ["AAPL", "GOOG", "MSFT"],
        "dataSections": ["profile", "price", "history", "financials"],
        "historyRange": "6mo",
        "historyInterval": "1d",
    }
)
for t in client.dataset(run.default_dataset_id).iterate_items():
    info = t["stock_info"]
    upside = info["target_mean_price"]  t["current_price"]  1
    print(f'{t["ticker"]:5} ${t["current_price"]:>8.2f}  P/E {info["pe_ratio"]:5.1f}  '
          f'target ${info["target_mean_price"]:.2f} ({upside:+.1%})')
    with open(f'{t["ticker"]}-daily.csv', "w", newline="") as f:
        writer = csv.DictWriter(f, fieldnames=["date", "open", "high", "low", "close", "adj_close", "volume"])
        writer.writeheader()
        writer.writerows(t["history"]["data"])
```

Node.js (`npm install scrapely-client`):

```javascript
import { ScrapelyClient } from 'scrapely-client';

const client = new ScrapelyClient({ token: process.env.SCRAPELY_TOKEN, baseUrl: 'https://api.scrape.ly' });

const run = await client.actor('querystone/yahoo-finance-scraper').call({
  tickers: ['AAPL', 'GOOG', 'MSFT'],
  dataSections: ['profile', 'price', 'recommendations'],
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items.map((t) => [t.ticker, t.current_price, t.market_cap, t.stock_info.recommendation_key]));
```

The [Python client docs](https://scrape.ly/docs/client-python.md) cover the rest; the JavaScript client works the same way. If you came looking for an endpoint rather than a scraper, our [Yahoo Finance API](https://scrape.ly/api/yahoo-finance-api.md) page presents the same Actor as an API product.

### With an AI agent (MCP)

Scrape.ly runs a hosted MCP server at `https://mcp.scrape.ly`. In Cursor, add it to `~/.cursor/mcp.json`:

```json
{
  "mcpServers": {
    "scrapely": {
      "url": "https://mcp.scrape.ly",
      "headers": { "Authorization": "Bearer YOUR_TOKEN" }
    }
  }
}
```

In Claude Code, run `claude mcp add --transport http scrapely https://mcp.scrape.ly` and sign in with `/mcp`. Add `?actors=querystone/yahoo-finance-scraper` to the URL to expose only this tool. Then ask: "Use scrapely to get Yahoo Finance data for NVDA, AMD and INTC with profile, price and financials, and compare their P/E, revenue and net margin in a table." The agent calls `call-actor` and `get-actor-output`; our run below was started the same way. The [MCP docs](https://scrape.ly/docs/mcp.md) list the other clients.

## A real run: Apple, Alphabet and Microsoft

We ran the preset on 26 October 2026 at 14:25 UTC, during US market hours. It saved 3 tickers with all 14 selected blocks in 8.8 seconds, and its list price was $0.0016. The **Overview** view:

| Ticker | Name                  | Sector                 | Exchange | Price   | Change | Market cap |
| ------ | --------------------- | ---------------------- | -------- | ------- | ------ | ---------- |
| AAPL   | Apple Inc.            | Technology             | NasdaqGS | $345.25 | −0.71% | $5.04T     |
| MSFT   | Microsoft Corporation | Technology             | NasdaqGS | $527.11 | +0.50% | $3.91T     |
| GOOG   | Alphabet Inc.         | Communication Services | NasdaqGS | $316.90 | −0.12% | $3.88T     |

And a few fundamentals from the same records:

| Ticker | P/E  | Fwd P/E | Analyst target | Fiscal year | Revenue | Net income | Buy / Hold / Sell | Next earnings |
| ------ | ---- | ------- | -------------- | ----------- | ------- | ---------- | ----------------- | ------------- |
| AAPL   | 39.6 | 36.1    | $329.25        | Sep 2025    | $416.2B | $112.0B    | 24 / 14 / 6       | 2026-11-02    |
| MSFT   | 29.4 | 22.3    | $601.73        | Jun 2026    | $331.8B | $133.7B    | 54 / 3 / 0        | 2026-10-28    |
| GOOG   | 15.9 | 20.6    | $422.36        | Dec 2025    | $402.8B | $132.2B    | 56 / 5 / 0        | 2026-10-28    |

```plaintext
20261026T14:25:26.225Z [Scrapely] Container started (setup 0.8 s)
20261026T14:25:27.384Z [scrapely.actor] INFO  [Scrapely] Initializing API storage for run 697688491f864a758
20261026T14:25:27.550Z [scrapely.proxy_configuration] INFO  Platform proxy access check succeeded.
20261026T14:25:27.550Z [scrapely.actor] INFO  [Status message]: Scraping 3 ticker(s)...
20261026T14:25:33.811Z [scrapely.actor] INFO  Saved 3 tickers in 6.3s, 30 requests, 0.89 MB, retries 0, codes none, slowest 5.8s (https://feeds.finance.yahoo.com/rss/2.0/headline 5.6s; https://query2.finance.yahoo.com/v1/test/getcrumb 5.7s; https://query2.finance.yahoo.com/v8/finance/chart/GOOG 5.7s).
20261026T14:25:34.312Z [Scrapely] Container state: status=exited exitCode=0 oomKilled=false
```

What three records tell you:

- **Apple traded above its analyst target.** At $345.25 it sat 4.6% over the $329.25 mean target, while Microsoft had 14.2% to go to $601.73 and Alphabet 33.3% to $422.36. Apple also had the most cautious analysts: 6 of 44 rated it sell or strong sell; Microsoft and Alphabet had none.
- **Margins differ more than size.** From the latest annual income statements, Microsoft kept 40.3% of revenue as net income, Alphabet 32.8% and Apple 26.9%, though Apple had the largest revenue at $416.2 billion.
- **Fiscal years don't line up.** Apple's latest year ended in September 2025, Alphabet's in December 2025 and Microsoft's in June 2026. Compare by the period in each record, not by "last year".
- **History follows the window you set.** The preset asks for 1 January to 30 June 2025, so each record carries 122 daily candles. Over that half-year Microsoft rose 18.8% (from $418.58 to $497.41 at the close), Alphabet fell 6.9% and Apple 15.9%.
- **Everything else rides along.** Each record also held 5 news items, one options expiration (Apple: 49 calls and 49 puts) and full dividend histories, 92 payments for Apple going back to 1987. All three records came to about 340 KB of JSON, from 30 requests with zero retries.

We left out the names of company officers that `stock_info` includes; the companies, institutional holders and market data are what this sample is about.

## What it costs

The Actor has one charge event: **$0.000537 per ticker** saved ($0.54 per 1,000), with all the blocks you select and platform usage (compute and proxy) included. Tickers that aren't found aren't charged. Prices checked on 26 October 2026.

- **Our run:** 3 tickers × $0.000537 = **$0.0016** at list price. Our account was billed $0.0013 after its plan's 20% Store discount.
- **The S\&P 500, daily:** about 500 tickers × $0.000537 = $0.27 per run, roughly $5.90 for a month of 22 trading days.
- **A 10-ticker watchlist every 15 minutes in market hours:** 26 runs × 10 tickers = 260 tickers a day, $0.14 a day.

The Free plan's $5 of monthly credit covers over 9,300 ticker records. A maximum charge per run stops a run cleanly at your cap; see [pricing](https://scrape.ly/pricing.md) for plans.

## What to watch out for

- **Delays are Yahoo's.** Data is subject to Yahoo Finance's delays: many non-US exchanges lag by 15 to 20 minutes. Check `price_info.market_state` and the quote time before you act on a price.
- **Intraday history is short.** Yahoo keeps 1-minute candles for about 7 days, other minute intervals for about 60 days and hourly candles for about 2 years. Daily, weekly and monthly candles go back to the first trading day. Ask for more and `history_error` says why the block is empty.
- **Big records get trimmed.** Fifty option expirations plus minute candles can exceed the 9 MB item limit; the Actor trims the block and marks it `"truncated": true`. Select only the blocks you need.
- **News is capped.** Yahoo's feeds return at most about 50 recent articles per ticker, often about 20.
- **Not every block exists for every instrument.** Crypto, forex and indices have no statements, holders or options, and some small caps have no analyst coverage. You get empty values, not invented ones.
- **Not included:** ESG scores and the full analyst upgrade and downgrade history.

## Is it legal to scrape Yahoo Finance?

The Actor reads market data Yahoo Finance shows to any visitor without signing in. Yahoo's [Terms of Service](https://legal.yahoo.com/us/en/yahoo/terms/otos/index.html) are explicit, though: users agree not to "access or collect data, or attempt to access or collect data, from our Services using any automated means, devices, programs, algorithms or methodologies, including but not limited to robots, spiders, scrapers, data mining tools, or data gathering or extraction tools, for any purpose without our express, prior permission." Market data also often comes from exchanges and data vendors with their own licenses, so redistributing it, for example in a paid app, raises separate questions. Even the open-source [yfinance](https://github.com/ranaroussi/yfinance) library says it is "intended for research and educational purposes" and points users to Yahoo's terms.

Company financials and prices aren't personal data, but officer names and insider transactions are about people, which is why our sample drops them. For research and internal analysis at modest volumes, keep a record of what you collect and why. This is general information, not legal advice: if Yahoo Finance data feeds a commercial product, ask a lawyer about your case.

## Why Scrape.ly for Yahoo Finance data

- **One record instead of a dozen calls.** Libraries like yfinance hand you a quote, a history frame and three statements from separate calls that you then join. The Actor returns all 15 blocks for a ticker in one row.
- **No rate-limit babysitting.** Guides such as [webscraping.cc's](https://webscraping.cc/blog/how-to-scrape-yahoo-finance/) warn that too many requests from one IP bring "429 Too Many Requests or empty payloads". The Actor brings its own datacenter proxy, so you never manage IPs; our run made 30 requests with zero retries.
- **No selectors to refresh.** HTML scraping is fragile here: [Scrapfly's guide](https://scrapfly.io/blog/posts/guide-to-yahoo-finance-api) notes "Yahoo rotates its DOM often". The Actor reads Yahoo Finance's JSON endpoints directly, without a browser.
- **Pennies at scale, ready to schedule.** $0.54 per 1,000 tickers, platform usage included. [Schedule it](https://scrape.ly/blog/schedule-web-scraping.md), send rows to a sheet or webhook, and combine it with filings from the [SEC EDGAR Scraper](https://scrape.ly/store/querystone/sec-edgar-scraper.md), as in our guide to [alternative data for investors](https://scrape.ly/blog/alternative-data-finance.md).

## FAQ

### Does Yahoo Finance have an official API?

Not anymore. Yahoo shut its official finance API down in 2017, and what people call the "Yahoo Finance API" today is unofficial JSON endpoints and libraries built on them. The Actor reads those same public endpoints and returns one clean record per ticker.

### Can you scrape Yahoo Finance with Python?

Yes. Install `scrapely-client-python`, call `querystone/yahoo-finance-scraper` with your tickers and iterate over the dataset, as in the valuation-screen example above. The scraping runs in the cloud, so your script needs no browser, proxy or retry logic.

### How do I download historical stock prices from Yahoo Finance?

Select the `history` block and set `startDate` and `endDate`, or `historyRange` and `historyInterval`. Each record holds OHLCV candles with adjusted close. Daily candles go back to the first trading day; intraday ones only days to weeks.

### Can I scrape Yahoo Finance financial statements?

Yes. Select `financials` and set `financialsPeriod` to `annual`, `quarterly` or `both`. You get the income statement, balance sheet and cash flow with every line item Yahoo reports, keyed by fiscal period end.

### Can I scrape crypto, forex and indices too?

Yes. Use Yahoo's symbols: `BTC-USD`, `EURUSD=X`, `^GSPC`, `GC=F`. Blocks that don't apply, such as financial statements for a currency pair, come back empty.

### How much does it cost to scrape Yahoo Finance?

$0.000537 per ticker with every block you select, platform usage included, so $0.54 per 1,000 tickers. Our three-ticker run cost $0.0016 at list price.

Scrape.ly Store Scrape Yahoo Finance Run the Apple, Alphabet and Microsoft preset as-is, or paste your own watchlist. Quotes, statements, history and options in one row per ticker, $0.54 per 1,000.

[Try it free](https://scrape.ly/store/querystone/yahoo-finance-scraper.md) [Browse the Store](https://scrape.ly/store.md)

About the author

[Querystone](https://scrape.ly/blog/author/querystone.md) Actor publisher on the Scrape.ly Store

Search results, AI answers, web pages and market feeds as structured data. For SEO teams, developers and AI builders, plus finance, crypto and sports data for analysts. A Scrapely studio.

- [Website](https://scrape.ly/users/querystone.md)

Keep reading

## More in Tutorials

- [![Pixel-art robot with an orange >\_ on its terminal head pulls a company review card with a briefcase and five gold stars out of an office building with lit windows, two glass doors and a potted plant, and drops it into a crate of job cards](https://scrape.ly/media/scrape-glassdoor.png?w=750)](https://scrape.ly/blog/scrape-glassdoor.md)
  ### [How to Scrape Glassdoor Jobs and Reviews](https://scrape.ly/blog/scrape-glassdoor.md)
  [Scrape Glassdoor job listings with pay ranges and company ratings, and employee reviews with every sub-rating, without logging in. No-code steps, curl, Python, Node.js and MCP, plus two real runs from 26 October 2026 and their exact cost.](https://scrape.ly/blog/scrape-glassdoor.md)
- [![Pixel-art robot with an orange >\_ on its terminal head pulls a company card out of an office tower with the blue LinkedIn logo on its sign and drops it into a crate](https://scrape.ly/media/scrape-linkedin.png?w=750)](https://scrape.ly/blog/scrape-linkedin.md)
  ### [How to Scrape LinkedIn: Companies, Jobs, Posts and Ads (2026)](https://scrape.ly/blog/scrape-linkedin.md)
  [Scrape LinkedIn company pages, job ads, posts and ads with ready-made scrapers that need no LinkedIn login. A real run on Google, Notion and Stripe with its exact cost, code for the API and AI agents, and what hiQ v. LinkedIn means for you.](https://scrape.ly/blog/scrape-linkedin.md)
- [![Pixel-art robot with an orange >\_ on its terminal head pulls a review card with five gold stars out of a Google Maps pin standing on a folded map](https://scrape.ly/media/scrape-google-maps-reviews.png?w=750)](https://scrape.ly/blog/scrape-google-maps-reviews.md)
  ### [How to Scrape Google Maps Reviews: Text, Stars, Dates and Owner Replies](https://scrape.ly/blog/scrape-google-maps-reviews.md)
  [Scrape Google Maps reviews for any place URL or place ID: review text, stars, dates, owner replies and visit details. A real run on the Eiffel Tower, its exact cost, and code for curl, Python, Node.js and AI agents.](https://scrape.ly/blog/scrape-google-maps-reviews.md)

## The internet is full of data. Start owning yours.

Scrape.ly gives you the infrastructure, the tooling, and the team to extract, process, and operationalize web data at any scale. Setup takes minutes.

[Get Started Free](https://my.scrape.ly/register) [Chat with Support](mailto:hello@scrape.ly?subject=Question%20about%20Scrape.ly\&body=Hi%2C%20I%20have%20a%20question%20about%20Scrape.ly.)

No credit card. No setup calls.
