# Yahoo Finance Scraper: Stock Quotes, History, Profiles, News (`themineworks/yahoo-finance-scraper`) Actor

Scrape Yahoo Finance for any ticker: live quotes with market cap, P/E, 52 week range and dividends, daily, weekly or monthly price history with splits and dividends, company profile with key statistics and financials, and news headlines. Stocks, ETFs, crypto, FX. No login.

- **URL**: https://apify.com/themineworks/yahoo-finance-scraper.md
- **Developed by:** [The Mine Works](https://apify.com/themineworks) (community)
- **Categories:** Business, News, MCP servers
- **Stats:** 1 total users, 0 monthly users, 0.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.40 / 1,000 quotes

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Yahoo Finance Scraper: Stock Quotes, History, Profiles, News

[![20 Yahoo Finance quotes from 7 stock exchanges, crypto and FX in 5.8 seconds](https://api.apify.com/v2/key-value-stores/cUXz95yxflDho41nn/records/yahoo-finance-scraper-hero.png)](https://console.apify.com/actors/AKAHqs2X1JFffNAKY/input?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)

From **The Mine Works**, makers of [Threads Scraper](https://apify.com/themineworks/threads-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral) and [B2B Leads Finder](https://apify.com/themineworks/b2b-leads-finder?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral), with over 140,000 runs across 170+ public actors.

### Why choose this actor?

- **Quotes for any market in one fast call.** Our test run returned 20 of 20 quotes in 5.8 seconds: US stocks, India (NSE), London, Toronto, Tokyo and Frankfurt listings, an ETF, the S\&P 500 index, Bitcoin and EUR/USD, with price, change, market cap, P/E, 52 week range and dividend on each row. Yahoo serves 50 tickers per request, so 1,000 tickers take 20 requests.
- **History, fundamentals and news in the same run.** Switch on price history, profiles or news and each ticker gets them too: our 5 ticker test returned 1,369 daily bars (with the dividends on the day they were paid), 5 profiles (81 fields for Apple and Microsoft, 71 for Reliance) and 40 headlines in 12.2 seconds, with no request refused.
- **No Yahoo account, no API key, no cookies to paste.** The actor reads Yahoo Finance's public pages the way an anonymous visitor's browser does. Unknown symbols, tickers without news and anything Yahoo does not show come back as free status rows, never charged.

[![Run it on Apify](https://api.apify.com/v2/key-value-stores/cUXz95yxflDho41nn/records/button-run.png)](https://console.apify.com/actors/AKAHqs2X1JFffNAKY/input?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)

**Part of The Mine Works Company and business data family:** [Company Domain Finder](https://apify.com/themineworks/company-domain-finder?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral), [GST Taxpayer Lookup](https://apify.com/themineworks/gst-taxpayer-lookup?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral), [Company KYB Resolver](https://apify.com/themineworks/company-identity-resolver?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral), [SEC EDGAR Filings Scraper](https://apify.com/themineworks/sec-edgar-filings?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral), [EU VAT Checker (VIES)](https://apify.com/themineworks/eu-vat-vies-validator?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral), [Tech Stack Detector](https://apify.com/themineworks/tech-stack-detector?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral).

### Try it in one minute

Paste this into the input (JSON view) and press Start. It returns 10 quotes in a few seconds:

```json
{
  "tickers": ["AAPL", "MSFT", "NVDA", "AMZN", "GOOGL", "META", "TSLA", "RELIANCE.NS", "BTC-USD", "^GSPC"]
}
```

Give tickers the way Yahoo Finance writes them: US stocks as `AAPL`, other exchanges with their suffix (`RELIANCE.NS` for India's NSE, `BP.L` for London, `SHOP.TO` for Toronto, `7203.T` for Tokyo, `SAP.DE` for XETRA), funds and ETFs as `VFIAX` or `SPY`, indices with a caret (`^GSPC`, `^NSEI`), crypto as `BTC-USD`, currencies as `EURUSD=X` and futures as `GC=F`. Quote page links such as `https://finance.yahoo.com/quote/AAPL/` work too, and so does a leading `$`. Up to 1,000 tickers per run.

On Apify's free plan every run returns the first 10 results as a preview, so you can check the data and the fields before you pay. A paid Apify plan returns every result: https://apify.com/pricing?fpr=ymnoit

#### Copy to your AI assistant

```text
themineworks/yahoo-finance-scraper on Apify. Scrapes Yahoo Finance public data for any ticker: quotes (price, change, volume, market cap, P/E, EPS, 52 week range, dividend, next earnings), daily, weekly or monthly price history with dividends and splits, company profile with key statistics and financials, and news headlines. Call ApifyClient("TOKEN").actor("themineworks/yahoo-finance-scraper").call(run_input={"tickers": ["AAPL", "MSFT"], "includeQuotes": True, "includeHistory": True, "historyRange": "1y", "historyInterval": "1d"}), then client.dataset(run["defaultDatasetId"]).list_items().items. Required: tickers (Yahoo symbols like AAPL, RELIANCE.NS, BTC-USD, ^GSPC, EURUSD=X, or quote links). Optional: includeQuotes (default true), includeHistory (default false), includeProfile (default false), includeNews (default false), historyRange ("1mo", "3mo", "6mo", "ytd", "1y", "2y", "5y", "10y", "max", default "1y"), historyInterval ("1d", "1wk", "1mo", default "1d"), historyStartDate and historyEndDate (YYYY-MM-DD, replace the range), maxNewsPerTicker (default 10, 10 to 50). Rows carry record_type quote, price_bar, profile or news. Full spec: GET https://api.apify.com/v2/acts/themineworks~yahoo-finance-scraper/builds/default (Bearer TOKEN), which returns inputSchema and readme. Token: https://console.apify.com/account/integrations?fpr=ymnoit&utm_source=apify-readme&utm_medium=referral
```

### Key features

- **Quotes, up to 63 fields** (35 to 52 filled per row in our test, depending on the asset): price, change and change percent, previous close, open, day range, volume and average volumes, market cap, trailing and forward P/E and EPS, price to book, shares outstanding, dividend rate and yield, next earnings date, 52 week range and change, 50 and 200 day averages, bid and ask, pre and after hours prices, analyst rating, market state, plus supply for crypto, net assets and expense ratio for funds, open interest and expiry for futures.
- **Price history**: daily, weekly or monthly bars with open, high, low, close, adjusted close and volume, for a range (1 month to everything) or between two dates. The dividend and the split ratio sit on the bar where they happened, so one table holds the whole story.
- **Profiles with key statistics**: sector, industry, employees, business summary, website, address, officers as Yahoo publishes them, valuation (enterprise value, PEG, price to sales, EV to EBITDA, beta), ownership and short interest, revenue, margins, cash, debt, growth, analyst consensus and price targets, yearly revenue and earnings, quarterly EPS against estimates. ETFs and funds get family, category, assets and expense ratio.
- **News**: up to 50 recent headlines per ticker with publisher, link, time, related tickers and a flag that says whether the story is tagged with your ticker.
- **Every asset class Yahoo covers**: stocks on the world's exchanges, ETFs, mutual funds, indices, crypto, currencies and futures, mixed in one list.
- **A run summary you can audit**: the `OUTPUT` record lists every ticker with what was found, plus requests and charges, so an empty result always has a reason.

### How to use it

#### Basic: quotes for a watchlist

```json
{
  "tickers": ["AAPL", "MSFT", "NVDA", "SPY", "^GSPC"]
}
```

#### Several data types at once

Quotes, one year of daily prices, profiles and the 10 latest headlines for each ticker:

```json
{
  "tickers": ["AAPL", "MSFT", "RELIANCE.NS", "SPY", "BTC-USD"],
  "includeQuotes": true,
  "includeHistory": true,
  "historyRange": "1y",
  "historyInterval": "1d",
  "includeProfile": true,
  "includeNews": true,
  "maxNewsPerTicker": 10
}
```

Every row carries `record_type` (`quote`, `price_bar`, `profile` or `news`), so you can split the dataset into four tables, or use the four views on the dataset page.

#### Job: end of day prices into a spreadsheet

Schedule quotes for your portfolio after the market closes and append them to Google Sheets: one row per ticker per day with price, change, volume, market cap and P/E.

```json
{
  "tickers": ["AAPL", "MSFT", "JPM", "V", "BRK-B", "RELIANCE.NS", "TCS.NS", "SAP.DE"]
}
```

Scheduling tip: in Apify Console open this actor, then Schedules, then add a schedule for each trading day after the close of your main exchange, and connect the Google Sheets integration to append rows.

#### Job: back test data for a list of tickers

Ten years of weekly bars with dividends and splits, ready for pandas or a spreadsheet:

```json
{
  "tickers": ["SPY", "QQQ", "TLT", "GLD", "^GSPC", "^NSEI"],
  "includeQuotes": false,
  "includeHistory": true,
  "historyRange": "10y",
  "historyInterval": "1wk"
}
```

Or a fixed window with exact dates (weekly bars start on Monday, monthly bars on the 1st):

```json
{
  "tickers": ["AAPL", "^GSPC", "^FTSE"],
  "includeQuotes": false,
  "includeHistory": true,
  "historyInterval": "1wk",
  "historyStartDate": "2020-01-01",
  "historyEndDate": "2020-12-31"
}
```

`close` is the price as traded; `adj_close` is adjusted for later splits and dividends, which is what return calculations need.

#### Job: company research and screening

Profiles with sector, size, margins, growth, debt and analyst targets, to sort and filter in a sheet:

```json
{
  "tickers": ["AAPL", "MSFT", "NVDA", "AMZN", "GOOGL", "META", "TSLA", "AVGO", "ORCL", "CRM"],
  "includeQuotes": false,
  "includeProfile": true
}
```

#### Job: daily news digest for a portfolio

The latest headlines for each holding, with publisher and link. Filter on `mentions_ticker` to keep stories Yahoo tagged with that ticker.

```json
{
  "tickers": ["NVDA", "TSLA", "BTC-USD", "GC=F"],
  "includeQuotes": false,
  "includeNews": true,
  "maxNewsPerTicker": 20
}
```

Scheduling tip: run it every morning and drop `news_id` values you have already stored, since the actor does not remember earlier runs.

### Input parameters

| Parameter | Type | Default | What it does |
|---|---|---|---|
| `tickers` | array of strings | `["AAPL", "MSFT", "NVDA", "RELIANCE.NS", "BTC-USD"]` | Yahoo Finance symbols or quote links, up to 1,000. Stocks with their exchange suffix, ETFs, funds, indices (`^GSPC`), crypto (`BTC-USD`), currencies (`EURUSD=X`) and futures (`GC=F`). |
| `includeQuotes` | boolean | `true` | One quote row per ticker. |
| `includeHistory` | boolean | `false` | Price history rows: one per day, week or month. |
| `includeProfile` | boolean | `false` | One profile row per ticker with key statistics and financials. |
| `includeNews` | boolean | `false` | News headline rows. |
| `historyRange` | string | `"1y"` | `"1mo"`, `"3mo"`, `"6mo"`, `"ytd"`, `"1y"`, `"2y"`, `"5y"`, `"10y"` or `"max"`. Ignored when `historyStartDate` is set. |
| `historyInterval` | string | `"1d"` | `"1d"` (daily), `"1wk"` (weekly) or `"1mo"` (monthly). |
| `historyStartDate` | string (date) | none | First day of the history (YYYY-MM-DD). Replaces the range. |
| `historyEndDate` | string (date) | today | Last day of the history, with a start date. |
| `maxNewsPerTicker` | integer | `10` | Most headlines per ticker, newest first. From 10 to 50. |

If you switch everything off, the actor returns quotes. It also reads tickers from `symbols` or `startUrls` if your input already uses those names.

### What data do you get?

Up to four kinds of rows, told apart by `record_type`. Fields by group:

**Quote rows (`record_type: "quote"`)**

- Identity: `symbol`, `input` (what you typed), `name`, `short_name`, `quote_type` (EQUITY, ETF, MUTUALFUND, INDEX, CRYPTOCURRENCY, CURRENCY, FUTURE), `exchange`, `exchange_name`, `currency`, `exchange_timezone`, `url`.
- Price: `price`, `change`, `change_percent`, `previous_close`, `open`, `day_low`, `day_high`, `market_state` (PRE, REGULAR, POST, CLOSED), `market_time`, `quote_source`, `bid`, `ask`, `bid_size`, `ask_size`, `pre_market_price`, `pre_market_change_percent`, `post_market_price`, `post_market_change_percent`.
- Volume and trend: `volume`, `avg_volume_3m`, `avg_volume_10d`, `fifty_two_week_low`, `fifty_two_week_high`, `fifty_two_week_change_percent`, `fifty_day_average`, `two_hundred_day_average`, `first_trade_date`.
- Valuation and dividends: `market_cap`, `shares_outstanding`, `pe_trailing`, `pe_forward`, `eps_trailing`, `eps_forward`, `price_to_book`, `book_value`, `dividend_rate`, `dividend_yield_percent`, `trailing_dividend_rate`, `trailing_dividend_yield_percent`, `dividend_date`, `next_earnings_date`, `analyst_rating` (Yahoo's average rating, a score from 1 for strong buy to 5 for sell, with its label).
- Other assets: `circulating_supply`, `max_supply`, `volume_24h` (crypto); `net_assets`, `expense_ratio_percent`, `ytd_return_percent` (funds); `open_interest`, `expire_date`, `underlying_symbol` (futures).

**Price bar rows (`record_type: "price_bar"`)**

- `symbol`, `name`, `currency`, `interval`, `date` (the trading day in the exchange's time zone, or the Monday of the week, or the 1st of the month), `timestamp`, `open`, `high`, `low`, `close`, `adj_close`, `volume`, `dividend` (per share, on the bar where it was paid), `split_ratio` (for example `4:1`), `exchange_timezone`.

**Profile rows (`record_type: "profile"`)**

- Company: `name`, `quote_type`, `exchange`, `currency`, `sector`, `industry`, `full_time_employees`, `business_summary`, `website`, `ir_website`, `phone`, `address`, `city`, `state`, `zip`, `country`, `officers` (each with `name`, `title`, `year_born`, `total_pay` and `fiscal_year` when Yahoo shows them), `governance_overall_risk`.
- Valuation: `market_cap`, `enterprise_value`, `pe_trailing`, `pe_forward`, `peg_ratio`, `price_to_book`, `price_to_sales`, `enterprise_to_revenue`, `enterprise_to_ebitda`, `beta`.
- Shares: `shares_outstanding`, `float_shares`, `insiders_percent`, `institutions_percent`, `short_percent_of_float`, `short_ratio`.
- Financials (trailing 12 months): `total_revenue`, `revenue_per_share`, `gross_profits`, `ebitda`, `net_income`, `operating_cash_flow`, `free_cash_flow`, `total_cash`, `total_debt`, `debt_to_equity_percent`, `current_ratio`, `quick_ratio`, `book_value`, `eps_trailing`, `eps_forward`, `financial_currency`.
- Margins and growth, in percent: `gross_margin_percent`, `operating_margin_percent`, `ebitda_margin_percent`, `profit_margin_percent`, `return_on_assets_percent`, `return_on_equity_percent`, `revenue_growth_percent`, `earnings_growth_percent`.
- Dividends and dates: `dividend_rate`, `dividend_yield_percent`, `payout_ratio_percent`, `ex_dividend_date`, `last_split_factor`, `last_split_date`, `fiscal_year_end`, `most_recent_quarter`, `next_earnings_date`.
- Analysts: `recommendation`, `recommendation_mean`, `analyst_count`, `target_mean_price`, `target_median_price`, `target_high_price`, `target_low_price`.
- History: `yearly_financials` (revenue and earnings per fiscal year), `quarterly_eps` (actual against estimate).
- Funds and ETFs: `fund_family`, `fund_category`, `fund_total_assets`, `fund_expense_ratio_percent`, `fund_ytd_return_percent`, `fund_inception_date`.

**News rows (`record_type: "news"`)**

- `symbol`, `position` (1 is the newest), `news_id`, `title`, `publisher`, `url`, `published_at`, `news_type`, `related_tickers`, `mentions_ticker` (the story is tagged with your ticker), `search_query`, `thumbnail_url`.

Every percentage field has `percent` in its name and is in percent (0.32 means 0.32%). Ratios such as `current_ratio` and `beta` are plain numbers. Money fields are in the row's `currency` (profiles: `financial_currency`).

**Status rows (free)**

- An unknown ticker, a ticker without history, profile or news, and a value that is not a ticker each get one row with `_type: "status"`, `input`, `symbol`, `status` (`not_found`, `no_history`, `no_profile`, `no_news`, `invalid_input` or `error`), a plain `note` and the quote page `url`. They are never charged. Filter them out with `_type`.

#### Stable fields for automations

These fields were present in every row of their type in our test runs (20 quotes; 1,369 price bars; 40 headlines), and their names will not change:

| Field | Row type | What it is |
|---|---|---|
| `record_type` | all | quote, price_bar, profile or news |
| `symbol` | all | Yahoo Finance symbol |
| `name` | quote, price bar | Company or instrument name |
| `currency` | quote, price bar | Trading currency |
| `price` | quote | Last price |
| `change_percent` | quote | Change from the previous close, percent |
| `volume` | quote, price bar | Volume |
| `fifty_two_week_low` | quote | 52 week low |
| `fifty_two_week_high` | quote | 52 week high |
| `market_time` | quote | Time of the last price |
| `date` | price bar | Trading day, week or month |
| `close` | price bar | Close |
| `adj_close` | price bar | Close adjusted for splits and dividends |
| `title` | news | Headline |
| `published_at` | news | Publish time |
| `scraped_at` | all | When the row was read |

Profile rows always carry `symbol`, `name`, `quote_type`, `currency` and `url`; the other profile fields depend on what Yahoo publishes for that company or fund.

#### Output examples

Real rows from our test runs on 6 October 2026 (Indian time), trimmed. Some fields are left out to keep them short.

A US stock quote:

```json
{
  "record_type": "quote",
  "symbol": "AAPL",
  "name": "Apple Inc.",
  "quote_type": "EQUITY",
  "exchange_name": "NasdaqGS",
  "currency": "USD",
  "market_state": "POST",
  "price": 332.89,
  "change": -0.799988,
  "change_percent": -0.2397,
  "previous_close": 333.69,
  "day_low": 331.65,
  "day_high": 336.19,
  "volume": 32147465,
  "market_cap": 4858257080320,
  "pe_trailing": 38.1755,
  "pe_forward": 34.7381,
  "eps_trailing": 8.72,
  "dividend_rate": 1.08,
  "dividend_yield_percent": 0.32,
  "next_earnings_date": "2026-10-29",
  "fifty_two_week_low": 243.42,
  "fifty_two_week_high": 345.34,
  "fifty_two_week_change_percent": 29.9973,
  "two_hundred_day_average": 289.1586,
  "post_market_price": 333.05,
  "market_time": "2026-10-05T20:00:02.000Z",
  "url": "https://finance.yahoo.com/quote/AAPL/",
  "scraped_at": "2026-10-05T20:29:46.708Z"
}
```

A Tokyo listing and Bitcoin, from the same run:

```json
{
  "record_type": "quote",
  "symbol": "7203.T",
  "name": "Toyota Motor Corporation",
  "exchange_name": "Tokyo",
  "currency": "JPY",
  "price": 2893.5,
  "change_percent": 1.2953,
  "market_cap": 34264347312128,
  "pe_trailing": 8.2347,
  "dividend_yield_percent": 3.5,
  "next_earnings_date": "2026-11-05",
  "exchange_timezone": "Asia/Tokyo"
}
```

```json
{
  "record_type": "quote",
  "symbol": "BTC-USD",
  "name": "Bitcoin USD",
  "quote_type": "CRYPTOCURRENCY",
  "price": 85769.98,
  "change_percent": -0.0616,
  "market_cap": 1723181957120,
  "fifty_two_week_high": 126198.07,
  "circulating_supply": 20093952,
  "max_supply": 21000000,
  "quote_source": "CoinMarketCap"
}
```

A daily price bar with the dividend paid that day (Reliance Industries on the NSE):

```json
{
  "record_type": "price_bar",
  "symbol": "RELIANCE.NS",
  "name": "Reliance Industries Limited",
  "currency": "INR",
  "interval": "1d",
  "date": "2026-06-05",
  "timestamp": "2026-06-05T03:45:00.000Z",
  "open": 1304.5,
  "high": 1306,
  "low": 1288,
  "close": 1291,
  "adj_close": 1291,
  "volume": 17785223,
  "dividend": 6,
  "exchange_timezone": "Asia/Kolkata",
  "scraped_at": "2026-10-05T20:30:03.037Z"
}
```

A weekly bar that holds Apple's 4 for 1 split (2020 window):

```json
{
  "record_type": "price_bar",
  "symbol": "AAPL",
  "interval": "1wk",
  "date": "2020-08-31",
  "open": 127.580002,
  "high": 137.979996,
  "low": 110.889999,
  "close": 120.959999,
  "adj_close": 117.226921,
  "volume": 1167976600,
  "split_ratio": "4:1"
}
```

A company profile (business summary cut, 3 of 10 officers shown):

```json
{
  "record_type": "profile",
  "symbol": "AAPL",
  "name": "Apple Inc.",
  "sector": "Technology",
  "industry": "Consumer Electronics",
  "full_time_employees": 150000,
  "business_summary": "Apple Inc. designs, manufactures, and markets smartphones, personal computers, tablets, wearables, and accessories worldwide...",
  "website": "https://www.apple.com",
  "city": "Cupertino",
  "country": "United States",
  "officers": [
    { "name": "Mr. Timothy D. Cook", "title": "Executive Chairman of the Board", "year_born": 1961, "total_pay": 16759518, "fiscal_year": 2025 },
    { "name": "Mr. Kevan Parekh", "title": "Senior VP & CFO", "year_born": 1972, "total_pay": 4034174, "fiscal_year": 2025 },
    { "name": "Mr. John Ternus", "title": "CEO & Director", "year_born": 1976, "fiscal_year": 2025 }
  ],
  "market_cap": 4858257080320,
  "enterprise_value": 4891877048320,
  "peg_ratio": 2.67,
  "beta": 1.069,
  "total_revenue": 466822987776,
  "free_cash_flow": 107721875456,
  "profit_margin_percent": 27.619,
  "revenue_growth_percent": 16.4,
  "return_on_equity_percent": 148.751,
  "debt_to_equity_percent": 78.445,
  "recommendation": "buy",
  "analyst_count": 39,
  "target_mean_price": 328.0938,
  "last_split_factor": "4:1",
  "next_earnings_date": "2026-10-29",
  "yearly_financials": [
    { "year": 2024, "revenue": 391035000000, "earnings": 93736000000 },
    { "year": 2025, "revenue": 416161000000, "earnings": 112010000000 }
  ]
}
```

An ETF profile:

```json
{
  "record_type": "profile",
  "symbol": "SPY",
  "name": "State Street SPDR S&P 500 ETF Trust",
  "quote_type": "ETF",
  "pe_trailing": 25.0345,
  "dividend_yield_percent": 0.98,
  "fund_family": "State Street Investment Management",
  "fund_category": "Large Blend",
  "fund_total_assets": 811937038336,
  "fund_expense_ratio_percent": 0.0945,
  "fund_ytd_return_percent": 13.7463,
  "fund_inception_date": "1993-01-22"
}
```

A headline:

```json
{
  "record_type": "news",
  "symbol": "MSFT",
  "position": 1,
  "news_id": "1fc47fd4-e06c-3a92-9cbe-d998d001cbf7",
  "title": "Nasdaq notches record high close as investors focus on earnings",
  "publisher": "Reuters",
  "url": "https://finance.yahoo.com/markets/stocks/articles/wall-st-futures-dip-tech-104659511.html",
  "published_at": "2026-10-05T20:00:37.000Z",
  "news_type": "STORY",
  "related_tickers": ["CL=F", "NVDA", "^IXIC", "MSFT", "META", "TSLA"],
  "mentions_ticker": true,
  "search_query": "MSFT"
}
```

A free status row (never charged):

```json
{
  "_type": "status",
  "input": "RELIANCE.NS",
  "symbol": "RELIANCE.NS",
  "status": "no_news",
  "note": "Yahoo shows no news for \"RELIANCE.NS\" right now. Not charged.",
  "url": "https://finance.yahoo.com/quote/RELIANCE.NS/",
  "scraped_at": "2026-10-05T20:30:10.181Z"
}
```

### Pricing

Pay per event: you pay for the rows you receive, plus a flat $0.005 per run, whatever memory you choose. Each row type has its own price, because one daily bar and a full company profile are not worth the same.

Free plan runs return up to 10 results each; paid plans have no cap.

| Event | When it is charged | Free plan | Bronze (Starter) | Silver (Scale) | Gold (Business) |
|---|---|---|---|---|---|
| `quote-scraped` | Once per quote row stored in your dataset | $0.40 per 1,000 | $0.40 per 1,000 | $0.40 per 1,000 | $0.40 per 1,000 |
| `price-bar-scraped` | Once per price history row (one day, week or month) | $0.10 per 1,000 | $0.10 per 1,000 | $0.10 per 1,000 | $0.10 per 1,000 |
| `profile-scraped` | Once per profile row | $0.60 per 1,000 | $0.60 per 1,000 | $0.60 per 1,000 | $0.60 per 1,000 |
| `news-scraped` | Once per headline row | $0.20 per 1,000 | $0.20 per 1,000 | $0.20 per 1,000 | $0.20 per 1,000 |
| `run-start` | Once per run, when it starts | $0.005 | $0.005 | $0.005 | $0.005 |

The price of a single row is the price per 1,000 divided by 1,000. A year of daily history is about 250 bars per stock (365 for crypto, which trades every day).

Never charged:

- status rows: unknown tickers, values that are not tickers, and tickers with no history, profile or news;
- the quote request the actor makes to check your tickers when quotes are switched off (it only decides which tickers exist; no quote row is delivered or billed);
- a ticker you listed twice (read once);
- requests Yahoo refused;
- anything past your "Max cost per run": the actor stops delivering when your limit is reached instead of sending rows for free.

### FAQ

#### What do I get on the free plan?

On Apify's free plan every run returns the first 10 rows as a preview, counting quote, price bar, profile and news rows together, so you can check the data and the fields before you pay. A paid Apify plan returns every row with no cap: https://apify.com/pricing?fpr=ymnoit

#### What does this actor read?

The public data on Yahoo Finance quote pages: the quote panel, the historical prices table, the profile, statistics and financials summaries, and the news list. It reads the same JSON the finance.yahoo.com pages load in your browser, as an anonymous visitor.

#### Do I need a Yahoo account, cookies or an API key?

No. Yahoo hands every visitor an anonymous cookie and a short token; the actor fetches its own for each session, as a browser does. You never log in or paste anything.

#### Which tickers work?

Everything Yahoo Finance has a quote page for: stocks on most of the world's exchanges (with Yahoo's suffix, such as `.NS`, `.BO`, `.L`, `.TO`, `.T`, `.DE`, `.PA`, `.HK`, `.AX`), ETFs, mutual funds, indices (`^GSPC`, `^DJI`, `^IXIC`, `^NSEI`, `^FTSE`), crypto pairs (`BTC-USD`, `ETH-USD`), currencies (`EURUSD=X`, `USDINR=X`) and futures (`GC=F`, `CL=F`). If you are unsure of a symbol, search for the company on finance.yahoo.com and copy the symbol or the link.

#### How fresh are the prices?

As fresh as Yahoo's quote page at the time of the run. Each quote row carries `market_time` (the time of the last price) and `quote_source` (for example "Nasdaq Real Time Price" or "Delayed Quote"); many exchanges are delayed by 15 to 20 minutes on Yahoo. Outside trading hours you get the last close plus pre market or after hours prices where Yahoo shows them.

#### How far back does price history go?

As far as Yahoo has it: `"historyRange": "max"` returns everything (Apple's daily history starts in December 1980). Use weekly or monthly bars for long ranges to keep the row count down, or set `historyStartDate` and `historyEndDate` for an exact window.

#### Are prices adjusted for splits and dividends?

`open`, `high`, `low` and `close` are adjusted for splits, as Yahoo shows them; `adj_close` is also adjusted for dividends. The dividend per share and the split ratio are given on the bar where they happened.

#### How many tickers can I run at once, and how long does it take?

Up to 1,000 per run. Quotes come 50 tickers per request (20 quotes took 5.8 seconds in our test, including the visitor session). History, profiles and news take one request per ticker each, four tickers at a time: 5 tickers with a year of daily bars, profiles and news took 12.2 seconds, and 100 large US stocks with quotes, profiles and news (1,158 rows) took 40.5 seconds with none of the 212 requests refused.

#### Do I need to set up a proxy?

No. The actor uses Apify's datacenter proxy on its own, keeps a few visitor sessions on separate IPs and retries a refused request on a new one. There is no proxy setting to choose.

#### What happens with a wrong ticker?

It is checked first with the quote request, then reported in one free status row (`not_found`) and skipped for history, profiles and news, so it costs nothing. Values that are not ticker symbols at all are listed as `invalid_input`.

#### Which formats can I download?

JSON, CSV, Excel, XML, HTML table and RSS from the dataset page, or the same through the API. The dataset has four views (quotes, price history, profiles, news); for a spreadsheet, filter on `record_type` so each tab holds one row type.

#### Can I use it from Claude, ChatGPT or Cursor (MCP)?

- Connector URL: https://mcp.apify.com/?tools=themineworks/yahoo-finance-scraper
- Claude: Settings > Connectors > Add custom connector, paste the URL, sign in with Apify.
- ChatGPT: developer mode, add an MCP connector with the URL, sign in with Apify.
- Cursor or VS Code: add it as an HTTP MCP server with that URL.
- Claude Code: `claude mcp add -t http yahoo-finance-scraper "https://mcp.apify.com/?tools=themineworks/yahoo-finance-scraper"`

#### Is it legal to scrape Yahoo Finance?

The actor only reads data Yahoo Finance shows publicly to any visitor without signing in, and it does not collect personal data beyond company officers as Yahoo publishes them. Market data can be subject to the terms of Yahoo and of the exchanges that supply it: you are responsible for how you use and redistribute the data, and for data protection law such as GDPR and CCPA. Nothing here is investment advice.

### Integrations

- **Google Sheets**: append each run's quotes or bars to a sheet with Apify's Google Sheets integration, for a daily portfolio log.
- **Make, Zapier and n8n**: start the actor and read its dataset with the Apify apps and nodes, for example "price below the 200 day average, send an email".
- **Webhooks**: have Apify call your URL when a run succeeds, then fetch the dataset.
- **API and SDKs**: run it from Python or JavaScript with the Apify client, or with a plain HTTP call (see "Copy to your AI assistant" above); the rows load straight into pandas.
- **MCP clients**: Claude, ChatGPT, Cursor and VS Code can run it as a tool through the connector URL in the FAQ.

### More from The Mine Works

**Company and business data**

- [Company Domain Finder](https://apify.com/themineworks/company-domain-finder?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [GST Taxpayer Lookup](https://apify.com/themineworks/gst-taxpayer-lookup?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Company KYB Resolver](https://apify.com/themineworks/company-identity-resolver?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [SEC EDGAR Filings Scraper](https://apify.com/themineworks/sec-edgar-filings?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [EU VAT Checker (VIES)](https://apify.com/themineworks/eu-vat-vies-validator?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Tech Stack Detector](https://apify.com/themineworks/tech-stack-detector?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Bundesanzeiger Scraper](https://apify.com/themineworks/germany-bundesanzeiger-monitor?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Domain to LinkedIn URL Resolver](https://apify.com/themineworks/domain-to-linkedin-resolver?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [World Bank Trade Scraper](https://apify.com/themineworks/global-trade-data?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [US Import Records](https://apify.com/themineworks/us-import-supplier-intelligence?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Y Combinator Scraper](https://apify.com/themineworks/y-combinator-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Norway Company Register](https://apify.com/themineworks/norway-brreg-entity-search?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)

**Social media and video**

- [Threads Scraper](https://apify.com/themineworks/threads-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Reddit Scraper](https://apify.com/themineworks/reddit-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Threads Search Scraper](https://apify.com/themineworks/threads-search-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Instagram Profile Scraper](https://apify.com/themineworks/instagram-profile-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)

**Leads and business directories**

- [B2B Leads Finder](https://apify.com/themineworks/b2b-leads-finder?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Skip Trace Lookup](https://apify.com/themineworks/skip-trace-lookup?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Google Maps Email Scraper](https://apify.com/themineworks/maps-leads?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [2GIS Places Scraper](https://apify.com/themineworks/2gis-places-search?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)

**Marketing, SEO and reviews**

- [Facebook Ad Library Scraper](https://apify.com/themineworks/meta-ad-library-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Google Ads Transparency Scraper](https://apify.com/themineworks/google-ads-transparency?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Similarweb Scraper](https://apify.com/themineworks/similarweb-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Google News Scraper](https://apify.com/themineworks/google-news?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)

**LinkedIn**

- [LinkedIn Company Scraper](https://apify.com/themineworks/linkedin-company-details?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [LinkedIn Post Scraper](https://apify.com/themineworks/linkedin-post-search?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [LinkedIn Employees Scraper](https://apify.com/themineworks/linkedin-employees?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [LinkedIn Profile Scraper](https://apify.com/themineworks/linkedin-profile-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)

**Real estate**

- [Zillow Rentals Scraper](https://apify.com/themineworks/zillow-rental-listings?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Zillow Sold Comps Scraper](https://apify.com/themineworks/zillow-recently-sold?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [India Real Estate MCP](https://apify.com/themineworks/india-real-estate-mcp?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Housing.com Scraper](https://apify.com/themineworks/housing-com-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)

**Science, health and government data**

- [Academic Research MCP](https://apify.com/themineworks/academic-research-mcp?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [CourtListener Scraper](https://apify.com/themineworks/courtlistener-court-records?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Socrata Open Data Scraper](https://apify.com/themineworks/socrata-open-data?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [OpenAlex Scraper](https://apify.com/themineworks/openalex-scholarly-works?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)

**Jobs and hiring**

- [Foundit Monster India Jobs](https://apify.com/themineworks/foundit-jobs-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Hirist Jobs Scraper](https://apify.com/themineworks/hirist-jobs-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [India Jobs MCP](https://apify.com/themineworks/india-jobs-mcp?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Naukri Jobs Scraper](https://apify.com/themineworks/naukri-jobs?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)

**E-commerce and marketplaces**

- [Ozon.ru Scraper](https://apify.com/themineworks/ozon-product-search?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [⭐ Amazon Reviews Scraper](https://apify.com/themineworks/amazon-reviews?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Amazon Product Scraper](https://apify.com/themineworks/amazon-products?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Etsy Listings Scraper](https://apify.com/themineworks/etsy-search-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)

**Food and local services**

- [NoBroker Scraper](https://apify.com/themineworks/nobroker-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Swiggy Restaurant Scraper](https://apify.com/themineworks/swiggy-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Zomato Scraper](https://apify.com/themineworks/zomato-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)

**Developer and AI tools**

- [Website to Markdown Crawler](https://apify.com/themineworks/rag-crawler?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [GitHub Skill Finder](https://apify.com/themineworks/github-skill-discovery?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [GitHub Repo Scraper](https://apify.com/themineworks/github-repo-intelligence?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [GitHub Trending Scraper](https://apify.com/themineworks/github-trending-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)

**More tools**

- [G2 Reviews Scraper](https://apify.com/themineworks/g2-reviews-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Naver Blog Scraper](https://apify.com/themineworks/naver-blog-posts-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [WeChat Article Scraper 微信公众号文章](https://apify.com/themineworks/wechat-article-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Taobao Products Scraper 淘宝 天猫](https://apify.com/themineworks/taobao-products-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)

### Support

Found a ticker that should work and does not? Open an issue in the Issues tab with the symbol and the run ID, and we will look at it. For a new source or a field you need, email dmineworks@gmail.com.

*Give a list of tickers from any market and get Yahoo Finance quotes, price history with dividends and splits, company profiles with key statistics, and news as clean rows, without an account or an API key.*

# Actor input Schema

## `tickers` (type: `array`):

Yahoo Finance symbols or quote links, up to 1,000 per run: stocks (AAPL, MSFT), other exchanges with their suffix (RELIANCE.NS, BP.L, SHOP.TO, 7203.T), ETFs (SPY), mutual funds (VFIAX), indices (^GSPC), crypto (BTC-USD), currencies (EURUSD=X) and futures (GC=F). Links like https://finance.yahoo.com/quote/AAPL/ work too.

## `includeQuotes` (type: `boolean`):

One row per ticker: price, change, volume, market cap, P/E, EPS, 52 week range, moving averages, dividend, next earnings date, bid and ask, pre and post market prices.

## `includeHistory` (type: `boolean`):

One row per day, week or month: open, high, low, close, adjusted close and volume, with the dividend or split on the bar where it happened.

## `includeProfile` (type: `boolean`):

One row per ticker: sector, industry, employees, business summary, website, address, officers as Yahoo publishes them, valuation ratios, margins, cash, debt, growth, analyst targets, yearly revenue and earnings. Funds get family, category and expense ratio.

## `includeNews` (type: `boolean`):

Recent headlines Yahoo Finance shows for each ticker: title, publisher, link, time and related tickers.

## `historyRange` (type: `string`):

How far back the price history goes, counted from today. Ignored when you set a start date.

## `historyInterval` (type: `string`):

One row per trading day, per week or per month.

## `historyStartDate` (type: `string`):

Optional. First day of the price history (YYYY-MM-DD). Replaces the range.

## `historyEndDate` (type: `string`):

Optional, with a start date. Last day of the price history (YYYY-MM-DD). Empty means today.

## `maxNewsPerTicker` (type: `integer`):

Most headlines per ticker, newest first. Yahoo shows up to about 46 per ticker. From 10 to 50.

## Actor input object example

```json
{
  "tickers": [
    "AAPL",
    "MSFT",
    "NVDA",
    "RELIANCE.NS",
    "BTC-USD"
  ],
  "includeQuotes": true,
  "includeHistory": false,
  "includeProfile": false,
  "includeNews": false,
  "historyRange": "1y",
  "historyInterval": "1d",
  "maxNewsPerTicker": 10
}
```

# Actor output Schema

## `rows` (type: `string`):

No description

## `summary` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "tickers": [
        "AAPL",
        "MSFT",
        "NVDA",
        "RELIANCE.NS",
        "BTC-USD"
    ],
    "includeQuotes": true,
    "includeHistory": false,
    "includeProfile": false,
    "includeNews": false,
    "historyRange": "1y",
    "historyInterval": "1d",
    "maxNewsPerTicker": 10
};

// Run the Actor and wait for it to finish
const run = await client.actor("themineworks/yahoo-finance-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "tickers": [
        "AAPL",
        "MSFT",
        "NVDA",
        "RELIANCE.NS",
        "BTC-USD",
    ],
    "includeQuotes": True,
    "includeHistory": False,
    "includeProfile": False,
    "includeNews": False,
    "historyRange": "1y",
    "historyInterval": "1d",
    "maxNewsPerTicker": 10,
}

# Run the Actor and wait for it to finish
run = client.actor("themineworks/yahoo-finance-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "tickers": [
    "AAPL",
    "MSFT",
    "NVDA",
    "RELIANCE.NS",
    "BTC-USD"
  ],
  "includeQuotes": true,
  "includeHistory": false,
  "includeProfile": false,
  "includeNews": false,
  "historyRange": "1y",
  "historyInterval": "1d",
  "maxNewsPerTicker": 10
}' |
apify call themineworks/yahoo-finance-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,themineworks/yahoo-finance-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/AKAHqs2X1JFffNAKY/builds/iPaaeJwMLPy7w5G27/openapi.json
