# Yahoo Finance Scraper (`crawlerbros/yahoo-finance-scraper`) Actor

Pull live and historical stock data from Yahoo Finance with quote, OHLCV history, financials, dividends, splits, news, recommendations, institutional holders. Handles Yahoo's crumb-cookie auth automatically. HTTP-only, no proxy or API key required.

- **URL**: https://apify.com/crawlerbros/yahoo-finance-scraper.md
- **Developed by:** [Crawler Bros](https://apify.com/crawlerbros) (community)
- **Categories:** Developer tools, Other, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 20 bookmarks
- **User rating**: 5.00 out of 5 stars

## Pricing

from $1.00 / 1,000 results

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

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

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use 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

Pull live and historical stock data from Yahoo Finance for one or more tickers — quote, OHLCV history, financials, dividends, splits, news, analyst recommendations, and institutional holders. Uses the `yfinance` library, which transparently handles Yahoo's crumb-cookie auth (the crumb expires every ~24h and is refreshed per session). HTTP-only — no proxy, no API key.

### What it does

You provide one or more ticker symbols; the actor:

1. Fetches Yahoo's full quote payload (`Ticker.info`) for each ticker — 180+ fields covering the company, market data, valuation ratios, dividend yield, beta.
2. Optionally pulls daily OHLCV history (`Ticker.history()`) for a configurable date range and interval.
3. Optionally pulls financials (income statement, balance sheet, cash flow), dividends, splits, news headlines, analyst recommendation breakdown, and institutional / mutual-fund holders.
4. Emits one record per ticker. Empty fields are omitted (no nulls). When Yahoo returns nothing for a ticker (delisted, typo, regional restriction), an `error` field is set instead of crashing.

### Input

| Field | Type | Default | Description |
|---|---|---|---|
| `tickers` | array of strings (required) | `["AAPL", "MSFT"]` | Ticker symbols (US, ETFs, ADRs, foreign suffix tickers like `BP.L`, indices like `^GSPC`, currency pairs like `EUR=X`). |
| `startDate` | string | (today − 30 days) | Earliest date for historical OHLCV (`YYYY-MM-DD`). |
| `endDate` | string | (today) | Latest date for historical OHLCV (`YYYY-MM-DD`). |
| `interval` | enum | `1d` | One of `1d`, `5d`, `1wk`, `1mo`, `3mo`. |
| `includeHistory` | boolean | `true` | Include `history[]` (OHLCV daily candles). |
| `includeFinancials` | boolean | `false` | Include `financials.income` / `.balance` / `.cashflow`. |
| `includeDividends` | boolean | `true` | Include `dividends[]` history. |
| `includeSplits` | boolean | `true` | Include `splits[]` history. |
| `includeNews` | boolean | `true` | Include latest news headlines (capped at 25). |
| `includeRecommendations` | boolean | `true` | Include analyst recommendation breakdown. |
| `includeHolders` | boolean | `false` | Include institutional + mutual-fund holders (capped at 25 each). |
| `includeOptions` | boolean | `false` | Include the next-expiration options chain (calls + puts). Capped at 50 strikes per side. Also surfaces `optionExpirations[]` (next 20 expiry dates). |
| `includeEarningsCalendar` | boolean | `true` | Include `calendar` block with upcoming earnings/dividend dates and analyst earnings/revenue estimates. |
| `includeAnalystPriceTargets` | boolean | `true` | Include `analystPriceTargets` summary `{current, high, low, mean, median}`. |
| `includeInsiderTransactions` | boolean | `false` | Include the 25 most-recent insider transactions. |
| `includeSustainability` | boolean | `false` | Include ESG / sustainability scores when Yahoo publishes them (sparse coverage; many tickers return empty). |
| `includeQuarterlyFinancials` | boolean | `false` | Include quarterly income statement / balance sheet / cash flow under `financials.quarterly`. Only takes effect when `includeFinancials` is also on. |
| `includeEarningsHistory` | boolean | `true` | Include `earningsHistory[]` — last 4 quarters with `epsActual`, `epsEstimate`, `epsDifference`, `surprisePercent`. |
| `concurrency` | integer | `4` (1–16) | Number of tickers fetched in parallel. yfinance is mostly idle waiting on Yahoo, so concurrency speeds up bulk runs. Higher values may hit rate limits. |

#### Example input

```json
{
  "tickers": ["AAPL", "MSFT", "GOOGL"],
  "startDate": "2024-01-01",
  "endDate": "2024-12-31",
  "interval": "1d",
  "includeHistory": true,
  "includeFinancials": true,
  "includeNews": true
}
````

### Output

One record per ticker. Empty fields are omitted (no nulls).

```json
{
  "ticker": "AAPL",
  "summaryUrl": "https://finance.yahoo.com/quote/AAPL/",
  "companyName": "Apple Inc.",
  "shortName": "Apple",
  "sector": "Technology",
  "industry": "Consumer Electronics",
  "country": "United States",
  "currency": "USD",
  "exchange": "NMS",
  "quoteType": "EQUITY",
  "website": "https://www.apple.com",
  "businessSummary": "Apple Inc. designs, manufactures, and markets…",
  "fullTimeEmployees": 161000,
  "marketCap": 3927938957312,
  "currentPrice": 267.55,
  "previousClose": 271.06,
  "open": 269.50,
  "dayHigh": 270.00,
  "dayLow": 266.50,
  "fiftyTwoWeekHigh": 280.00,
  "fiftyTwoWeekLow": 175.00,
  "volume": 50000000,
  "averageVolume": 60000000,
  "beta": 1.2,
  "trailingPE": 30.5,
  "forwardPE": 28.0,
  "trailingEps": 7.2,
  "dividendYield": 0.005,
  "dividendRate": 1.0,
  "dayChange": -3.51,
  "dayChangePercent": -1.2949,
  "history": [
    {"date": "2024-10-01", "open": 226.05, "high": 229.65, "low": 224.21, "close": 226.21, "volume": 47921400, "dividends": 0.0, "stock_splits": 0.0}
  ],
  "historyCount": 43,
  "dividends": [
    {"date": "2024-08-12", "value": 0.25}
  ],
  "dividendCount": 90,
  "splits": [
    {"date": "2020-08-31", "value": 4.0}
  ],
  "splitCount": 5,
  "financials": {
    "income": {"2024-09-30": {"Total_Revenue": 391035000000, "Net_Income": 93736000000}}
  },
  "news": [
    {"title": "Apple Q4 Earnings Beat Expectations", "url": "https://...", "publisher": "Reuters", "publishedAt": "2024-11-01T20:00:00Z"}
  ],
  "newsCount": 10,
  "recommendations": {
    "strongBuy": 12, "buy": 22, "hold": 13, "sell": 1, "strongSell": 0
  },
  "calendar": {
    "Earnings_Date": ["2026-05-01"],
    "Earnings_High": 2.16,
    "Earnings_Low": 1.75,
    "Earnings_Average": 1.95413,
    "Revenue_Average": 109689807090.0,
    "Dividend_Date": "2026-02-12",
    "Ex_Dividend_Date": "2026-02-09"
  },
  "analystPriceTargets": {
    "current": 267.22, "high": 350.0, "low": 215.0, "mean": 297.7055, "median": 300.0
  },
  "insiderTransactions": [
    {"Insider": "COOK TIMOTHY", "Shares": 5000.0, "Date": "2024-10-15"}
  ],
  "insiderTransactionCount": 25,
  "options": {
    "expiration": "2026-04-29",
    "calls": [
      {"strike": 250.0, "lastPrice": 18.5, "bid": 18.0, "ask": 19.0, "volume": 100, "openInterest": 5000, "impliedVolatility": 0.35, "inTheMoney": true}
    ],
    "puts": [
      {"strike": 250.0, "lastPrice": 1.5, "bid": 1.4, "ask": 1.6, "volume": 200, "openInterest": 3000, "impliedVolatility": 0.30, "inTheMoney": false}
    ]
  },
  "optionExpirations": ["2026-04-29", "2026-05-01", "2026-05-08"],
  "scrapedAt": "2024-12-16T14:23:11+00:00"
}
```

#### Output fields

- **`ticker`** — uppercase ticker symbol.
- **`summaryUrl`** — Yahoo Finance summary page URL.
- **`companyName`** / **`shortName`** — full and short legal names.
- **`sector`** / **`industry`** / **`country`** — Yahoo's GICS-ish classification.
- **`currency`** — quote currency (`USD`, `EUR`, `GBP`, `JPY`, etc.).
- **`exchange`** — exchange code (`NMS`, `NYQ`, `LSE`).
- **`quoteType`** — `EQUITY`, `ETF`, `INDEX`, `CURRENCY`, `MUTUALFUND`, `CRYPTOCURRENCY`.
- **`website`** / **`businessSummary`** — company URL + long-form description.
- **`marketCap`** / **`fullTimeEmployees`** — fundamentals.
- **`currentPrice`** / **`previousClose`** / **`open`** / **`dayHigh`** / **`dayLow`** — intraday quote.
- **`fiftyTwoWeekHigh`** / **`fiftyTwoWeekLow`** — 52-week range.
- **`volume`** / **`averageVolume`** — share volume.
- **`beta`** / **`trailingPE`** / **`forwardPE`** / **`trailingEps`** — valuation ratios.
- **`dividendYield`** / **`dividendRate`** — current dividend stats.
- **`dayChange`** / **`dayChangePercent`** — derived from `currentPrice` − `previousClose`.
- **`history[]`** — OHLCV rows with `date`, `open`, `high`, `low`, `close`, `volume`, `dividends`, `stock_splits` (when `includeHistory: true`).
- **`historyCount`** — count of history rows emitted.
- **`dividends[]`** — `{date, value}` rows for each dividend payment in history (when `includeDividends: true`).
- **`splits[]`** — `{date, value}` rows for each stock split (when `includeSplits: true`).
- **`financials`** — nested `{income, balance, cashflow, quarterly?}` blocks, each keyed by period date with snake\_cased line-item keys and float values (when `includeFinancials: true`). `quarterly` sub-block only when `includeQuarterlyFinancials: true`.
- **`news[]`** — `{title, url, publisher, publishedAt}` rows, capped at 25 (when `includeNews: true`).
- **`recommendations`** — single-row summary `{strongBuy, buy, hold, sell, strongSell}` of analyst ratings (when `includeRecommendations: true`).
- **`earningsHistory[]`** — up to 4 quarters of EPS data per record: `{quarter, epsActual, epsEstimate, epsDifference, surprisePercent}` (when `includeEarningsHistory: true`).
- **`holders`** — `{institutional[], mutualFund[]}` arrays of holder records (when `includeHolders: true`).
- **`calendar`** — upcoming earnings/dividend dates + analyst earnings/revenue estimates as a flat snake\_cased dict (when `includeEarningsCalendar: true`).
- **`analystPriceTargets`** — `{current, high, low, mean, median}` floats (when `includeAnalystPriceTargets: true`).
- **`insiderTransactions[]`** — up to 25 recent insider transactions per record. Each row has the columns Yahoo publishes (insider name, shares, transaction date, etc.) (when `includeInsiderTransactions: true`).
- **`insiderTransactionCount`** — count of rows emitted.
- **`options`** — next-expiration option chain `{expiration, calls[], puts[]}` (when `includeOptions: true`). Each leg row has `{strike, lastPrice, bid, ask, volume, openInterest, impliedVolatility, inTheMoney}`. Capped at 50 strikes per side.
- **`optionExpirations[]`** — first 20 expiration dates (`YYYY-MM-DD`) when `includeOptions: true`.
- **`sustainability`** — ESG scores as a flat dict (when `includeSustainability: true` and Yahoo publishes data for the ticker).
- **`error`** — set when the ticker fetch failed (typo, delisted, regional restriction). When set, most other fields are absent.
- **`scrapedAt`** — ISO-8601 UTC timestamp.

### Use cases

- **Watchlist enrichment** — pull live quote + fundamentals for every ticker in a watchlist on schedule.
- **Backtesting / quant research** — bulk OHLCV history with adjustable date range and interval.
- **News monitoring** — daily run pulls the latest 25 articles per ticker; downstream alerts on title keywords.
- **Dividend / split tracking** — historical dividends + splits for income-portfolio modelling.
- **Analyst-rating aggregation** — track analyst sentiment changes over time by sampling recommendations.
- **Fundamental dumps** — full income statement / balance sheet / cash flow in a structured shape, ready for a spreadsheet.

### FAQ

**Does it need a proxy or API key?**
No. The `yfinance` library handles Yahoo's crumb-cookie authentication automatically (Yahoo started enforcing crumb cookies on their JSON API in 2023; yfinance bootstraps a crumb on first call). No API key, no signup.

**Why is the crumb cookie a thing?**
Yahoo Finance's REST endpoints (`query1.finance.yahoo.com/v10/finance/quoteSummary/...`) return 401 without a valid `Cookie` + `crumb` query param. yfinance acquires both by visiting `finance.yahoo.com` once per session, then attaches them to subsequent calls. This is invisible to you.

**Can I scrape pre-market or extended-hours data?**
The `currentPrice` / `volume` fields reflect Yahoo's regular session. For pre-/post-market quotes, supplement with the `info` keys `preMarketPrice` / `postMarketPrice` (which the actor doesn't currently surface — open an issue if you need them).

**What tickers are supported?**
Any symbol Yahoo Finance recognises:

- US equities: `AAPL`, `MSFT`, `BRK-B`
- ETFs: `SPY`, `VOO`, `QQQ`
- Foreign with suffix: `BP.L` (London), `0700.HK` (Hong Kong), `7203.T` (Tokyo)
- Indices: `^GSPC` (S\&P 500), `^DJI` (Dow), `^IXIC` (Nasdaq)
- Currencies: `EUR=X`, `JPY=X`
- Crypto: `BTC-USD`, `ETH-USD`

**How fresh is the data?**

- `currentPrice`, `volume`, intraday OHLC: ~15-minute delayed for most US equities (Yahoo's free terms).
- News: real-time.
- Financials: refreshed within ~24h of company filings.
- History: end-of-day, refreshed after market close.

**What if a ticker is delisted or invalid?**
The record is emitted with `error: "no_data"` and the rest of the fields absent. The run continues for the remaining tickers.

**Why is the financials block sometimes missing for a ticker?**

- ETFs and indices don't report financials.
- Some foreign tickers ship limited statements.
- Yahoo occasionally returns empty financials for newly-IPO'd companies.

The actor follows an omit-empty contract — the `financials` field simply isn't emitted when there's no data.

**How does pagination of history work?**
`yfinance.Ticker.history()` returns the full date range in one call (no pagination needed). For multi-decade history, set `startDate` to your earliest date and `interval` to `1d`. Yahoo serves up to ~25 years of daily candles per request.

# Actor input Schema

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

One or more stock ticker symbols (e.g. `AAPL`, `MSFT`, `BRK-B`). Supports US, ETFs, ADRs, foreign tickers with suffix (e.g. `BABA`, `TSM`, `BP.L`).

## `startDate` (type: `string`):

Earliest date for historical OHLCV data. Optional — default is 30 days before today.

## `endDate` (type: `string`):

Latest date for historical OHLCV data. Optional — default is today.

## `interval` (type: `string`):

Candle interval for historical data.

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

Include daily OHLCV history (open / high / low / close / volume) in each record.

## `includeFinancials` (type: `boolean`):

Include income statement, balance sheet, and cash flow statement (annual).

## `includeDividends` (type: `boolean`):

Include dividend history.

## `includeSplits` (type: `boolean`):

Include stock-split history.

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

Include latest news headlines linked to the ticker.

## `includeRecommendations` (type: `boolean`):

Include analyst recommendation breakdown (strongBuy / buy / hold / sell / strongSell).

## `includeHolders` (type: `boolean`):

Include major / institutional / mutual-fund holder summaries.

## `includeOptions` (type: `boolean`):

Include the next-expiration options chain (calls + puts) when listed. Capped at first 50 strikes per side to keep dataset compact.

## `includeEarningsCalendar` (type: `boolean`):

Include upcoming earnings/dividend dates + analyst earnings/revenue estimates.

## `includeAnalystPriceTargets` (type: `boolean`):

Include analyst price target summary (current / high / low / mean / median).

## `includeInsiderTransactions` (type: `boolean`):

Include the 25 most-recent insider transactions (officers / directors / 10%-owners).

## `includeSustainability` (type: `boolean`):

Include ESG / sustainability scores when Yahoo publishes them (sparse coverage; many tickers return empty).

## `includeQuarterlyFinancials` (type: `boolean`):

Include quarterly income statement, balance sheet, and cash flow (last ~5 quarters). Takes effect only when `includeFinancials` is also on.

## `includeEarningsHistory` (type: `boolean`):

Include the last 4 quarters of earnings: actual EPS, estimate, surprise amount, and surprise percent.

## `concurrency` (type: `integer`):

Number of tickers fetched in parallel. Each fetch is mostly idle waiting on Yahoo, so concurrency speeds up bulk runs significantly. Higher values may trigger Yahoo rate-limits.

## Actor input object example

```json
{
  "tickers": [
    "AAPL",
    "MSFT"
  ],
  "interval": "1d",
  "includeHistory": true,
  "includeFinancials": false,
  "includeDividends": true,
  "includeSplits": true,
  "includeNews": true,
  "includeRecommendations": true,
  "includeHolders": false,
  "includeOptions": false,
  "includeEarningsCalendar": true,
  "includeAnalystPriceTargets": true,
  "includeInsiderTransactions": false,
  "includeSustainability": false,
  "includeQuarterlyFinancials": false,
  "includeEarningsHistory": true,
  "concurrency": 4
}
```

# 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"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("crawlerbros/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",
    ] }

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

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).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"
  ]
}' |
apify call crawlerbros/yahoo-finance-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=crawlerbros/yahoo-finance-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Yahoo Finance Scraper",
        "description": "Pull live and historical stock data from Yahoo Finance with quote, OHLCV history, financials, dividends, splits, news, recommendations, institutional holders. Handles Yahoo's crumb-cookie auth automatically. HTTP-only, no proxy or API key required.",
        "version": "0.1",
        "x-build-id": "baOLbCv7XmkZpeVoE"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/crawlerbros~yahoo-finance-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-crawlerbros-yahoo-finance-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/crawlerbros~yahoo-finance-scraper/runs": {
            "post": {
                "operationId": "runs-sync-crawlerbros-yahoo-finance-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/crawlerbros~yahoo-finance-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-crawlerbros-yahoo-finance-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "required": [
                    "tickers"
                ],
                "properties": {
                    "tickers": {
                        "title": "Tickers",
                        "type": "array",
                        "description": "One or more stock ticker symbols (e.g. `AAPL`, `MSFT`, `BRK-B`). Supports US, ETFs, ADRs, foreign tickers with suffix (e.g. `BABA`, `TSM`, `BP.L`).",
                        "items": {
                            "type": "string"
                        }
                    },
                    "startDate": {
                        "title": "History start date (YYYY-MM-DD)",
                        "type": "string",
                        "description": "Earliest date for historical OHLCV data. Optional — default is 30 days before today."
                    },
                    "endDate": {
                        "title": "History end date (YYYY-MM-DD)",
                        "type": "string",
                        "description": "Latest date for historical OHLCV data. Optional — default is today."
                    },
                    "interval": {
                        "title": "History interval",
                        "enum": [
                            "1d",
                            "5d",
                            "1wk",
                            "1mo",
                            "3mo"
                        ],
                        "type": "string",
                        "description": "Candle interval for historical data.",
                        "default": "1d"
                    },
                    "includeHistory": {
                        "title": "Include OHLCV history",
                        "type": "boolean",
                        "description": "Include daily OHLCV history (open / high / low / close / volume) in each record.",
                        "default": true
                    },
                    "includeFinancials": {
                        "title": "Include financials",
                        "type": "boolean",
                        "description": "Include income statement, balance sheet, and cash flow statement (annual).",
                        "default": false
                    },
                    "includeDividends": {
                        "title": "Include dividends",
                        "type": "boolean",
                        "description": "Include dividend history.",
                        "default": true
                    },
                    "includeSplits": {
                        "title": "Include splits",
                        "type": "boolean",
                        "description": "Include stock-split history.",
                        "default": true
                    },
                    "includeNews": {
                        "title": "Include news",
                        "type": "boolean",
                        "description": "Include latest news headlines linked to the ticker.",
                        "default": true
                    },
                    "includeRecommendations": {
                        "title": "Include analyst recommendations",
                        "type": "boolean",
                        "description": "Include analyst recommendation breakdown (strongBuy / buy / hold / sell / strongSell).",
                        "default": true
                    },
                    "includeHolders": {
                        "title": "Include holders",
                        "type": "boolean",
                        "description": "Include major / institutional / mutual-fund holder summaries.",
                        "default": false
                    },
                    "includeOptions": {
                        "title": "Include options chain",
                        "type": "boolean",
                        "description": "Include the next-expiration options chain (calls + puts) when listed. Capped at first 50 strikes per side to keep dataset compact.",
                        "default": false
                    },
                    "includeEarningsCalendar": {
                        "title": "Include earnings calendar",
                        "type": "boolean",
                        "description": "Include upcoming earnings/dividend dates + analyst earnings/revenue estimates.",
                        "default": true
                    },
                    "includeAnalystPriceTargets": {
                        "title": "Include analyst price targets",
                        "type": "boolean",
                        "description": "Include analyst price target summary (current / high / low / mean / median).",
                        "default": true
                    },
                    "includeInsiderTransactions": {
                        "title": "Include insider transactions",
                        "type": "boolean",
                        "description": "Include the 25 most-recent insider transactions (officers / directors / 10%-owners).",
                        "default": false
                    },
                    "includeSustainability": {
                        "title": "Include ESG / sustainability scores",
                        "type": "boolean",
                        "description": "Include ESG / sustainability scores when Yahoo publishes them (sparse coverage; many tickers return empty).",
                        "default": false
                    },
                    "includeQuarterlyFinancials": {
                        "title": "Include quarterly financials",
                        "type": "boolean",
                        "description": "Include quarterly income statement, balance sheet, and cash flow (last ~5 quarters). Takes effect only when `includeFinancials` is also on.",
                        "default": false
                    },
                    "includeEarningsHistory": {
                        "title": "Include earnings history",
                        "type": "boolean",
                        "description": "Include the last 4 quarters of earnings: actual EPS, estimate, surprise amount, and surprise percent.",
                        "default": true
                    },
                    "concurrency": {
                        "title": "Concurrency",
                        "minimum": 1,
                        "maximum": 16,
                        "type": "integer",
                        "description": "Number of tickers fetched in parallel. Each fetch is mostly idle waiting on Yahoo, so concurrency speeds up bulk runs significantly. Higher values may trigger Yahoo rate-limits.",
                        "default": 4
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
