# Yahoo Finance Market Data & Fundamentals Scraper (`nimbryxo-studio/yahoo-finance-market-data-and-fundamentals-scraper`) Actor

Pull live quotes, historical OHLCV candles, financial statements, dividends, splits, news, analyst ratings and holder data from Yahoo Finance for any ticker, ETF, index, currency pair or crypto symbol.

- **URL**: https://apify.com/nimbryxo-studio/yahoo-finance-market-data-and-fundamentals-scraper.md
- **Developed by:** [Nimbryxo-studio](https://apify.com/nimbryxo-studio) (community)
- **Categories:** Automation, Developer tools, News
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.49 / 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/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

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

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

## How to integrate an Actor?

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

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

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

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

# README

## Yahoo Finance Market Data & Fundamentals Scraper

Yahoo Finance is the default reference point for public market data, but its quote pages mix delayed prices, statements, analyst views, holder tables and option chains across dozens of separate views. This actor turns those views into one clean dataset: give it a watchlist, a search phrase, a screener, a region or nothing at all for a market overview, and receive structured records with source URLs and timestamps. It works for stocks, ETFs, mutual funds, indices, currency pairs, futures and crypto, and needs no account, API key or proxy setup.

### What this actor does

- **Six modes:** `tickers` (default), `search`, `screener`, `customScreener`, `trending`, `marketSummary`
- **Deep quote data:** regular, pre-market and US post-market prices, bid/ask, day and 52-week ranges, valuation ratios, margins, growth, short interest, analyst targets and company risk scores
- **History and events:** 13 chart intervals, 11 ranges, optional pre/post-market bars, adjusted close, full dividend history and split history
- **Statements and ownership:** annual and quarterly income, balance-sheet and cash-flow statements with expanded high-fill fields; institutional, fund, major-holder and insider data
- **Options and funds:** multiple current expirations with contract-level filters; ETF/mutual-fund profile, top holdings, bond ratings, sector weights, Morningstar ratings and performance
- **Research extras:** search results with a localized lookup fallback, 22 predefined screeners, a region-aware custom screener, region-based trending symbols, market summary, up to 200 news items, analyst ratings, SEC filings and related symbols
- **Empty fields are omitted** — optional data that Yahoo does not publish for a symbol is left out rather than emitted as `null`, `""` or `[]`

### Output per ticker (mode = `tickers`)

Every ticker record includes `recordType: "ticker"`, `ticker`, `summaryUrl`, `sourceUrl`, `scrapedAt`, and the fields below when Yahoo publishes them. Empty values are omitted.

#### Identity and quote

- `companyName`, `shortName`, `sector`, `industry`, `country`, `website`, `businessSummary`, `fullTimeEmployees`
- `currency`, `financialCurrency`, `exchange`, `exchangeFullName`, `market`, `marketState`, `quoteType`, `timezone`
- `currentPrice`, `previousClose`, `open`, `dayHigh`, `dayLow`, `fiftyTwoWeekHigh`, `fiftyTwoWeekLow`
- `dayChange`, `dayChangePercent`, `volume`, `averageVolume`, `averageDailyVolume10Day`, `averageDailyVolume3Month`
- `bid`, `ask`, `bidSize`, `askSize`, `fiftyDayAverage`, `twoHundredDayAverage`
- `preMarketPrice`, `preMarketChange`, `preMarketChangePercent`, `preMarketTime`, `hasPrePostMarketData`
- `postMarketPrice`, `postMarketChange`, `postMarketChangePercent`, `postMarketTime` — US-listed equities and ETFs when Yahoo publishes an extended-hours quote
- `fulldayPrice`, `fulldayChange`, `fulldayChangePercent`, `quoteSource`, `exchangeDataDelayedBy`, `firstTradeDate`
- `marketCap`, `sharesOutstanding`, `floatShares`, `impliedSharesOutstanding`

#### Valuation, profitability and dividends

- `beta`, `trailingPE`, `forwardPE`, `trailingEps`, `epsForward`, `epsCurrentYear`, `priceEpsCurrentYear`, `priceToBook`, `bookValue`
- `enterpriseValue`, `enterpriseToRevenue`, `enterpriseToEbitda`, `profitMargins`, `operatingMargins`, `grossMargins`, `ebitdaMargins`
- `returnOnAssets`, `returnOnEquity`, `revenueGrowth`, `earningsGrowth`, `revenuePerShare`
- `totalCash`, `totalDebt`, `totalCashPerShare`, `freeCashflow`, `operatingCashflow`, `currentRatio`, `quickRatio`, `debtToEquity`, `payoutRatio`
- `dividendRate`, `dividendYield`, `trailingAnnualDividendRate`, `trailingAnnualDividendYield`, `exDividendDate`, `dividendDate`
- `fiveYearAvgDividendYield`, `lastDividendValue`, `lastDividendDate`, `lastSplitFactor`, `lastSplitDate`
- `sharesShort`, `sharesShortPriorMonth`, `shortRatio`, `shortPercentOfFloat`, `sharesPercentSharesOut`, `heldPercentInsiders`, `heldPercentInstitutions`
- `52WeekChange`, `SandP52WeekChange`, `mostRecentQuarter`, `lastFiscalYearEnd`, `nextFiscalYearEnd`
- `recommendationKey`, `recommendationMean`, `numberOfAnalystOpinions`, `targetHighPrice`, `targetLowPrice`, `targetMeanPrice`, `targetMedianPrice`
- `earningsTimestamp`, `earningsTimestampStart`, `earningsTimestampEnd`, `isEarningsDateEstimate`, `earningsCallTimestampStart`, `earningsCallTimestampEnd`, `averageAnalystRating`

#### Company profile and risk

- `address1`, `city`, `state`, `zip`, `phone`, `irWebsite`
- `auditRisk`, `boardRisk`, `compensationRisk`, `shareHolderRightsRisk`, `overallRisk`, `governanceEpochDate`, `compensationAsOfEpochDate`
- `companyOfficers[]` — `name`, `title`, `age`, `totalPay`, `exercisedValue`, `unexercisedValue`
- `statistics` — curated key statistics and financial-data ratios

#### History and corporate actions (when enabled)

- `history[]` — `date`, `datetime`, `open`, `high`, `low`, `close`, `adjclose`, `volume`, `dividends`, `stock_splits`
- `historyCount`
- `dividends[]` — `date`, `value`; `dividendCount`. Dates are actual event dates when Yahoo exposes them, not month-start chart keys
- `splits[]` — `date`, `value`, `numerator`, `denominator`, `splitRatio`; `splitCount`
- `capitalGains[]` — when Yahoo publishes a capital-gain event

#### Financial statements (when `includeFinancials` is on)

- `financials.income`, `financials.balance`, `financials.cashflow` — each keyed by fiscal period, with statement values in the reporting currency. The curated set covers 122 high-fill Yahoo types, including `EBIT`, `EBITDA`, `Net_Tangible_Assets`, `Beginning_Cash_Position`, `Invested_Capital` and `Tax_Rate_For_Calcs`; the legacy nested shape and underscore labels are unchanged
- `financials.quarterly.income`, `financials.quarterly.balance`, `financials.quarterly.cashflow` — when `includeQuarterlyFinancials` is on
- `financials.currency` — reporting currency
- `financials.periods` — available annual and quarterly period dates

#### News, analyst and earnings

- `news[]` — `title`, `url`, `publisher`, `publishedAt`, `type`, `relatedTickers`, `thumbnailUrl`, `summary`, `description` when Yahoo provides them; `newsCount`. The primary feed is Yahoo's Finance Nexus graph with cursor pagination, so `maxNews` can go up to 200; search news and the HTML page remain fallbacks
- `recommendations` — `strongBuy`, `buy`, `hold`, `sell`, `strongSell`
- `recommendationTrend[]` — `period`, `strongBuy`, `buy`, `hold`, `sell`, `strongSell`
- `upgradeDowngradeHistory[]` — `firm`, `fromGrade`, `toGrade`, `action`, `priceTargetAction`, `currentPriceTarget`, `priorPriceTarget`, `gradeDate`
- `analystPriceTargets` — `current`, `high`, `low`, `mean`, `median`
- `earningsHistory[]` — `quarter`, `epsActual`, `epsEstimate`, `epsDifference`, `surprisePercent`
- `earningsDates[]` — `date`, `reportedDate`, `epsEstimate`, `reportedEps`, `surprisePercent`
- `earningsEstimates` — `earnings[]`, `revenue[]`, `growthEstimates[]`
- `calendarEvents` — `earningsDate`, `earningsCallDate`, `isEarningsDateEstimate`, `earningsAverage`, `earningsLow`, `earningsHigh`, `revenueAverage`, `revenueLow`, `revenueHigh`, `exDividendDate`, `dividendDate`
- `calendar` — the same dates and estimates with legacy snake-case keys

#### Holders and insiders (when enabled)

- `holders.institutional[]`, `holders.mutualFund[]` — `Date_Reported`, `Holder`, `pctHeld`, `Shares`, `Value`, `pctChange`
- `holders.major` — `insidersPercentHeld`, `institutionsPercentHeld`, `institutionsFloatPercentHeld`, `institutionsCount`
- `holders.insiderHolders[]` — `name`, `relation`, `transactionDescription`, `latestTransDate`, `positionDirect`, `positionIndirect`, `valueDirect`
- `holders.netSharePurchaseActivity` — buy/sell/net counts and shares, insider percentages and institutional net buying
- `insiderTransactions[]` — `Shares`, `Value`, `URL`, `Text`, `Insider`, `Position`, `Transaction`, `Start_Date`, `Ownership`; `insiderTransactionCount`

#### Options (when `includeOptions` is on)

- `optionExpirations[]` — upcoming expiration dates
- `options` — `expiration`, `calls[]`, `puts[]`, and an underlying `quote`
- `optionChains[]` — present when more than one expiration is requested
- Contract fields: `contractSymbol`, `strike`, `currency`, `lastPrice`, `change`, `percentChange`, `volume`, `openInterest`, `bid`, `ask`, `contractSize`, `expiration`, `lastTradeDate`, `impliedVolatility`, `inTheMoney`

#### Funds, filings and research extras

- `fundProfile` — `family`, `categoryName`, `legalType`, `annualReportExpenseRatio`, `annualHoldingsTurnover`, `totalNetAssets` (absolute value, not millions), `managerName`, `managerBio`, `inceptionDate` (fund inception when Yahoo publishes it; omitted otherwise)
- `topHoldings` — `cashPosition`, `stockPosition`, `bondPosition`, `otherPosition`, `preferredPosition`, `convertiblePosition`, `holdings[]`, `equityHoldings`, `bondHoldings`, `otherHoldings`, `bondRatings[]`, `sectorWeightings[]` (rating and sector rows are `{key, value}`; equity sector weights are empty for non-equity funds such as GLD and TLT)
- `fundPerformance` — `asOfDate`, benchmark fields, period returns, fund averages and `morningStarOverallRating` / `morningStarRiskRating` for mutual funds
- `secFilings[]` — `date`, `type`, `title`, `edgarUrl`, `exhibits[]`
- `insights` — technical outlook, key technicals, valuation, research reports and significant developments
- `relatedSymbols[]` — `symbol`, `score`
- `requestedTicker` — present when an input alias resolved to a different Yahoo symbol (for example `BRK.B` → `BRK-B`)

### Output: discovery modes

#### `searchResult` (mode = `search`)

`recordType`, `ticker`, `sourceUrl`, `scrapedAt`, `name`, `longName`, `exchange`, `exchangeDisplay`, `quoteType`, `typeDisplay`, `sector`, `industry`, `score`, `isYahooFinance`, optional `quote` snapshot.

#### `screenerResult` (mode = `screener` or `customScreener`)

`recordType`, `ticker`, `sourceUrl`, `scrapedAt`, `screenerId`, `screenerName`, `rank`, plus quote fields such as `currentPrice`, `previousClose`, `marketCap`, `trailingPE`, `forwardPE`, `dividendYield`, `fiftyTwoWeekHigh`, `fiftyTwoWeekLow`, `volume`, `averageVolume`, `dayChange`, `dayChangePercent`, `quoteType`, `exchange`, `currency`, `marketState`, pre-market/post-market fields and `fullday*` fields. Custom rows also include `region` and `screenerSort`.

#### `trendingSymbol` (mode = `trending`)

`recordType`, `ticker`, `sourceUrl`, `scrapedAt`, `region`, `rank`, plus the same quote fields when Yahoo returns them.

#### `marketSummary` (mode = `marketSummary`)

`recordType`, `ticker`, `sourceUrl`, `scrapedAt`, `shortName`, `fullExchangeName`, `quoteType`, `marketState`, `currentPrice`, `dayChange`, `dayChangePercent`, `previousClose`, `regularMarketTime`, `typeDisplay`.

#### `error`

`recordType: "error"`, `type: "yahoo_finance_error"`, `error`, `ticker`, `reason`, `message`, `sourceUrl`, `scrapedAt`. `error` mirrors the legacy short reason (`no_data`). Invalid or delisted symbols produce this record instead of a partial ticker record.

### Input

| Field | Type | Default | Description |
|---|---|---|---|
| `mode` | string | `tickers` | `tickers` / `search` / `screener` / `customScreener` / `trending` / `marketSummary` |
| `tickers` | array | – | Symbols or Yahoo quote URLs (mode=tickers). |
| `searchQuery` | string | – | Company or symbol name (mode=search). |
| `maxSearchResults` | integer | `10` | Search results to return (1–50). |
| `screenerId` | string | `day_gainers` | One of 22 Yahoo predefined screeners (mode=screener). |
| `screenerSort` | string | `intradaymarketcap` | `intradaymarketcap` / `percentchange` / `dayvolume` (mode=customScreener). |
| `region` | string | `US` | Market region for quotes, search, trending and the custom screener. |
| `language` | string | `en-US` | Language for names, news and labels. |
| `range` | string | `1mo` | Chart range when no dates are supplied. |
| `startDate` | string | – | History start (`YYYY-MM-DD`); overrides `range`. |
| `endDate` | string | – | History end (`YYYY-MM-DD`); overrides `range`. |
| `interval` | string | `1d` | `1m` … `3mo`; intraday combinations are range-limited. |
| `includePrePost` | boolean | `false` | Include extended-hours intraday bars. |
| `includeHistory` | boolean | `true` | Include OHLCV history. |
| `includeDividends` | boolean | `true` | Include full dividend history. |
| `includeSplits` | boolean | `true` | Include split history. |
| `includeNews` | boolean | `true` | Include ticker news. |
| `maxNews` | integer | `25` | News items per ticker (1–200). |
| `includeFinancials` | boolean | `false` | Include annual statements. |
| `includeQuarterlyFinancials` | boolean | `false` | Add quarterly statements; requires `includeFinancials`. |
| `includeHolders` | boolean | `false` | Include holder summaries. |
| `includeInsiders` | boolean | `false` | Include insider transactions and net purchase activity. |
| `includeOptions` | boolean | `false` | Include option chains. |
| `optionExpirations` | integer | `1` | Upcoming expirations to fetch (1–25). |
| `maxOptionContracts` | integer | `50` | Calls and puts per expiration (1–500 each). |
| `optionContractType` | string | `both` | `both` / `calls` / `puts`. |
| `minStrike` | number | – | Minimum option strike. |
| `maxStrike` | number | – | Maximum option strike. |
| `minVolume` | integer | – | Minimum option volume. |
| `minOpenInterest` | integer | – | Minimum option open interest. |
| `minImpliedVolatilityPercent` | number | – | Minimum IV, e.g. `25` = 25%. |
| `includeRecommendations` | boolean | `true` | Recommendation summary and trend. |
| `includeUpgradesDowngrades` | boolean | `false` | Analyst rating changes. |
| `includeAnalystPriceTargets` | boolean | `true` | Price-target summary. |
| `includeEarningsHistory` | boolean | `true` | Recent EPS actuals vs estimates. |
| `includeEarningsEstimates` | boolean | `false` | Forward EPS/revenue estimates. |
| `includeEarningsCalendar` | boolean | `true` | Upcoming earnings and dividend dates. |
| `includeFundData` | boolean | `false` | ETF/mutual-fund profile, holdings and performance. |
| `includeSecFilings` | boolean | `false` | Recent SEC filings. |
| `includeInsights` | boolean | `false` | Technical outlook, reports and developments. |
| `includeRelatedSymbols` | boolean | `false` | Yahoo related-symbol recommendations. |
| `maxResults` | integer | `50` | Record cap for discovery modes (1–5000). |
| `concurrency` | integer | `4` | Tickers processed in parallel (1–16). |

#### Example: daily watchlist

```json
{
  "mode": "tickers",
  "tickers": ["AAPL", "MSFT", "NVDA"],
  "range": "5d",
  "interval": "1d",
  "includeHistory": true,
  "includeNews": false
}
```

#### Example: full fundamentals and ownership

```json
{
  "mode": "tickers",
  "tickers": ["AAPL"],
  "includeFinancials": true,
  "includeQuarterlyFinancials": true,
  "includeHolders": true,
  "includeInsiders": true,
  "includeEarningsEstimates": true,
  "includeSecFilings": true
}
```

#### Example: option chain with filters

```json
{
  "mode": "tickers",
  "tickers": ["TSLA"],
  "includeOptions": true,
  "optionExpirations": 3,
  "maxOptionContracts": 25,
  "optionContractType": "both",
  "minStrike": 200,
  "maxStrike": 500,
  "minOpenInterest": 100,
  "minImpliedVolatilityPercent": 20
}
```

#### Example: ETF research

```json
{
  "mode": "tickers",
  "tickers": ["SPY", "QQQ"],
  "includeFundData": true,
  "includeDividends": true,
  "includeHistory": false
}
```

#### Example: discover symbols and market movers

```json
{
  "mode": "screener",
  "screenerId": "day_gainers",
  "maxResults": 25
}
```

```json
{
  "mode": "customScreener",
  "region": "JP",
  "screenerSort": "percentchange",
  "maxResults": 100
}
```

```json
{
  "mode": "search",
  "searchQuery": "electric vehicles",
  "maxSearchResults": 10
}
```

```json
{
  "mode": "trending",
  "region": "GB",
  "maxResults": 10
}
```

### Use cases

- **Watchlist monitoring** — schedule a small ticker list for daily quote, pre-market and news snapshots
- **Backtesting and charting** — export OHLCV bars with adjusted close across 13 intervals and 11 ranges
- **Fundamental screening** — pull annual and quarterly statements, margins, growth and analyst targets into a warehouse
- **Options research** — collect multiple expirations and filter by strike, volume, open interest or implied volatility
- **ETF and fund due diligence** — compare expense ratios, top holdings, sector exposure and trailing returns
- **Market discovery** — feed screener, search, trending and market-summary rows into alerting or research dashboards
- **Ownership and insider tracking** — monitor institutional positions, insider holders and net purchase activity
- **Compliance and filing research** — collect SEC filing links and exhibits for a list of companies

### Known hard limits

These are limits of Yahoo's public data, verified during the revamp; the actor does not fabricate values for them:

- **Options history and source greeks:** only current option chains are served, and there are no source greeks (no delta/gamma/theta/vega in Yahoo's contract payload). Historical chains are unavailable.
- **US-only options:** option chains exist only for optionable US-listed symbols; no HK/EU/index/FX/crypto chains.
- **Statements for funds, indices, FX, crypto and futures:** Yahoo has no income, balance-sheet or cash-flow statements for these instrument types. Fund profiles and holdings are the substitute.
- **ESG/sustainability:** Yahoo retired the ESG modules and page; the field is not emitted.
- **Predefined screener region:** the predefined endpoint is US-centric and ignores `region`; use `customScreener`.
- **CJK direct search:** `/v1/finance/search` rejects non-Latin text with HTTP 400; the localized `/v1/finance/lookup` fallback is the supported path and can still return zero documents.
- **Screener page size:** Yahoo accepts at most 250 rows per request; the actor paginates to reach `maxResults`.
- **News source cap:** the graph is paginated by cursor and is capped at 200 items per ticker by this actor; the search fallback is smaller.
- **Trending sparsity:** several regions return only 1–4 symbols upstream.

### FAQ

**Do I need an API key, login, cookies or a proxy?**
No. The actor reads Yahoo Finance's public web data without an account. It uses no user cookies or API keys, and it works without a proxy by default.

**Are quotes real-time?**
Most Yahoo quotes are delayed, often by about 15 minutes for US equities. The record's `quoteSource`, `exchangeDataDelayedBy` and `marketState` fields tell you what Yahoo reported for that snapshot.

**Can I get pre-market and after-hours prices?**
Pre-market fields are included when Yahoo publishes them. `postMarket*` fields (`postMarketPrice`, `postMarketChange`, `postMarketChangePercent`, `postMarketTime`) are mapped from Yahoo's quote summary (with the quote-v7 fields as fallback). Post-market values were verified for US-listed equities and ETFs (12/12) and were absent for non-US listings, indices, FX, crypto and futures (0/18), so treat these fields as US-only. Intraday history can include pre/post-market bars with `includePrePost`.

**Why are some fields missing for my ticker?**
Not every instrument type has every data type. Indices, currencies, futures and crypto usually have quotes and charts but no company statements, holders or options. ETFs have fund data instead of company statements. The actor omits a field when Yahoo has no value for it.

**How many news items can I get?**
The actor reads Yahoo's Finance Nexus graph first and paginates its cursor, so `maxNews` supports up to 200 items per symbol (AAPL returned 148, MSFT 132, NVDA 182 and SPY 138 in verification). News works for equities, ETFs, indices, FX and crypto on this path. If the graph returns nothing, the actor falls back to Yahoo's search feed (about 50 items) and then the HTML news page. Results are deduplicated by URL; news can mention related tickers, so use `relatedTickers` when you need to filter relevance.

**Why is the options chain missing?**
Options exist only for optionable US-listed symbols. Foreign listings, indices, currencies, futures and crypto do not have a Yahoo option chain. Yahoo exposes only current expirations, not historical chains, and its contract payload contains no delta, gamma, theta or vega. Historical options, source-provided greeks and non-US option chains are confirmed hard limits; the actor does not invent them.

**Why are quarterly statements missing?**
Quarterly statements require both `includeFinancials` and `includeQuarterlyFinancials`. Operating companies, not funds, indices, FX, crypto or futures, publish them; those instrument types have no Yahoo income/balance/cash-flow statements (a confirmed hard limit). Use `includeFundData` for fund profiles and holdings. Some foreign issuers report only annual periods.

**What does `financials` contain?**
`financials.income`, `financials.balance` and `financials.cashflow` are keyed by fiscal period. Values are in the reporting currency shown in `financials.currency`; `financials.periods` lists the available dates. Quarterly groups sit under `financials.quarterly`. Item keys keep the legacy underscore labels such as `Total_Revenue`, `Net_Income` and `Operating_Cash_Flow`, so existing spreadsheet and API integrations continue to work.

**Why is `dividendYield` a small number like 0.31?**
For backward compatibility, `dividendYield` keeps Yahoo's percentage number: `0.31` means 0.31%. The additive `trailingAnnualDividendYield` is a fraction: `0.0031` means the same yield. `heldPercentInsiders` and `heldPercentInstitutions` are fractions; `debtToEquity` is a percentage number.

**Why is the sustainability/ESG field gone?**
Yahoo retired its ESG endpoints and the sustainability page no longer returns scores. The actor does not advertise or emit a `sustainability` field, and an old task that sends `includeSustainability` continues to run with a logged no-op.

**Can I search in any language?**
Company names and news localize through the `language` and `region` inputs, and unicode names are preserved in output. Yahoo's `/v1/finance/search` endpoint rejects non-Latin text with HTTP 400 (a confirmed source limit), so for Japanese, Chinese or Korean queries the actor automatically falls back to `/v1/finance/lookup` with the selected language and region. Lookup returned documents for most JA/ZH-Hans/ZH-Hant/KO probes. If it returns none, the run status says so explicitly; try a ticker (`7203.T`), an English name, or another region/language.

**How are fund and option values expressed?**
Fund positions (`cashPosition`, `stockPosition`, `holdingPercent`) are fractions: `0.0836` means 8.36%. `fundProfile.totalNetAssets` is absolute fund assets (USD for US-listed funds), normalized from Yahoo's raw millions when that is the only value available. Option `impliedVolatility` uses Yahoo's percentage number: `2.0859` means 208.59%, while the `minImpliedVolatilityPercent` input is a percent: `25` means 25%. `marketSummary.dayChangePercent` is also Yahoo's percentage number. `postMarketChangePercent` is normalized to the same percentage-number convention (`0.63` means 0.63%). Statement values are in `financials.currency`.

**Why do predefined screeners return US rows even when I pick another region?**
Yahoo's predefined screener endpoint is US-centric and ignores the region parameter (confirmed hard limit). Use `mode: "customScreener"` instead: it posts a region operand to Yahoo's custom screener and returned regional rows for 30 of 31 region codes (JP 3,814; IN 8,553; PE 0). The actor paginates in 250-row requests until `maxResults` or source exhaustion. Predefined screeners are unchanged.

**Why does trending return only a few symbols for some regions?**
Yahoo's trending feed is sparse outside the US. A region with one to three symbols is a genuine upstream result, not an early stop. The run status reports the shortfall, and `mode: "customScreener"` provides a region-wide fallback.

**What happens to a delisted or invalid symbol?**
The actor emits an explicit `error` record with `reason: "no_data"` and continues with the other symbols. It does not emit a silent partial ticker record. Aliases such as `BRK.B` are resolved to Yahoo's spelling (`BRK-B`) and return data. Rare-symbol HTTP 500 quote pages were not reproduced locally (306 of 306 rare/crypto pages returned 200); the actor still keeps the quote-v7, chart and HTML fallbacks and reports an error rather than fabricating values.

**Why are some fund fields missing?**
`topHoldings.bondRatings` and `topHoldings.sectorWeightings` are present when Yahoo publishes them; equity sector weights are empty for non-equity funds such as GLD and TLT. `fundProfile.totalNetAssets` is normalized to absolute assets and omitted when Yahoo only returns a zero sentinel; `fundProfile.inceptionDate` comes from Yahoo's fund inception field, not the current manager's start date, and is omitted when unavailable. Morningstar overall/risk ratings are populated for mutual funds but empty for most ETFs, so they are omitted when absent rather than emitted as zero. SEC filings can be attached to one share class only; for example GOOGL's `secFilings` module is empty while GOOG returns filings, so the actor falls back to the sibling class and records `secFilingsSourceSymbol`.

**Is this affiliated with Yahoo?**
No. This is an independent, third-party actor that reads Yahoo Finance's publicly available data and is not affiliated with or endorsed by Yahoo.

# Actor input Schema

## `mode` (type: `string`):

What to scrape.

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

Symbols or Yahoo Finance quote URLs (mode=tickers). Examples: `AAPL`, `BRK.B`, `^GSPC`, `EURUSD=X`, `BTC-USD`, `7203.T`, `https://finance.yahoo.com/quote/AAPL/`.

## `searchQuery` (type: `string`):

Company, fund, index, currency or crypto name to search for (mode=search).

## `maxSearchResults` (type: `integer`):

Maximum number of search results to return (mode=search).

## `screenerId` (type: `string`):

Yahoo predefined screener to run (mode=screener). Predefined screeners are US-centric; use mode=customScreener for a region-aware list.

## `screenerSort` (type: `string`):

Sort field for mode=customScreener.

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

Yahoo market region used for quotes, search, trending, localization and mode=customScreener.

## `language` (type: `string`):

Language used for names, news and localized labels.

## `range` (type: `string`):

History range used when no start/end dates are supplied (mode=tickers).

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

Earliest date for historical bars (`YYYY-MM-DD`). Overrides `range` (mode=tickers).

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

Latest date for historical bars (`YYYY-MM-DD`). Overrides `range` (mode=tickers).

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

Candle interval. Intraday intervals have shorter Yahoo range limits; incompatible combinations are clamped and reported in the run status.

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

Include extended-hours bars for intraday history.

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

Include historical bars with adjusted close.

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

Include the full dividend history from Yahoo chart events.

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

Include stock-split history with numerator and denominator.

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

Include ticker-related news headlines.

## `maxNews` (type: `integer`):

Maximum news items per ticker. Yahoo's news graph serves 200+ items through cursor pagination; the actor caps this request at 200.

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

Include annual income statement, balance sheet and cash-flow statement.

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

Add quarterly statements under `financials.quarterly`. Takes effect only when `includeFinancials` is also on.

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

Include institutional, mutual-fund, major-holder and insider-holder summaries.

## `includeInsiders` (type: `boolean`):

Include insider transactions, insider holders and net share-purchase activity.

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

Include option chains for optionable symbols.

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

How many upcoming option expirations to fetch (mode=tickers, includeOptions=true).

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

Maximum calls and maximum puts per expiration.

## `optionContractType` (type: `string`):

Which option sides to return.

## `minStrike` (type: `number`):

Drop option contracts below this strike.

## `maxStrike` (type: `number`):

Drop option contracts above this strike.

## `minVolume` (type: `integer`):

Drop option contracts below this volume. Contracts with no volume are excluded when this is set.

## `minOpenInterest` (type: `integer`):

Drop option contracts below this open interest. Contracts with no open interest are excluded when this is set.

## `minImpliedVolatilityPercent` (type: `number`):

Drop contracts below this implied volatility in percent, e.g. 25 means 25%.

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

Include the analyst recommendation summary and four-period recommendation trend.

## `includeUpgradesDowngrades` (type: `boolean`):

Include the latest analyst rating changes.

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

Include the analyst price-target summary.

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

Include recent quarters with EPS actual, estimate, difference and surprise.

## `includeEarningsEstimates` (type: `boolean`):

Include EPS and revenue estimates plus growth estimates.

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

Include upcoming earnings dates, estimates and dividend dates.

## `includeFundData` (type: `boolean`):

Include fund profile, top holdings and performance for ETFs and mutual funds.

## `includeSecFilings` (type: `boolean`):

Include recent SEC filings with EDGAR links and exhibits.

## `includeInsights` (type: `boolean`):

Include technical outlook, research reports and significant developments.

## `includeRelatedSymbols` (type: `boolean`):

Include Yahoo's related-symbol recommendations.

## `maxResults` (type: `integer`):

Maximum records for screener, customScreener, trending and marketSummary modes. Search uses maxSearchResults.

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

Number of tickers fetched in parallel (mode=tickers).

## Actor input object example

```json
{
  "mode": "tickers",
  "tickers": [
    "AAPL"
  ],
  "searchQuery": "Apple",
  "maxSearchResults": 10,
  "screenerId": "day_gainers",
  "screenerSort": "intradaymarketcap",
  "region": "US",
  "language": "en-US",
  "range": "5d",
  "interval": "1d",
  "includePrePost": false,
  "includeHistory": true,
  "includeDividends": true,
  "includeSplits": true,
  "includeNews": true,
  "maxNews": 10,
  "includeFinancials": false,
  "includeQuarterlyFinancials": false,
  "includeHolders": false,
  "includeInsiders": false,
  "includeOptions": false,
  "optionExpirations": 1,
  "maxOptionContracts": 50,
  "optionContractType": "both",
  "includeRecommendations": true,
  "includeUpgradesDowngrades": false,
  "includeAnalystPriceTargets": true,
  "includeEarningsHistory": true,
  "includeEarningsEstimates": false,
  "includeEarningsCalendar": true,
  "includeFundData": false,
  "includeSecFilings": false,
  "includeInsights": false,
  "includeRelatedSymbols": false,
  "maxResults": 1,
  "concurrency": 1
}
```

# Actor output Schema

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

Dataset containing every scraped record (ticker, discovery or error).

# 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 = {
    "mode": "tickers",
    "tickers": [
        "AAPL"
    ],
    "searchQuery": "Apple",
    "maxSearchResults": 10,
    "screenerId": "day_gainers",
    "screenerSort": "intradaymarketcap",
    "region": "US",
    "language": "en-US",
    "range": "5d",
    "interval": "1d",
    "includePrePost": false,
    "includeHistory": false,
    "includeDividends": false,
    "includeSplits": false,
    "includeNews": false,
    "maxNews": 10,
    "includeFinancials": false,
    "includeQuarterlyFinancials": false,
    "includeHolders": false,
    "includeInsiders": false,
    "includeOptions": false,
    "optionExpirations": 1,
    "maxOptionContracts": 50,
    "optionContractType": "both",
    "includeRecommendations": false,
    "includeUpgradesDowngrades": false,
    "includeAnalystPriceTargets": false,
    "includeEarningsHistory": false,
    "includeEarningsEstimates": false,
    "includeEarningsCalendar": false,
    "includeFundData": false,
    "includeSecFilings": false,
    "includeInsights": false,
    "includeRelatedSymbols": false,
    "maxResults": 1,
    "concurrency": 1
};

// Run the Actor and wait for it to finish
const run = await client.actor("nimbryxo-studio/yahoo-finance-market-data-and-fundamentals-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 = {
    "mode": "tickers",
    "tickers": ["AAPL"],
    "searchQuery": "Apple",
    "maxSearchResults": 10,
    "screenerId": "day_gainers",
    "screenerSort": "intradaymarketcap",
    "region": "US",
    "language": "en-US",
    "range": "5d",
    "interval": "1d",
    "includePrePost": False,
    "includeHistory": False,
    "includeDividends": False,
    "includeSplits": False,
    "includeNews": False,
    "maxNews": 10,
    "includeFinancials": False,
    "includeQuarterlyFinancials": False,
    "includeHolders": False,
    "includeInsiders": False,
    "includeOptions": False,
    "optionExpirations": 1,
    "maxOptionContracts": 50,
    "optionContractType": "both",
    "includeRecommendations": False,
    "includeUpgradesDowngrades": False,
    "includeAnalystPriceTargets": False,
    "includeEarningsHistory": False,
    "includeEarningsEstimates": False,
    "includeEarningsCalendar": False,
    "includeFundData": False,
    "includeSecFilings": False,
    "includeInsights": False,
    "includeRelatedSymbols": False,
    "maxResults": 1,
    "concurrency": 1,
}

# Run the Actor and wait for it to finish
run = client.actor("nimbryxo-studio/yahoo-finance-market-data-and-fundamentals-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 '{
  "mode": "tickers",
  "tickers": [
    "AAPL"
  ],
  "searchQuery": "Apple",
  "maxSearchResults": 10,
  "screenerId": "day_gainers",
  "screenerSort": "intradaymarketcap",
  "region": "US",
  "language": "en-US",
  "range": "5d",
  "interval": "1d",
  "includePrePost": false,
  "includeHistory": false,
  "includeDividends": false,
  "includeSplits": false,
  "includeNews": false,
  "maxNews": 10,
  "includeFinancials": false,
  "includeQuarterlyFinancials": false,
  "includeHolders": false,
  "includeInsiders": false,
  "includeOptions": false,
  "optionExpirations": 1,
  "maxOptionContracts": 50,
  "optionContractType": "both",
  "includeRecommendations": false,
  "includeUpgradesDowngrades": false,
  "includeAnalystPriceTargets": false,
  "includeEarningsHistory": false,
  "includeEarningsEstimates": false,
  "includeEarningsCalendar": false,
  "includeFundData": false,
  "includeSecFilings": false,
  "includeInsights": false,
  "includeRelatedSymbols": false,
  "maxResults": 1,
  "concurrency": 1
}' |
apify call nimbryxo-studio/yahoo-finance-market-data-and-fundamentals-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,nimbryxo-studio/yahoo-finance-market-data-and-fundamentals-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/pKSuSrtPEecMXeM4a/builds/z23J6rGwf21tmdpCT/openapi.json
