# Yahoo Finance Scraper — Stocks, ETFs, Crypto, Indices (`alwaysprimedev/yahoo-finance-scraper`) Actor

Pull real-time quotes, fundamentals, financials, analyst targets, dividends, company officers, and historical OHLCV for any Yahoo Finance ticker. Works for stocks, ETFs, mutual funds, crypto, FX, and indices. Output as JSON, CSV, or Excel.

- **URL**: https://apify.com/alwaysprimedev/yahoo-finance-scraper.md
- **Developed by:** [Always Prime](https://apify.com/alwaysprimedev) (community)
- **Categories:** Automation, News, Social media
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.00 / 1,000 results

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/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 — Stocks, ETFs, Crypto & More

> One actor. Every ticker. Real-time quotes, deep fundamentals, analyst targets, and historical OHLCV — delivered as JSON, CSV, or Excel.

![Apify](https://img.shields.io/badge/Apify-Actor-blue)
![Python](https://img.shields.io/badge/Python-3.11-yellow)
![Output](https://img.shields.io/badge/Output-JSON%20%7C%20CSV%20%7C%20Excel-green)
![Pricing](https://img.shields.io/badge/Pricing-Pay--per--result-orange)

---

### ⚡ Why this scraper

- 🏦 **120+ data points per ticker** — price, market cap, P/E, dividend yield, EPS, analyst targets, full company profile, officers, risk scores, financials, and more
- 🚀 **Multi-asset** — works for stocks, ETFs, mutual funds, crypto (`BTC-USD`), FX (`EURUSD=X`), and indices (`^GSPC`)
- 🔎 **Three ways to pick tickers** — explicit list, free-text search, or Yahoo's built-in screeners (most actives, gainers, losers, trending, …)
- 📊 **Optional historical OHLCV** — daily, weekly, monthly bars going back as far as Yahoo has them
- 💾 **Open in Excel, Google Sheets, or your DB in one click** — Apify gives you JSON, CSV, and XLSX exports automatically
- 🤖 **Reliable** — gracefully handles Yahoo's consent walls, rate limits, and rotating session tokens. No setup, no captchas, no headaches

---

### 🚀 Quick start

1. Click **Try for free** above
2. Paste your ticker symbols (or pick a screener like `day_gainers`)
3. Hit **Start**
4. Download the results as JSON, CSV, or Excel

That's it. No coding, no proxies, no Yahoo account.

---

### 🛠️ Inputs

| Field | Type | What it does |
|---|---|---|
| `tickers` | array | Ticker symbols to scrape. Examples: `AAPL`, `MSFT`, `BRK-B`, `BTC-USD`, `EURUSD=X`, `^GSPC`, `SPY`. |
| `searchQueries` | array | Free-text queries (company names, partial symbols). Each resolves to up to 10 matching tickers. |
| `screeners` | array | Yahoo's built-in lists: `most_actives`, `day_gainers`, `day_losers`, `trending_tickers`, `undervalued_growth_stocks`, `growth_technology_stocks`, `aggressive_small_caps`, `small_cap_gainers`, `top_mutual_funds`, `portfolio_anchors`, `solid_large_growth_funds`, `solid_midcap_growth_funds`, `conservative_foreign_funds`, `high_yield_bond`. |
| `modules` | string | Which Yahoo data modules to fetch (default: price + summaryDetail + assetProfile + financialData + defaultKeyStatistics + calendarEvents + earnings + recommendationTrend + upgradeDowngradeHistory). |
| `includeHistory` | bool | Attach a `history` array of OHLCV bars to each record. |
| `historyInterval` | enum | Bar granularity: `1d`, `1wk`, `1mo`, `1h`, etc. |
| `historyRange` | enum | Range back from today: `5d`, `1mo`, `6mo`, `1y`, `5y`, `max`, `ytd`, … |
| `maxHistoryBars` | int | Cap on bars per ticker (0 = unlimited). |
| `maxItems` | int | Cap on tickers per run (0 = unlimited). |
| `concurrency` | int | Parallel requests (1-25, default 5). |

---

### 📦 Sample output (one record)

```json
{
  "symbol": "AAPL",
  "url": "https://finance.yahoo.com/quote/AAPL",
  "scraped_at": "2026-05-21T18:23:10.896971+00:00",
  "longName": "Apple Inc.",
  "shortName": "Apple Inc.",
  "quoteType": "EQUITY",
  "exchange": "NMS",
  "exchangeName": "NasdaqGS",
  "currency": "USD",
  "marketState": "REGULAR",
  "regularMarketPrice": 304.57,
  "regularMarketChange": 2.32,
  "regularMarketChangePercent": 0.0077,
  "regularMarketDayHigh": 305.10,
  "regularMarketDayLow": 300.40,
  "regularMarketOpen": 301.05,
  "regularMarketPreviousClose": 302.25,
  "regularMarketVolume": 18698734,
  "marketCap": 4473327976448,
  "fiftyTwoWeekHigh": 305.10,
  "fiftyTwoWeekLow": 193.46,
  "fiftyDayAverage": 268.61,
  "twoHundredDayAverage": 260.56,
  "sector": "Technology",
  "industry": "Consumer Electronics",
  "website": "https://www.apple.com",
  "phone": "(408) 996-1010",
  "fullTimeEmployees": 166000,
  "longBusinessSummary": "Apple Inc. designs, manufactures, and markets smartphones, personal computers, tablets, wearables, and accessories worldwide...",
  "address": {
    "address1": "One Apple Park Way",
    "city": "Cupertino",
    "state": "CA",
    "zip": "95014",
    "country": "United States"
  },
  "auditRisk": 2,
  "boardRisk": 1,
  "overallRisk": 1,
  "companyOfficers": [
    { "name": "Mr. Timothy D. Cook", "title": "CEO & Director", "age": 64, "totalPay": 16759518 }
  ],
  "dividendRate": 1.08,
  "dividendYield": 0.0036,
  "exDividendDate": "2026-05-11T00:00:00+00:00",
  "trailingPE": 36.92,
  "forwardPE": 31.71,
  "beta": 1.07,
  "currentPrice": 304.57,
  "targetMeanPrice": 308.65,
  "targetMedianPrice": 310.00,
  "recommendationMean": 1.96,
  "recommendationKey": "buy",
  "numberOfAnalystOpinions": 43,
  "totalRevenue": 451442016256,
  "ebitda": 159975997440,
  "freeCashflow": 101090746368,
  "operatingCashflow": 140222005248,
  "grossMargins": 0.4786,
  "operatingMargins": 0.3228,
  "profitMargins": 0.2715,
  "returnOnEquity": 1.4147,
  "totalCash": 68507000832,
  "totalDebt": 84710998016,
  "debtToEquity": 79.55,
  "trailingEps": 8.25,
  "forwardEps": 9.60,
  "pegRatio": 2.63,
  "enterpriseValue": 4455457095680,
  "enterpriseToRevenue": 9.87,
  "enterpriseToEbitda": 27.85,
  "sharesOutstanding": 14687356000,
  "floatShares": 14662387495,
  "heldPercentInsiders": 0.0163,
  "heldPercentInstitutions": 0.658,
  "shortRatio": 3.11,
  "earningsDate": "2026-08-01T20:00:00+00:00"
}
````

When `includeHistory` is on, each record gains a `history` array of OHLCV bars:

```json
"history": [
  { "date": "2026-04-21T13:30:00+00:00", "open": 209.4, "high": 213.2, "low": 208.1, "close": 212.6, "adjClose": 212.6, "volume": 41203400 }
]
```

***

### 💡 Use cases

| Who | What they do with it |
|---|---|
| **Quant / algo traders** | Daily snapshot for backtests, signal generation, factor research |
| **Portfolio analytics tools** | Build a "my watchlist" feature without paying Bloomberg |
| **Financial bloggers & newsletters** | Pull a fresh top-10-gainers table for every issue |
| **Equity researchers** | Bulk-pull fundamentals for screening 500-5000 tickers |
| **Crypto traders** | Real-time prices for `BTC-USD`, `ETH-USD`, `SOL-USD`, alongside macro indicators |
| **ML / AI teams** | Training data for price-prediction models, sentiment vs price correlation |
| **PortfolioOps / fintech apps** | Per-ticker enrichment behind a customer-facing dashboard |

***

### 🎯 Tips & tricks

- **Use search queries for "I don't know the ticker"**: passing `"Tesla"` will resolve to `TSLA` for you.
- **Combine screeners with tickers**: `screeners: ["day_gainers"]` + `tickers: ["BTC-USD"]` gives you the day's biggest movers PLUS your own anchors.
- **Crypto and FX work**: `BTC-USD`, `ETH-USD`, `DOGE-USD`, `EURUSD=X`, `GBPUSD=X`.
- **Indices**: prefix with `^` — `^GSPC` (S\&P 500), `^DJI` (Dow), `^IXIC` (Nasdaq), `^VIX` (VIX), `^FTSE` (FTSE 100).
- **Berkshire-style class shares**: use the dash form Yahoo uses — `BRK-B`, `BRK-A`.
- **Want a daily refresher?** Use Apify Schedules to run this every market day at 16:30 ET.

***

### ❓ FAQ

**Q: How fresh is the data?**
Live during market hours (some delayed quotes per exchange — Yahoo's standard delay applies). After-hours/pre-market prices included.

**Q: What about historical splits and dividends?**
`history` returns adjusted-close already. Split factor and last split date are included in the main record.

**Q: Can I get options chains?**
Not in this version. Open an issue if you need it.

**Q: Is this allowed?**
Yahoo Finance data is publicly accessible. This actor reads only what any visitor's browser already loads. You're responsible for complying with Yahoo's ToS in your jurisdiction.

**Q: What if a ticker doesn't exist?**
You get a warning in the log; the run continues with the rest.

**Q: Will I get rate-limited?**
The actor handles Yahoo's session/consent flow automatically. For very large runs (>5000 tickers), keep concurrency at 5-10 and you'll be fine.

***

### 💰 Pricing

**$5 per 1,000 results** — pay only for tickers you actually get back.

That's roughly **0.5¢ per ticker**, all-inclusive: real-time price + fundamentals + analyst targets + officers + financials + risk scores + every other field listed above.

Cheaper than calling the Polygon/IEX/Tradier APIs at scale, with no API key, no monthly minimum, and no infrastructure.

# Actor input Schema

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

List of Yahoo Finance ticker symbols to scrape. Examples: AAPL, MSFT, GOOGL, TSLA, BTC-USD, EURUSD=X, ^GSPC, SPY. Supports stocks, ETFs, mutual funds, crypto, FX, and indices.

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

Free-text queries (company names, ISIN, partial symbols). Each query returns up to 10 matching tickers, which are then merged with the explicit `tickers` list and deduplicated.

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

Use Yahoo's built-in lists. Each screener resolves to up to 100 tickers. Available: most\_actives, day\_gainers, day\_losers, trending\_tickers, undervalued\_growth\_stocks, growth\_technology\_stocks, aggressive\_small\_caps, small\_cap\_gainers, top\_mutual\_funds, portfolio\_anchors, solid\_large\_growth\_funds, solid\_midcap\_growth\_funds, conservative\_foreign\_funds, high\_yield\_bond.

## `modules` (type: `string`):

Comma-separated Yahoo quoteSummary modules to fetch per ticker. The default set covers price, fundamentals, profile, analyst targets, key statistics, calendar, earnings, and analyst trends. Extra modules (e.g. insiderHolders, fundOwnership, secFilings) can be added but increase per-ticker bandwidth.

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

When enabled, attaches a `history` array of daily/weekly/monthly OHLCV bars to each record. Adds one extra request per ticker and roughly 5-15 KB per ticker.

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

Bar granularity when `includeHistory` is on.

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

How far back to fetch bars when `includeHistory` is on.

## `maxHistoryBars` (type: `integer`):

Cap on the number of historical bars returned per ticker. 0 = unlimited (within `historyRange`). Useful for keeping output size predictable.

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

Hard cap on the number of tickers scraped (0 = unlimited). Applied after deduplication across `tickers`, `searchQueries`, and `screeners`.

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

Number of parallel ticker requests. 5 is safe for any run size. Raise to 10-15 only for very large runs against a clean IP.

## Actor input object example

```json
{
  "tickers": [
    "AAPL",
    "MSFT",
    "GOOGL",
    "TSLA",
    "NVDA"
  ],
  "searchQueries": [],
  "screeners": [],
  "modules": "price,summaryDetail,assetProfile,financialData,defaultKeyStatistics,calendarEvents,earnings,recommendationTrend,upgradeDowngradeHistory",
  "includeHistory": false,
  "historyInterval": "1d",
  "historyRange": "1mo",
  "concurrency": 5
}
```

# Actor output Schema

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

All scraped ticker records as a JSON array.

## `tickersCsv` (type: `string`):

Spreadsheet-friendly CSV export.

## `tickersXlsx` (type: `string`):

Excel workbook export.

## `consoleView` (type: `string`):

Interactive table viewer with filters and column visibility controls.

# 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",
        "GOOGL",
        "TSLA",
        "NVDA"
    ],
    "searchQueries": [],
    "screeners": [],
    "modules": "price,summaryDetail,assetProfile,financialData,defaultKeyStatistics,calendarEvents,earnings,recommendationTrend,upgradeDowngradeHistory",
    "maxHistoryBars": 0,
    "maxItems": 0,
    "concurrency": 5
};

// Run the Actor and wait for it to finish
const run = await client.actor("alwaysprimedev/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",
        "GOOGL",
        "TSLA",
        "NVDA",
    ],
    "searchQueries": [],
    "screeners": [],
    "modules": "price,summaryDetail,assetProfile,financialData,defaultKeyStatistics,calendarEvents,earnings,recommendationTrend,upgradeDowngradeHistory",
    "maxHistoryBars": 0,
    "maxItems": 0,
    "concurrency": 5,
}

# Run the Actor and wait for it to finish
run = client.actor("alwaysprimedev/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",
    "GOOGL",
    "TSLA",
    "NVDA"
  ],
  "searchQueries": [],
  "screeners": [],
  "modules": "price,summaryDetail,assetProfile,financialData,defaultKeyStatistics,calendarEvents,earnings,recommendationTrend,upgradeDowngradeHistory",
  "maxHistoryBars": 0,
  "maxItems": 0,
  "concurrency": 5
}' |
apify call alwaysprimedev/yahoo-finance-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Yahoo Finance Scraper — Stocks, ETFs, Crypto, Indices",
        "description": "Pull real-time quotes, fundamentals, financials, analyst targets, dividends, company officers, and historical OHLCV for any Yahoo Finance ticker. Works for stocks, ETFs, mutual funds, crypto, FX, and indices. Output as JSON, CSV, or Excel.",
        "version": "0.1",
        "x-build-id": "ggggB55fy6RH6YZYc"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/alwaysprimedev~yahoo-finance-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-alwaysprimedev-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/alwaysprimedev~yahoo-finance-scraper/runs": {
            "post": {
                "operationId": "runs-sync-alwaysprimedev-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/alwaysprimedev~yahoo-finance-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-alwaysprimedev-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",
                "properties": {
                    "tickers": {
                        "title": "Tickers",
                        "type": "array",
                        "description": "List of Yahoo Finance ticker symbols to scrape. Examples: AAPL, MSFT, GOOGL, TSLA, BTC-USD, EURUSD=X, ^GSPC, SPY. Supports stocks, ETFs, mutual funds, crypto, FX, and indices.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "searchQueries": {
                        "title": "Search queries",
                        "type": "array",
                        "description": "Free-text queries (company names, ISIN, partial symbols). Each query returns up to 10 matching tickers, which are then merged with the explicit `tickers` list and deduplicated.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "screeners": {
                        "title": "Predefined screeners",
                        "type": "array",
                        "description": "Use Yahoo's built-in lists. Each screener resolves to up to 100 tickers. Available: most_actives, day_gainers, day_losers, trending_tickers, undervalued_growth_stocks, growth_technology_stocks, aggressive_small_caps, small_cap_gainers, top_mutual_funds, portfolio_anchors, solid_large_growth_funds, solid_midcap_growth_funds, conservative_foreign_funds, high_yield_bond.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "modules": {
                        "title": "Data modules",
                        "type": "string",
                        "description": "Comma-separated Yahoo quoteSummary modules to fetch per ticker. The default set covers price, fundamentals, profile, analyst targets, key statistics, calendar, earnings, and analyst trends. Extra modules (e.g. insiderHolders, fundOwnership, secFilings) can be added but increase per-ticker bandwidth."
                    },
                    "includeHistory": {
                        "title": "Include historical OHLCV",
                        "type": "boolean",
                        "description": "When enabled, attaches a `history` array of daily/weekly/monthly OHLCV bars to each record. Adds one extra request per ticker and roughly 5-15 KB per ticker.",
                        "default": false
                    },
                    "historyInterval": {
                        "title": "History interval",
                        "enum": [
                            "1m",
                            "2m",
                            "5m",
                            "15m",
                            "30m",
                            "60m",
                            "90m",
                            "1h",
                            "1d",
                            "5d",
                            "1wk",
                            "1mo",
                            "3mo"
                        ],
                        "type": "string",
                        "description": "Bar granularity when `includeHistory` is on.",
                        "default": "1d"
                    },
                    "historyRange": {
                        "title": "History range",
                        "enum": [
                            "1d",
                            "5d",
                            "1mo",
                            "3mo",
                            "6mo",
                            "1y",
                            "2y",
                            "5y",
                            "10y",
                            "ytd",
                            "max"
                        ],
                        "type": "string",
                        "description": "How far back to fetch bars when `includeHistory` is on.",
                        "default": "1mo"
                    },
                    "maxHistoryBars": {
                        "title": "Max bars per ticker",
                        "minimum": 0,
                        "maximum": 10000,
                        "type": "integer",
                        "description": "Cap on the number of historical bars returned per ticker. 0 = unlimited (within `historyRange`). Useful for keeping output size predictable."
                    },
                    "maxItems": {
                        "title": "Max items",
                        "minimum": 0,
                        "maximum": 10000,
                        "type": "integer",
                        "description": "Hard cap on the number of tickers scraped (0 = unlimited). Applied after deduplication across `tickers`, `searchQueries`, and `screeners`."
                    },
                    "concurrency": {
                        "title": "Concurrency",
                        "minimum": 1,
                        "maximum": 25,
                        "type": "integer",
                        "description": "Number of parallel ticker requests. 5 is safe for any run size. Raise to 10-15 only for very large runs against a clean IP."
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
