# Yahoo Finance Scraper - Quotes, Financials, Options & History (`topapi/yahoo-finance-scraper`) Actor

Scrape Yahoo Finance by ticker, search or screener: price, market cap, P/E, EPS, dividends, statements, earnings, analyst targets, holders, insiders, SEC filings, transcripts, options with Greeks, OHLCV history and news. Monitor mode. $0.36 per 1,000 tickers, no start fee.

- **URL**: https://apify.com/topapi/yahoo-finance-scraper.md
- **Developed by:** [Top Api](https://apify.com/topapi) (community)
- **Categories:** Business, Developer tools, News
- **Stats:** 3 total users, 2 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.36 / 1,000 tickers

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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

### What does Yahoo Finance Scraper do?

**Yahoo Finance Scraper** extracts stock, ETF, fund, index, crypto, currency and futures data from [finance.yahoo.com](https://finance.yahoo.com) and turns a list of tickers (or a search, a Yahoo screener or a trending list) into one structured row per ticker: the live quote plus the data sections you pick, from company profile and key statistics to full financial statements, analyst targets, holders, SEC filings, earnings-call transcripts, options with Greeks, price history and news. Built for investors, quant and fintech developers, analysts and AI agents who need Yahoo Finance data on a schedule without maintaining their own scraper.

Also known as: Yahoo Finance API, Yahoo stock scraper, yfinance alternative, stock quote API, stock data scraper.

<a href="https://console.apify.com/actors/Um8nH9k23laPJqyJ9"><img src="https://api.apify.com/v2/key-value-stores/qNQ9zP0xaj2yxGeMY/records/yahoo-finance-scraper-source.png" alt="Yahoo Finance quote page for Apple (AAPL) that Yahoo Finance Scraper turns into a ticker row" style="width:70%"></a>

- **One row per ticker, everything you pick inside it:** quote (90 Yahoo fields: price, change, volume, market cap, P/E, EPS, dividend, 52-week range, pre/post market), profile, statistics, statements, earnings, analysts, holders, insiders, SEC filings, transcripts, insights, similar symbols, news, options, history, dividends and technical indicators.
- **Every financial-statement line item:** income statement, balance sheet and cash flow from Yahoo's fundamentals series, annual (about 4 years), quarterly (5 quarters) and trailing 12 months: 160 annual line items for Apple on our test run.
- **Bulk and discovery:** 1,000 tickers per run is routine (Yahoo's quote endpoint answers 1,000 symbols in one call); 29 Yahoo screeners, trending tickers by country, the market summary, symbol search up to 1,000 matches, company names and ISINs resolved to tickers.
- **Rows when you need them:** price bars, option contracts, headlines and section records (statement periods, holders, insider trades, rating changes, filings, transcripts) can each come as rows of their own for spreadsheets and backtests.
- **Monitor mode:** every scheduled run returns each ticker's change since the last run, and only the headlines, filings, rating changes, insider trades and transcripts that are new; alert-only mode delivers just the movers; webhook and Telegram notifications.
- **yfinance layout:** one switch reshapes each row into the `stock_info`, `price_info`, `history`, `financials`, `dividends`, `splits`, `news`, `recommendations`, `holders`, `options` and `earnings` blocks yfinance-based tools expect.
- **No login, no cookies, no Yahoo API key.** Pay only for delivered rows: no start fee.
- **Export anywhere:** JSON, CSV, Excel, XML, RSS; Apify API, schedules, webhooks, Make, Zapier, n8n, Google Sheets; callable from AI agents through Apify's MCP server.

### What data can you get from Yahoo Finance?

<table>
<tr>
<td>💲 Price, change, change % (<code>regularMarketPrice</code>)</td>
<td>📊 Volume, avg. volume, bid/ask</td>
<td>🏦 Market cap, enterprise value</td>
</tr>
<tr>
<td>📈 P/E (trailing, forward), PEG, P/S, P/B</td>
<td>🧮 EPS (TTM, forward, current year)</td>
<td>💵 Dividend rate, yield, ex-date, payout ratio</td>
</tr>
<tr>
<td>📅 52-week range, 50/200-day averages</td>
<td>🌙 Pre-market and after-hours price</td>
<td>🏢 Sector, industry, employees, officers, address, website</td>
</tr>
<tr>
<td>📑 Income statement, balance sheet, cash flow (every line item)</td>
<td>🗓️ Earnings history, estimates, GAAP and non-GAAP, next earnings date</td>
<td>🎯 Analyst recommendations, price targets, upgrades/downgrades</td>
</tr>
<tr>
<td>👥 Institutional and fund holders, holder breakdown</td>
<td>🕴️ Insider holders and insider transactions</td>
<td>📄 SEC filings with exhibit links</td>
</tr>
<tr>
<td>🎙️ Earnings-call transcripts (list + full text of the newest call)</td>
<td>🔍 Technical outlook, valuation, research report list</td>
<td>🧩 Similar symbols with score</td>
</tr>
<tr>
<td>📰 News headlines with summary (+ full article text)</td>
<td>🧾 Options chain with Greeks (delta, gamma, theta, vega, rho)</td>
<td>🕯️ OHLCV history from 1-minute to monthly bars</td>
</tr>
<tr>
<td>💸 Dividends and splits since listing</td>
<td>📐 SMA, EMA, RSI, MACD, ATR, volatility, returns 1d-5y</td>
<td>🏷️ Fund holdings, fund profile, fund performance (ETFs, mutual funds)</td>
</tr>
</table>

On a 100-ticker run with the default sections (run `q3gegHwqfT2LpTKiT`), 99 of 100 rows carried sector, industry, analyst target and next earnings date (the 100th was the SPY ETF, which has none of those); on a 300-ticker run with every section (run `agAFB16dILLzGepM0`), every row carried statements, holders, insights, news, options, history and technicals.

### How to scrape Yahoo Finance with Yahoo Finance Scraper

1. [Create a free Apify account](https://console.apify.com/sign-up): $5 of monthly credit, no card needed.
2. Open [Yahoo Finance Scraper](https://apify.com/TopApi/yahoo-finance-scraper) and click **Try for free**.
3. Paste your symbols into **Tickers** (or fill **Search Yahoo Finance**, pick a **Yahoo screener**, or add a country to **Trending tickers in**), then tick the **Data sections** you want.
4. Click **Start**. A 3-ticker run finishes in about 2 seconds; 100 tickers with the default sections in about 9 seconds.
5. Open the **Storage** tab and **Export** as JSON, CSV or Excel, or add a schedule so it runs for you.

### ⬇️ Input

Every field is optional: with nothing filled in, the actor runs a 3-ticker sample (AAPL, MSFT, BTC-USD). The form opens with those tickers and the default sections.

| Parameter | Type | Description |
|---|---|---|
| **🔍 What to scrape** | | |
| `tickers` | List | Yahoo symbols, finance.yahoo.com/quote links, company names or ISINs: `AAPL`, `BRK-B`, `SAP.DE`, `7203.T`, `SPY`, `^GSPC`, `BTC-USD`, `EURUSD=X`, `GC=F`, `apple`, `US0378331005`. `BRK.B`-style class shares are matched to Yahoo's `BRK-B`. |
| `startUrls` | Request list | Quote links or a remote text/CSV file of them; same as Tickers. |
| `searchQueries` | List | Words to find symbols and headlines by: each match is a search-result row, each headline a news row. |
| `screeners` | Multi-select | 29 Yahoo lists plus trending tickers: day gainers/losers, most active, trending, most shorted, undervalued growth, 52-week gainers/losers, most watched, top ETFs and mutual funds, crypto lists, highest options open interest, and more. Each listed symbol becomes a ticker row. |
| `screenerRegion` | Select | Market for day gainers, day losers and most active (21 markets, by Yahoo's own criteria for its US lists). Default `US`. |
| `trendingRegions` | List | Country codes for Yahoo's trending tickers (`US`, `GB`, `DE`, `IN`...), up to 100 each. |
| `marketSummary` | Boolean | Add the ~15 indices, futures, rates and currencies at the top of finance.yahoo.com. Default `false`. |
| `maxDiscoveryResults` | Integer | Symbols per screener or trending list, in Yahoo's order (1-1,000). Default `25`. |
| **🧩 Data to include** | | |
| `sections` | Multi-select | `quote`, `profile`, `statistics`, `financials`, `earnings`, `analyst`, `ownership`, `insiders`, `secFilings`, `transcripts`, `calendar`, `insights`, `similar`, `news`, `options`, `history`, `dividends`, `technicals`. Default: quote, profile, statistics, analyst, earnings. |
| `financialsPeriod` | Select | `annual`, `quarterly`, `trailing`, `both` (annual + quarterly), `all`. Default `annual`. |
| `maxNewsPerTicker` | Integer | Headlines per ticker (0-60; Yahoo serves about 48). Default `10`. |
| `ratingChangesPerTicker` | Integer | Newest analyst upgrades/downgrades kept per ticker (Yahoo has 971 for Apple). Default `25`. |
| `secFilingsPerTicker` | Integer | Newest SEC filings kept per ticker. Default `20`. |
| `transcriptsPerTicker` | Integer | Newest earnings-call transcripts listed per ticker. Default `8`. |
| `modules` | List | Advanced: any extra Yahoo quoteSummary module name, added to each ticker row. |
| **📈 Price history** | | |
| `historyRange` | Select | `1d` ... `10y`, `max`, or `all` (every daily bar since listing: 11,556 for Apple). Default `1mo`. |
| `historyInterval` | Select | `1m` to `3mo`. Default `1d`. |
| `historyStartDate`, `historyEndDate` | Date | `2026-01-01` or a period back from today (`30 days`, `6 months`). Override the period. |
| `historyFormat` | Select | `nested` (bars inside the ticker row), `series` (column arrays inside the row), `rows` (one row per bar). Default `nested`. |
| `includePrePost` | Boolean | Intraday only: add pre-market and after-hours bars, each marked with its session. |
| `adjustedPrices` | Boolean | Scale OHLC by the adjusted-close factor. `adjClose` is always included on daily and longer bars. |
| `includeEvents` | Boolean | Dividend amount and split ratio on the bar where they happened. Default `true`. |
| `maxBarsPerTicker` | Integer | Keep the most recent N bars. `0` = all. |
| `comparisons` | List | Benchmarks whose closes ride along with each bar, e.g. `^GSPC`, `QQQ` (up to 10). |
| **🧾 Options chain** | | |
| `optionExpirations` | Integer | Expirations to read, nearest first; `0` = all. Default `1`. |
| `optionDates` | List | Only these expirations (`2026-12-18`); dates Yahoo does not list are named in `requestedDatesNotListed`. |
| `optionMinDays`, `optionMaxDays` | Integer | Days-to-expiration window. |
| `optionType` | Select | `both`, `call`, `put`. |
| `optionMinStrike`, `optionMaxStrike` | Number | Strike bounds. |
| `optionStrikeRangePercent` | Number | Only strikes within this % of the underlying price. |
| `optionStrikesAroundPrice` | Integer | Keep N strikes below and N above the price. |
| `optionMoneyness` | Select | `all`, `itm`, `otm`. |
| `optionMinVolume`, `optionMinOpenInterest`, `optionMinImpliedVolatility` | Number | Liquidity and IV floors, applied before anything is stored or charged. |
| `includeGreeks` | Boolean | Delta, gamma, theta (per day), vega and rho (per point) and a theoretical price by Black-Scholes-Merton with the 13-week T-bill rate (`^IRX`) and the dividend yield. Default `true`. |
| `optionsFormat` | Select | `nested` (chains inside the ticker row) or `rows` (one row per contract). |
| `maxOptionContracts` | Integer | Stop after N contracts per ticker. |
| **🔎 Search** | | |
| `searchType` | Select | `all`, `equity`, `etf`, `mutualfund`, `index`, `future`, `currency`, `cryptocurrency`. |
| `maxSymbolsPerQuery` | Integer | Search-result rows per search (up to 1,000; past the first 7, Yahoo's symbol lookup is paged in). Default `10`. |
| `maxNewsPerQuery` | Integer | Headline rows per search (up to ~50). Default `10`. |
| `scrapeSearchMatches` | Boolean | Also add each search's best symbol to the tickers ("apple" gets you AAPL's ticker row). |
| **➕ Extra data** (paid add-on, $0.00072 per full text) | | |
| `includeArticleText` | Boolean | The full text of each headline's article on finance.yahoo.com. Partner-site links are marked `external`, not charged. |
| `includeTranscriptText` | Boolean | Speaker, role, timestamp and text of every turn of the newest earnings call. |
| `maxTranscriptTexts` | Integer | Transcripts per ticker that get their text. Default `1` (see Limits). |
| **🔁 Monitoring** | | |
| `monitorMode` | Boolean | Remember earlier runs: ticker rows come back with `previousPrice` and `changeSinceLastRunPercent`; headlines, filings, rating changes, insider trades and transcripts only when new. |
| `monitorStoreName` | String | Named key-value store that keeps the memory. Default `yahoo-finance-monitor`. |
| `monitorKey` | String | Name for a watch, so two schedules with the same tickers stay separate. |
| `sinceDate` | Date | Only headlines, filings, rating changes, insider trades and transcripts on or after this day. |
| `onlyMovers` | Boolean | Deliver a ticker only when it moved at least the threshold (since the last delivered run in monitor mode, else today). |
| `alertThresholdPercent` | Number | The move that counts, e.g. `5`. Default `5`. |
| `webhookUrl` | String | We POST a JSON summary (counts, movers, dataset id) when a run delivers anything. |
| `telegramBotToken`, `telegramChatId` | String | Your bot sends a message when a run delivers anything. |
| **📦 Output** | | |
| `layout` | Select | `yahoo` (Yahoo's own field names) or `yfinance` (the yfinance-style blocks). |
| `newsFormat` | Select | `nested` or `rows` (one row per headline). |
| `sectionsAsRows` | Boolean | Statement periods, holders, insider trades, rating changes, earnings quarters, estimates, filings and transcripts as rows of their own. |
| `compactOutput` | Boolean | ~40 core fields per ticker, for AI agents and quick looks. |
| `maxItems` | Integer | Hard cap on all rows of the run; also caps your cost. `0` = no cap. |
| `lang`, `region` | String | Language and region of names and news (`en-US`, `de-DE`; `US`, `GB`...). |
| **⚙️ Advanced** | | |
| `proxyConfiguration` | Proxy | Not needed: Yahoo answers directly. If Yahoo slows a run down, the actor moves to Apify's datacenter proxy by itself. |
| `maxConcurrency` | Integer | Tickers read at once. Default `8`. |
| `maxRunSeconds` | Integer | Stop starting new tickers after N seconds and finish cleanly. |

The input names used by other Yahoo Finance actors also work (`symbols`, `start_date`/`end_date`, `range`/`interval`, `includeNews`, `includeOptions`, `historyAsRows`, `maxNewsResults`, `dataTypes`, `onlyNewOrChanged` and more), so an existing integration can switch with its input unchanged.

#### Input JSON

```json
{
  "tickers": ["AAPL", "MSFT", "NVDA", "SPY", "BTC-USD"],
  "sections": ["quote", "profile", "statistics", "financials", "analyst", "news", "options"],
  "financialsPeriod": "both",
  "maxNewsPerTicker": 5,
  "optionExpirations": 2,
  "optionStrikesAroundPrice": 10
}
```

#### Pick the sections before anything else

The price is per ticker row whatever you pick, but each extra section is one more request per ticker and a bigger row. A price poll needs only `quote`; a research pull can take everything.

#### Use rows for spreadsheets, nesting for apps

Bars, contracts and headlines inside the ticker row keep one row per symbol (easy for apps and APIs). `historyFormat: rows`, `optionsFormat: rows`, `newsFormat: rows` and `sectionsAsRows` give one flat row per bar, contract, headline or record, which is what CSV, Excel and backtests want.

#### Give large runs 1 GB of memory

Apify gives a run a CPU share proportional to its memory. A 300-ticker run with the default sections took 179 s at 128 MB and 21 s at 1,024 MB for the same platform cost. For hundreds of tickers or many sections, set **Memory** to 1024 MB.

### ⬆️ Output

<a href="https://console.apify.com/actors/Um8nH9k23laPJqyJ9"><img src="https://api.apify.com/v2/key-value-stores/qNQ9zP0xaj2yxGeMY/records/yahoo-finance-scraper-output.png" alt="Yahoo Finance Scraper output: ticker rows with price, market cap, P/E, sector, analyst view and next earnings date" style="width:70%"></a>

A ticker row (excerpt; real values from run `q3gegHwqfT2LpTKiT`, sections shortened):

```json
{
  "rowType": "ticker",
  "input": "AAPL",
  "matchedBy": "ticker",
  "symbol": "AAPL",
  "longName": "Apple Inc.",
  "quoteType": "EQUITY",
  "exchange": "NMS",
  "currency": "USD",
  "regularMarketPrice": 339.5,
  "regularMarketChangePercent": -1.00309,
  "marketCap": 4954723975168,
  "trailingPE": 38.933487,
  "sector": "Technology",
  "industry": "Consumer Electronics",
  "targetMeanPrice": 328.35025,
  "recommendationKey": "buy",
  "nextEarningsDate": "2026-11-02",
  "assetProfile": { "fullTimeEmployees": 150000, "companyOfficers": ["... 10 officers ..."] },
  "financialData": { "currentPrice": 339.5, "totalRevenue": 466822987776, "...": "..." },
  "upgradeDowngradeHistory": { "totalAvailable": 971, "history": ["... 25 newest ..."] },
  "marketTime": "2026-10-20T20:00:01.000Z",
  "url": "https://finance.yahoo.com/quote/AAPL/"
}
```

#### Row types

| `rowType` | One row is | Charged as |
|---|---|---|
| `ticker` | One symbol: the quote plus every section you picked | `ticker` |
| `priceBar` | One OHLCV bar (`historyFormat: rows`) | `price-bar` |
| `option` | One option contract with Greeks (`optionsFormat: rows`) | `option-contract` |
| `news` | One headline (from a search, or `newsFormat: rows`) | `news` |
| `searchResult` | One symbol found by a search | `search-result` |
| `record` | One statement period, holder, insider trade, rating change, earnings quarter, estimate, SEC filing or transcript (`sectionsAsRows`) | `record` |
| `notFound` | An input Yahoo does not know (`reason` says why) | not charged |

#### Fields

Quote fields are Yahoo's own names; every field Yahoo's quote endpoint returns is kept (about 90 per stock). Fill rates below are counted on real runs: 100 large US stocks with the default sections (run `q3gegHwqfT2LpTKiT`) and 300 stocks with every section (run `agAFB16dILLzGepM0`).

| Field / section | What it is | Fill |
|---|---|---|
| `symbol`, `longName`, `exchange`, `currency`, `quoteType` | Identity | 100% |
| `regularMarketPrice`, `regularMarketChange(Percent)`, `regularMarketVolume`, `regularMarketDayHigh/Low`, `regularMarketPreviousClose`, `regularMarketOpen` | The session's quote | 100% |
| `bid`, `ask`, `bidSize`, `askSize`, `averageDailyVolume3Month/10Day` | Book and volume | 100% |
| `fiftyTwoWeekHigh/Low/Range`, `fiftyDayAverage`, `twoHundredDayAverage` (+ change %) | Ranges and averages | 100% |
| `preMarketPrice`, `postMarketPrice` (+ change, time) | Extended hours, when Yahoo has them | when trading |
| `marketCap`, `sharesOutstanding`, `bookValue`, `priceToBook` | Size and book | 100% on the 300-stock run |
| `trailingPE`, `forwardPE`, `epsTrailingTwelveMonths`, `epsForward`, `epsCurrentYear` | Earnings multiples (no P/E for loss makers) | 70%, 98%, 100% |
| `dividendRate`, `dividendYield`, `trailingAnnualDividendYield`, `dividendDate` | Dividends (yield in %) | 100% on payers |
| `earningsTimestamp(Start/End)`, `earningsCallTimestampStart/End` (+ `...Iso`) | Next earnings window | as Yahoo lists it |
| `sector`, `industry`, `country`, `website`, `fullTimeEmployees`, `longBusinessSummary` | Headline profile fields | 97-100% (stocks) |
| `beta`, `enterpriseValue`, `profitMargins`, `grossMargins`, `returnOnEquity`, `totalRevenue`, `freeCashflow`, `debtToEquity` | Headline statistics | 93-100% |
| `targetMeanPrice/Median/High/Low`, `recommendationKey`, `recommendationMean`, `numberOfAnalystOpinions` | Analyst consensus | 98-100% (covered stocks) |
| `nextEarningsDate`, `exDividendDate`, `payoutRatio` | Calendar | next earnings 99%; dividend dates on payers |
| `assetProfile` | Address, phone, website, officers with pay, governance risk scores | 100% |
| `summaryDetail`, `defaultKeyStatistics`, `financialData`, `equityPerformance` | Yahoo's statistics tables | 100% |
| `financials.annual/quarterly/trailing.incomeStatement/balanceSheet/cashFlow` | Statement periods, newest first, every line item Yahoo has | 100% |
| `earnings`, `earningsHistory`, `earningsTrend` (+ GAAP / non-GAAP variants), `calendarEvents` | Earnings history, estimates, revisions | 100% |
| `recommendationTrend`, `upgradeDowngradeHistory` | Rating trend and rating changes (firm, grades, price targets) | 100%, 98% |
| `institutionOwnership`, `fundOwnership`, `majorHoldersBreakdown`, `netSharePurchaseActivity` | Holders | 100% |
| `insiderHolders`, `insiderTransactions` | Insiders | 93% |
| `secFilings` | Date, type, title, Yahoo link, exhibit links | 98% |
| `earningsCallTranscripts` | Title, fiscal period, date, link (+ `turns` with text) | 92% |
| `insights` | Short/intermediate/long-term outlook, support, resistance, valuation, research reports, significant developments | 100% |
| `similar` | Symbols people also look at, with score | 100% |
| `news[]` | `uuid`, `title`, `publisher`, `link`, `publishedAt`, `summary`, `relatedTickers`, `thumbnail` (+ `articleText`) | 100% (summary 73% of headlines) |
| `options` | `expirationDates`, `strikes`, `chains[]` with calls and puts | 100% of optionable stocks |
| `history` | `range`, `interval`, `bars[]` (date, open, high, low, close, adjClose, volume, dividend, split, session) | 100% |
| `dividends[]`, `splits[]` | Every dividend and split since listing | 44% (dividend payers) |
| `technicals` | SMA 20/50/200, EMA 12/26, MACD, RSI 14, ATR 14, 1-year volatility and max drawdown, returns 1d-5y, price vs SMA, golden cross | 100% |
| `previousPrice`, `changeSinceLastRun(Percent)`, `isNew` | Monitor mode deltas | monitor runs |
| `failedSections` | Sections Yahoo did not answer for this ticker (the rest of the row is still delivered) | rare |

**Option contract:** `contractSymbol`, `optionType`, `strike`, `expirationDate`, `daysToExpiration`, `lastPrice`, `bid`, `ask`, `mid`, `spread`, `change`, `percentChange`, `volume`, `openInterest`, `impliedVolatility`, `inTheMoney`, `lastTradeDate`, `contractSize`, `currency`, `underlyingPrice`, `greeks` {`delta`, `gamma`, `theta`, `vega`, `rho`, `theoreticalPrice`}. **Price bar:** `symbol`, `date`, `time`, `interval`, `open`, `high`, `low`, `close`, `adjClose`, `volume`, `dividend`, `split`, `session`, `provisional` (the current session's bar, filled with Yahoo's last price), `comparisons`. **Search result:** `query`, `rank`, `symbol`, `shortName`, `longName`, `exchange`, `quoteType`, `sector`, `industry`, `score`, price for lookup matches.

**yfinance layout** (`layout: "yfinance"`): `ticker`, `stock_info` {symbol, name, sector, industry, market_cap, current_price, previous_close, day_high, day_low, volume, pe_ratio, dividend_yield, beta}, `price_info`, `history` {period, interval, start, end, data\[]}, `financials` {income_statement, balance_sheet, cash_flow}, `dividends`, `splits`, `news`, `recommendations`, `holders` {major_holders, institutional_holders, mutualfund_holders}, `options` {expiration_date, calls, puts, available_expirations}, `earnings` {annual/quarterly earnings, annual/quarterly net income}. All 74 field paths of the most-run yfinance-style Yahoo actor are present and filled (offline check on captured Apple data).

### How can I use Yahoo Finance data?

- 📊 **Portfolio dashboards:** a scheduled quote run for your watchlist into Google Sheets or a database every few minutes.
- 🧮 **Fundamental screens and valuation models:** every statement line item, annual and quarterly, for hundreds of tickers in one run.
- 🤖 **Backtests and quant research:** daily or intraday OHLCV rows with adjusted closes, dividends and splits, plus technical indicators.
- 🧾 **Options analytics:** chains with Greeks, filtered by moneyness, strike window, days to expiration, volume and open interest.
- 📰 **News and event monitoring:** new headlines, SEC filings, rating changes and insider trades per ticker since the last run, pushed to a webhook or Telegram.
- 🎙️ **Earnings research:** the newest earnings call as speaker turns, next to estimates, surprises and analyst targets.
- 🧠 **AI agents:** compact ticker rows through Apify's MCP server for chat assistants and LLM pipelines.

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

Pay per delivered row, no start fee, nothing charged for not-found symbols or for anything a filter removed:

| Event | Price |
|---|---:|
| Ticker row (quote + all the sections you picked) | $0.00036 |
| Price bar row | $0.00009 |
| Option contract row | $0.00009 |
| News headline row | $0.00018 |
| Search result row | $0.00018 |
| Section record row | $0.00045 |
| Full text add-on (article or transcript) | $0.00072 |

| Tickers | Cost |
|---:|---:|
| 10 | $0.0036 |
| 100 | $0.036 |
| 1,000 | $0.36 |
| 10,000 | $3.60 |

A watchlist of 20 tickers polled every 15 minutes during US market hours (26 runs a day) costs about $0.19 a day. Apify's free plan includes $5 of monthly credit.

### Integrations, API, scheduling & MCP

- **Schedules:** Console → Schedules → add this actor with your input (cron, e.g. every 5 minutes on weekdays). Turn on **Monitor mode** to get the change since the last run on every ticker and only new headlines and filings.
- **Webhooks and alerts:** Apify webhooks on run success, or this actor's own `webhookUrl` / Telegram inputs, which fire only when a run delivered something.
- **API:** start runs and read datasets with the [Apify API](https://apify.com/TopApi/yahoo-finance-scraper/api), from [Python](https://apify.com/TopApi/yahoo-finance-scraper/api/python) or [JavaScript](https://apify.com/TopApi/yahoo-finance-scraper/api/javascript).
- **MCP:** add the actor to Claude, Cursor or any MCP client through [Apify's MCP server](https://apify.com/TopApi/yahoo-finance-scraper/api/mcp); use `compactOutput` for small rows.
- **No-code:** Make, Zapier, n8n, Google Sheets, Airtable, Slack, Keboola and every Apify integration.

### More scrapers from TopApi

- [Bing Search Scraper](https://apify.com/TopApi/bing-search-scraper): search results, news and People Also Ask for any company or ticker.
- [Website Content Crawler](https://apify.com/TopApi/website-content-crawler): investor-relations pages and filings as clean text or Markdown for RAG.
- [Twitter Profile Scraper](https://apify.com/TopApi/x-profile-scraper): followers and bios of company and executive accounts.
- [Trustpilot Reviews Scraper](https://apify.com/TopApi/trustpilot-reviews-scraper): customer reviews and ratings next to a company's financials.
- [Facebook Search Posts Scraper](https://apify.com/TopApi/facebook-search-posts-scraper): public posts mentioning a brand or ticker.
- [Website Technology Scraper](https://apify.com/TopApi/website-technology-scraper): the tech stack behind a company's website.

See every actor on our [profile](https://apify.com/TopApi).

### Limits & empty runs

- **News:** Yahoo serves about 48 headlines per ticker; the summary comes from Yahoo's RSS feed and is present on about 3 in 4 headlines (73% on our test). Article text is read only for finance.yahoo.com articles; some are teasers of partner articles (`articleTextStatus: teaser_only`, not charged).
- **Transcripts:** Yahoo shows the newest earnings call in full to everyone; older calls are behind Yahoo's paid plan, so they are listed (title, date, link) and marked `paywalled`, never charged as text.
- **ESG scores:** Yahoo no longer returns them (checked on Apple, Microsoft, Exxon, JPMorgan and Vodafone); governance risk scores in `assetProfile` are kept.
- **Intraday history:** 1-minute bars for about the last 30 days (read in Yahoo's 7-day windows), 2-90 minute bars for 60 days, hourly for 2 years; a longer request is cut to that window and says so in `history.note`.
- **Statements:** about 4 annual periods, 5 quarters and trailing 12 months, as Yahoo publishes them; no trailing balance sheet exists.
- **Quotes** are as Yahoo shows them, with the exchange's delay in `exchangeDataDelayedBy`.
- **Speed:** Yahoo answers fast but limits a shared IP when a run asks too much at once; the actor slows down by itself and, only if that persists, moves to Apify's datacenter proxy. A 300-ticker run with every section took 171 s at 1 GB of memory.
- **Never charged:** symbols Yahoo does not know (`notFound` rows say why), rows a filter removed, rows past `maxItems` or your spending limit, headlines, filings and other items an earlier monitor run already delivered, and tickers that movers mode held back. In monitor mode every ticker row is still delivered and charged (it carries the change since the last run).

### FAQ

#### How much does Yahoo Finance Scraper cost?

$0.00036 per ticker row with every section you choose, so 1,000 tickers cost $0.36. Bars and option contracts are $0.00009 each, headlines and search results $0.00018, section records $0.00045. There is no start fee.

#### How many tickers can Yahoo Finance Scraper handle in one run?

As many as you list. Yahoo's quote endpoint takes 1,000 symbols per call; we have run 300 tickers with every section in under 3 minutes at 1 GB of memory. Screeners give up to 1,000 symbols each.

#### Can I run Yahoo Finance Scraper on a schedule?

Yes. Create an Apify schedule with your watchlist; with **Monitor mode** each run shows the change since the last run and only new headlines, filings, rating changes, insider trades and transcripts. **Only tickers that moved** turns it into a price alert.

#### Can I use Yahoo Finance Scraper with the Apify API or Python?

Yes: call it with `apify-client` for Python or JavaScript, or over plain HTTP, and read the dataset as JSON or CSV.

#### Can AI agents use Yahoo Finance Scraper through MCP?

Yes, through Apify's MCP server. Turn on **Compact ticker rows** for about 40 core fields per ticker.

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

No. The actor reads the same public JSON Yahoo's own website uses, as a signed-out visitor.

#### Does Yahoo Finance Scraper give the same fields as yfinance?

With **Row layout: yfinance blocks** each row has the `stock_info`, `price_info`, `history`, `financials`, `dividends`, `splits`, `news`, `recommendations`, `holders`, `options` and `earnings` blocks yfinance-based tools expect.

#### Why did Yahoo Finance Scraper return no rows?

The status message says why: the symbol is unknown to Yahoo (`notFound` row), no ticker moved past your movers threshold, a news-only monitor found no new headline, or your spending limit was reached. None of these is charged.

#### Which markets and asset types does Yahoo Finance Scraper cover?

Everything Yahoo Finance lists: US and international stocks (use Yahoo's suffix: `.L`, `.DE`, `.T`, `.TO`, `.NS`, `.HK`...), ETFs, mutual funds, indices, crypto, currencies and futures. Statements, analysts and holders exist for companies; funds get holdings and fund profile; crypto and currencies get the quote and history.

#### Your feedback

Found a gap or need another Yahoo Finance field? Open an issue on the [Issues tab](https://apify.com/TopApi/yahoo-finance-scraper/issues/open); we read every one.

# Actor input Schema

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

Yahoo symbols, finance.yahoo.com/quote links, company names or ISINs, one per line, e.g. AAPL, BRK-B, SAP.DE, 7203.T, SPY, ^GSPC, BTC-USD, EURUSD=X, GC=F, "apple", US0378331005.

## `startUrls` (type: `array`):

finance.yahoo.com/quote/... links, or a text/CSV file of them ("Link remote text file"). Same as putting them in Tickers.

## `searchQueries` (type: `array`):

Words to find symbols and headlines by, e.g. "lithium", "semiconductor ETF", "vanguard". Each match is a search-result row; headlines are news rows.

## `screeners` (type: `array`):

Yahoo Finance's ranked lists. Each listed symbol becomes a ticker row with the sections you pick.

## `screenerRegion` (type: `string`):

Day gainers, day losers and most active for another market, by Yahoo's own criteria for its US lists. The other lists are US-only.

## `trendingRegions` (type: `array`):

Country codes for Yahoo's trending-tickers list, e.g. US, GB, DE, FR, CA, AU, IN, HK. Up to 100 symbols each.

## `marketSummary` (type: `boolean`):

Add the indices, futures, rates and currencies Yahoo shows at the top of finance.yahoo.com (about 15 rows).

## `maxDiscoveryResults` (type: `integer`):

How many symbols to take from each screener or trending list, in Yahoo's order (screeners up to 1,000, trending up to 100).

## `sections` (type: `array`):

Quote = price, change, volume, market cap, P/E, EPS, dividend, 52-week range, pre/post market. Each other section adds its data to the ticker row.

## `financialsPeriod` (type: `string`):

Financial statements: annual (about 4 years), quarterly (5 quarters), trailing 12 months, or all three.

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

Latest Yahoo Finance headlines per ticker when News is on (Yahoo serves about 50).

## `ratingChangesPerTicker` (type: `integer`):

Newest upgrades/downgrades to keep per ticker (Yahoo has hundreds for large US companies; 0 = none).

## `secFilingsPerTicker` (type: `integer`):

Newest SEC filings to keep per ticker (10-K, 10-Q, 8-K, proxy...).

## `modules` (type: `array`):

Advanced: any Yahoo quoteSummary module name added to each ticker row, e.g. earningsTrendGaap, fundPerformance, upgradeDowngradeHistoryLatest.

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

How far back the bars go. "Every bar since listing" reads every daily bar Yahoo has (AAPL: 11,556 since 1980). Start and end dates override it.

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

Yahoo keeps 1-minute bars for about 30 days (we split them into its 7-day windows), 2-90 minute bars for 60 days, hourly for 2 years.

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

Optional first day (YYYY-MM-DD) or a period back from today, e.g. "30 days", "6 months". Overrides the period.

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

Optional last day, included. Empty = today.

## `historyFormat` (type: `string`):

Inside the ticker row (bars list or column series), or one row per bar (charged per bar; handy for CSV and backtests).

## `includePrePost` (type: `boolean`):

Intraday bars only: add extended-hours bars; each bar says its session (pre, regular, post).

## `adjustedPrices` (type: `boolean`):

Scale open/high/low/close by the adjusted-close factor (total-return series). adjClose is always included on daily and longer bars.

## `includeEvents` (type: `boolean`):

Bars carry the dividend amount or split ratio on the day it happened.

## `maxBarsPerTicker` (type: `integer`):

Keep only the most recent N bars per ticker. 0 = all in the period.

## `comparisons` (type: `array`):

Benchmark symbols whose closes come with each ticker's bars, e.g. ^GSPC, QQQ (up to 10).

## `optionExpirations` (type: `integer`):

How many expiration dates to read, nearest first. 0 = all of them (SPY lists 30+).

## `optionDates` (type: `array`):

Expiration dates (YYYY-MM-DD, e.g. 2026-12-18) instead of the nearest ones. Dates Yahoo does not list are named in requestedDatesNotListed.

## `optionMinDays` (type: `integer`):

Skip expirations sooner than this.

## `optionMaxDays` (type: `integer`):

Skip expirations later than this.

## `optionType` (type: `string`):

Both, or only calls or only puts.

## `optionMinStrike` (type: `number`):

Only strikes at or above this price.

## `optionMaxStrike` (type: `number`):

Only strikes at or below this price.

## `optionStrikeRangePercent` (type: `number`):

Only strikes within this % of the underlying price (10 keeps 90-110%). 0 = all.

## `optionStrikesAroundPrice` (type: `integer`):

Keep only the N strikes below and N above the current price in each expiration. 0 = all.

## `optionMoneyness` (type: `string`):

All contracts, or only in-the-money / out-of-the-money ones.

## `optionMinVolume` (type: `integer`):

Only contracts traded at least this many times today.

## `optionMinOpenInterest` (type: `integer`):

Only contracts with at least this open interest.

## `optionMinImpliedVolatility` (type: `number`):

Only contracts at or above this implied volatility (0.5 = 50%).

## `includeGreeks` (type: `boolean`):

Delta, gamma, theta (per day), vega and rho (per point) and a theoretical price by Black-Scholes-Merton, with the 13-week T-bill rate and the dividend yield.

## `optionsFormat` (type: `string`):

Chains inside the ticker row, or one row per contract (charged per contract).

## `maxOptionContracts` (type: `integer`):

Stop after this many contracts per ticker. 0 = no limit.

## `searchType` (type: `string`):

Which kind of symbols the search returns.

## `maxSymbolsPerQuery` (type: `integer`):

Search-result rows per search (up to 1,000; past the first few, Yahoo's symbol lookup is paged in).

## `maxNewsPerQuery` (type: `integer`):

News rows per search (0 = none, Yahoo serves up to about 50).

## `scrapeSearchMatches` (type: `boolean`):

Adds each search's best symbol to the tickers, so "apple" also gets you AAPL's ticker row.

## `includeArticleText` (type: `boolean`):

Read each headline's article on finance.yahoo.com and add its full text. Partner sites outside Yahoo are marked external, not charged.

## `includeTranscriptText` (type: `boolean`):

Add the full earnings-call transcript (speaker, role, time and text of every turn) to the newest transcripts. Turns on the Transcripts section.

## `transcriptsPerTicker` (type: `integer`):

Newest earnings-call transcripts to list per ticker (Yahoo lists up to ~60 for large US companies).

## `maxTranscriptTexts` (type: `integer`):

How many of the newest transcripts per ticker get their full text.

## `monitorMode` (type: `boolean`):

Remember what earlier runs delivered: new headlines, filings, rating changes, insider trades and transcripts only, plus previousPrice and changeSinceLastRunPercent on every ticker.

## `monitorStoreName` (type: `string`):

Named key-value store that keeps the memory between runs.

## `monitorKey` (type: `string`):

Optional name for this watch, so several schedules with the same tickers stay separate. Empty = derived from the input.

## `sinceDate` (type: `string`):

Keep only headlines, filings, rating changes, insider trades and transcripts dated on or after this day, e.g. 2026-10-01 or "7 days".

## `onlyMovers` (type: `boolean`):

Deliver a ticker only when it moved at least the threshold (since the last delivered run in monitor mode, else today). A run with no mover delivers and bills nothing.

## `alertThresholdPercent` (type: `number`):

Absolute % move that makes a ticker a mover, e.g. 5.

## `webhookUrl` (type: `string`):

Optional: we POST a JSON summary (counts, movers, dataset id) here when a run delivers anything.

## `telegramBotToken` (type: `string`):

Optional: your bot's token, to get a message when a run delivers anything.

## `telegramChatId` (type: `string`):

The chat the bot writes to.

## `layout` (type: `string`):

Yahoo's own field names, or the yfinance-style blocks (stock_info, price_info, history, financials, dividends, splits, news, recommendations, holders, options, earnings).

## `newsFormat` (type: `string`):

Headlines inside the ticker row, or one row per headline (charged per headline).

## `sectionsAsRows` (type: `boolean`):

One row per statement period, holder, insider trade, rating change, earnings quarter, estimate, SEC filing and transcript (charged per record) instead of lists inside the ticker row.

## `compactOutput` (type: `boolean`):

Only the ~40 main quote and headline fields: small rows for AI agents, MCP and quick looks.

## `maxItems` (type: `integer`):

Hard cap on all rows of the run (tickers + bars + contracts + headlines + records + search results); also caps your cost. 0 = no limit.

## `lang` (type: `string`):

Language of names and news, e.g. en-US, en-GB, de-DE, fr-FR, ja-JP, zh-Hant-HK.

## `region` (type: `string`):

Yahoo market region for names and news, e.g. US, GB, DE, JP, HK, AU, CA.

## `proxyConfiguration` (type: `object`):

Not needed: Yahoo answers directly. If it slows a run down, the actor moves to Apify's datacenter proxy by itself, then to residential within a small budget.

## `maxConcurrency` (type: `integer`):

How many tickers are read at once.

## `maxRunSeconds` (type: `integer`):

Stop starting new tickers after this many seconds and finish cleanly. 0 = the run's own timeout.

## Actor input object example

```json
{
  "tickers": [
    "AAPL",
    "MSFT",
    "BTC-USD"
  ],
  "screenerRegion": "US",
  "marketSummary": false,
  "maxDiscoveryResults": 25,
  "sections": [
    "quote",
    "profile",
    "statistics",
    "analyst",
    "earnings"
  ],
  "financialsPeriod": "annual",
  "maxNewsPerTicker": 10,
  "ratingChangesPerTicker": 25,
  "secFilingsPerTicker": 20,
  "historyRange": "1mo",
  "historyInterval": "1d",
  "historyFormat": "nested",
  "includePrePost": false,
  "adjustedPrices": false,
  "includeEvents": true,
  "maxBarsPerTicker": 0,
  "optionExpirations": 1,
  "optionType": "both",
  "optionStrikeRangePercent": 0,
  "optionStrikesAroundPrice": 0,
  "optionMoneyness": "all",
  "optionMinVolume": 0,
  "optionMinOpenInterest": 0,
  "optionMinImpliedVolatility": 0,
  "includeGreeks": true,
  "optionsFormat": "nested",
  "maxOptionContracts": 0,
  "searchType": "all",
  "maxSymbolsPerQuery": 10,
  "maxNewsPerQuery": 10,
  "scrapeSearchMatches": false,
  "includeArticleText": false,
  "includeTranscriptText": false,
  "transcriptsPerTicker": 8,
  "maxTranscriptTexts": 1,
  "monitorMode": false,
  "monitorStoreName": "yahoo-finance-monitor",
  "onlyMovers": false,
  "alertThresholdPercent": 5,
  "layout": "yahoo",
  "newsFormat": "nested",
  "sectionsAsRows": false,
  "compactOutput": false,
  "maxItems": 0,
  "lang": "en-US",
  "region": "US",
  "proxyConfiguration": {
    "useApifyProxy": false
  },
  "maxConcurrency": 8,
  "maxRunSeconds": 0
}
```

# Actor output Schema

## `tickers` (type: `string`):

No description

## `fundamentals` (type: `string`):

No description

## `priceBars` (type: `string`):

No description

## `options` (type: `string`):

No description

## `news` (type: `string`):

No description

## `allRows` (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",
        "BTC-USD"
    ],
    "sections": [
        "quote",
        "profile",
        "statistics",
        "analyst",
        "earnings"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("topapi/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",
        "BTC-USD",
    ],
    "sections": [
        "quote",
        "profile",
        "statistics",
        "analyst",
        "earnings",
    ],
}

# Run the Actor and wait for it to finish
run = client.actor("topapi/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",
    "BTC-USD"
  ],
  "sections": [
    "quote",
    "profile",
    "statistics",
    "analyst",
    "earnings"
  ]
}' |
apify call topapi/yahoo-finance-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,topapi/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/Um8nH9k23laPJqyJ9/builds/Lrf7x4WPuaV9hgjv2/openapi.json
