# Yahoo Finance Scraper — Quotes, Fundamentals, Options & News (`fetch_cat/yahoo-finance-scraper`) Actor

Export Yahoo Finance quotes, company fundamentals, option chains, and market news for public ticker symbols without an account or API key.

- **URL**: https://apify.com/fetch\_cat/yahoo-finance-scraper.md
- **Developed by:** [Hanna Nosova](https://apify.com/fetch_cat) (community)
- **Categories:** Business, News, Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.60 / 1,000 finance records

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?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## Yahoo Finance Scraper — Quotes, Fundamentals, Options & News

Export current Yahoo Finance quotes, company fundamentals, option contracts, and financial news for stocks, ETFs, crypto, forex, indices, funds, and futures.

Use one scheduled Actor run to feed market dashboards, watchlists, valuation screens, option analysis, news monitoring, spreadsheets, databases, APIs, or AI agents. No Yahoo account or API key is required.

### What data can you export?

- **Quote snapshots:** market price, previous close, market cap, currency, exchange, and company name.
- **Company fundamentals:** sector, industry, website, employee count, business summary, valuation ratios, beta, revenue, gross profit, EBITDA, recommendation, and analyst target.
- **Option chains:** calls and puts with expiration, strike, bid, ask, last price, volume, open interest, implied volatility, and moneyness.
- **Financial news:** headline, publisher, publication time, article URL, and thumbnail.
- **Provenance:** requested symbol, record type, Yahoo Finance source URL, and scrape timestamp on every row.

### Input example

```json
{
  "symbols": ["AAPL", "MSFT", "SPY"],
  "dataTypes": ["quote", "fundamentals", "options", "news"],
  "maxNewsPerSymbol": 10,
  "maxOptionContractsPerSymbol": 100,
  "maxRunSeconds": 240
}
```

### Ready-to-run examples

Open a public example to inspect its input, run it, or reuse it as a task:

- [Export Blue-Chip Quotes and Fundamentals](https://apify.com/fetch_cat/yahoo-finance-scraper/examples/blue-chip-market-snapshot)
- [Export the AAPL Options Chain](https://apify.com/fetch_cat/yahoo-finance-scraper/examples/aapl-options-chain)
- [Monitor AAPL and MSFT Market News](https://apify.com/fetch_cat/yahoo-finance-scraper/examples/market-news-monitor)

**Quick quote check**

```json
{"symbols":["AAPL","MSFT"],"dataTypes":["quote"]}
```

**Options and news watchlist**

```json
{"symbols":["SPY","QQQ"],"dataTypes":["options","news"],"maxNewsPerSymbol":10,"maxOptionContractsPerSymbol":50}
```

### Output examples

Quote row:

```json
{
  "recordType": "quote",
  "symbol": "AAPL",
  "companyName": "Apple Inc.",
  "currency": "USD",
  "exchange": "NMS",
  "marketPrice": 319.97,
  "previousClose": 318.45,
  "marketCap": 4740000000000,
  "sourceUrl": "https://finance.yahoo.com/quote/AAPL",
  "scrapedAt": "2026-09-06T08:09:00.000Z"
}
```

Option row:

```json
{
  "recordType": "options",
  "symbol": "AAPL",
  "optionType": "call",
  "expiration": "2026-09-11T00:00:00.000Z",
  "contractSymbol": "AAPL260911C00320000",
  "strike": 320,
  "bid": 4.1,
  "ask": 4.25,
  "openInterest": 842,
  "impliedVolatility": 0.24,
  "inTheMoney": false,
  "sourceUrl": "https://finance.yahoo.com/quote/AAPL/options",
  "scrapedAt": "2026-09-06T08:09:00.000Z"
}
```

### Input settings

| Setting | JSON key | Description |
|---|---|---|
| Yahoo Finance symbols | `symbols` | Required list of 1–50 symbols such as `AAPL`, `SPY`, `BTC-USD`, `EURUSD=X`, `^GSPC`, or `GC=F`. |
| Data types | `dataTypes` | Choose `quote`, `fundamentals`, `options`, and/or `news`. |
| News limit | `maxNewsPerSymbol` | Maximum 1–50 news rows per symbol. |
| Option limit | `maxOptionContractsPerSymbol` | Maximum 1–1,000 contracts per call/put side for the nearest available expiration. |
| Run deadline | `maxRunSeconds` | Shared 60–270 second deadline; completed rows are retained if the deadline is reached. |

### Output fields

| Record | Fields |
|---|---|
| All | `recordType`, `symbol`, `sourceUrl`, `scrapedAt` |
| Quote | `companyName`, `currency`, `exchange`, `marketPrice`, `previousClose`, `marketCap` |
| Fundamentals | `companyName`, `sector`, `industry`, `website`, `employees`, `businessSummary`, `trailingPE`, `forwardPE`, `dividendYield`, `beta`, `revenue`, `grossProfit`, `ebitda`, `recommendationKey`, `targetMeanPrice` |
| Options | `optionType`, `expiration`, `contractSymbol`, `strike`, `lastPrice`, `bid`, `ask`, `volume`, `openInterest`, `impliedVolatility`, `inTheMoney` |
| News | `headline`, `publisher`, `publishedAt`, `articleUrl`, `thumbnailUrl` |

Fields are included only when Yahoo Finance reports a truthful value for that symbol and record type. For example, crypto symbols generally have no company employee count, and some symbols have no listed options.

### Who is it for?

- **Portfolio and investment teams** maintaining recurring watchlists and market dashboards.
- **Analysts and researchers** comparing public fundamentals and near-term option liquidity.
- **Data engineers** loading finance snapshots into warehouses, spreadsheets, or alerting systems.
- **Developers and AI teams** supplying current public market context to applications and agents.

### Common use cases

- Schedule a watchlist export before market open.
- Enrich an internal security master with public company profile and valuation fields.
- Compare near-term option liquidity and implied volatility.
- Monitor symbol-related headlines and route new articles through a webhook.
- Load current finance records into Google Sheets, BigQuery, Snowflake, or a BI dashboard.
- Give an AI agent fresh public market context before generating a report.

### Pricing

This Actor uses pay-per-event pricing:

- `start` is charged once when a valid run begins.
- `result` is charged once for each quote, fundamentals, option, or news row saved successfully.

See the live [**Pricing** tab](https://apify.com/fetch_cat/yahoo-finance-scraper/pricing) for current rates and account-tier discounts. Unsupported symbols and error diagnostics are not charged as results.

### Tips and limits

- Use Yahoo Finance ticker notation exactly, including suffixes such as `BTC-USD`, `EURUSD=X`, or `^GSPC`.
- Start with one symbol and only the data types you need.
- Option output covers the nearest available expiration in the initial release.
- Fundamentals vary by asset class and reporting coverage.
- News is selected by Yahoo Finance for the requested symbol and can contain related-market coverage.
- Yahoo Finance can throttle public requests. Retry a failed run later rather than increasing concurrency.
- Source data can change after publication; store scrape timestamps with downstream records.

### API usage

#### Node.js

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

const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('fetch_cat/yahoo-finance-scraper').call({
  symbols: ['AAPL', 'MSFT'],
  dataTypes: ['quote', 'fundamentals', 'news'],
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);
```

#### Python

```python
import os
from apify_client import ApifyClient

client = ApifyClient(os.environ['APIFY_TOKEN'])
run = client.actor('fetch_cat/yahoo-finance-scraper').call(run_input={
    'symbols': ['AAPL', 'MSFT'],
    'dataTypes': ['quote', 'fundamentals', 'news'],
})
items = client.dataset(run['defaultDatasetId']).list_items().items
print(items)
```

#### cURL

```bash
curl -X POST "https://api.apify.com/v2/acts/fetch_cat~yahoo-finance-scraper/runs?token=$APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"symbols":["AAPL","MSFT"],"dataTypes":["quote","fundamentals","news"]}'
```

### Use with MCP and AI agents

Connect an MCP-compatible client to:

```text
https://mcp.apify.com?tools=fetch_cat/yahoo-finance-scraper
```

Then ask: “Fetch the latest quote, fundamentals, and news for AAPL and MSFT.”

### Related Actors

- [Yahoo Finance Stock Data Scraper](https://apify.com/fetch_cat/yahoo-finance-stock-data-scraper) — historical OHLCV candles, dividends, and splits.
- [Stocktwits Scraper](https://apify.com/fetch_cat/stocktwits-scraper) — public market discussion and sentiment context.
- [Google News Scraper](https://apify.com/fetch_cat/google-news-scraper) — broader keyword and company news discovery.
- [Hacker News Search Scraper](https://apify.com/fetch_cat/hacker-news-search-scraper) — technology-company news and market discussion discovery.
- [CoinMarketCap Crypto Prices Scraper](https://apify.com/fetch_cat/coinmarketcap-crypto-prices-scraper) — cryptocurrency market and asset data.

### FAQ

#### Does it require a Yahoo Finance account?

No. It exports data available on Yahoo Finance's public surfaces.

#### Can I scrape several symbols in one run?

Yes. Submit up to 50 symbols. Each output row retains its requested symbol.

#### Why are some fundamentals empty?

Coverage varies by asset class and issuer. The Actor does not invent values when Yahoo Finance does not report them.

#### Does it return every option expiration?

The initial release returns contracts for the nearest available expiration, bounded by your per-side limit.

#### What happens if one symbol is invalid?

The Actor logs that symbol and continues with the others. If no requested symbol produces usable output, the run fails with an actionable message.

### Support

Open an issue from the Actor's **Issues** tab and include the symbol, selected data types, and run URL. Do not include credentials or private account data.

# Actor input Schema

## `symbols` (type: `array`):

Ticker symbols such as AAPL, MSFT, SPY, BTC-USD, or EURUSD=X.

## `dataTypes` (type: `array`):

Select one or more record types.

## `maxNewsPerSymbol` (type: `integer`):

Limits news records returned for each symbol.

## `maxOptionContractsPerSymbol` (type: `integer`):

Limits option contracts returned for each call and put side.

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

Shared deadline with time reserved for saving output and charges.

## Actor input object example

```json
{
  "symbols": [
    "AAPL",
    "MSFT"
  ],
  "dataTypes": [
    "quote",
    "fundamentals",
    "options",
    "news"
  ],
  "maxNewsPerSymbol": 10,
  "maxOptionContractsPerSymbol": 100,
  "maxRunSeconds": 240
}
```

# Actor output Schema

## `overview` (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 = {
    "symbols": [
        "AAPL",
        "MSFT"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("fetch_cat/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 = { "symbols": [
        "AAPL",
        "MSFT",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("fetch_cat/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 '{
  "symbols": [
    "AAPL",
    "MSFT"
  ]
}' |
apify call fetch_cat/yahoo-finance-scraper --silent --output-dataset

```

## MCP server setup

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