# Yahoo Finance Fundamentals Scraper - Stocks & Financials (`haketa/yahoo-finance-fundamentals-scraper`) Actor

Yahoo Finance fundamentals scraper & API: export income statement, balance sheet & cash flow (annual & quarterly), key stats, valuation ratios (P/E, PEG, EV/EBITDA), margins, analyst price targets, dividends and live quotes for stocks, ETFs & crypto — fast, no login, no API key.

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

## Pricing

from $1.50 / 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.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

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

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

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

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

# README

## Yahoo Finance Fundamentals Scraper 📈 — Statements, Ratios & Quotes

Pull **company fundamentals from Yahoo Finance** as clean, structured JSON — **income statement, balance sheet and cash flow** (annual & quarterly), plus **key statistics, valuation ratios, analyst price targets and live quotes** — for **stocks, ETFs, indices, crypto and FX**, worldwide.

Built API-first for **reliability and speed** (no fragile page-rendering), with automatic session handling and proxy rotation so it keeps working at scale.

> 💡 **Why this actor?** Most "Yahoo Finance" scrapers only return prices, or wrap a library that breaks when Yahoo rotates its auth. This one delivers **complete financial statements + valuation + analyst data** in one normalized record, and is engineered to survive Yahoo's auth/rate-limit gating.

***

### 📋 Table of contents

- [What does it do?](#what-does-it-do)
- [Use cases](#use-cases)
- [How to use it](#how-to-use-it-step-by-step)
- [Input parameters](#input-parameters)
- [Input examples](#input-examples)
- [Output — data fields](#output--data-fields)
- [Sample output record](#sample-output-record)
- [Coverage](#coverage)
- [Tips & best practices](#tips--best-practices)
- [Frequently asked questions](#frequently-asked-questions)
- [Changelog](#changelog)

***

### What does it do?

Give it tickers (or pick a screener) and it returns, per symbol:

- 🧾 **Financial statements** — income statement, balance sheet, cash flow (annual + quarterly), with normalized field names.
- 📊 **Key statistics & valuation** — market cap, P/E, forward P/E, PEG, price/book, price/sales, EV, EV/EBITDA, beta, EPS, shares outstanding.
- 💹 **Profitability & growth** — gross/operating/profit margins, ROE, ROA, revenue & earnings growth, free & operating cash flow, debt, cash, current/quick ratio.
- 🎯 **Analyst data** — mean/high/low price targets, recommendation, number of analysts.
- 💵 **Dividends** — rate, yield, payout ratio, ex-dividend date.
- 📈 **Live quote & 52-week range**, and optional **historical OHLCV price data**.

Export to **JSON, CSV, Excel, XML or HTML**, or pull from the **Apify API**.

***

### Use cases

**📊 Equity research & screening**

- Compare valuation and profitability across a watchlist or a whole screener.
- Build fundamental models from full statement history.

**🤖 Quant & data teams**

- Feed normalized fundamentals + price history into models and dashboards.
- Track quarterly results across many tickers.

**💼 Investors & analysts**

- Pull P/E, PEG, EV/EBITDA, margins, ROE and analyst targets in one batch.
- Monitor dividends and payout ratios.

**📰 Fintech & media**

- Power stock dashboards, newsletters and alerts with reliable structured data.

***

### How to use it (step by step)

No coding required.

1. Click **Try for free / Start**.
2. Add **Symbols** (e.g. `AAPL`, `MSFT`, `BTC-USD`) — or pick a **Screener** (e.g. "Most actives") to discover tickers automatically.
3. Choose **Statement frequency** (annual / quarterly / both) and toggle **Include financial statements** / **Include price history**.
4. Set **Max symbols**.
5. Click **Save & Start**, then export the results.

***

### Input parameters

| Field | Type | Description |
|------|------|-------------|
| `symbols` | array | Tickers (e.g. `AAPL`, `MSFT`, `BTC-USD`, `^GSPC`, `EURUSD=X`). |
| `screener` | string | Optional Yahoo predefined screener to discover tickers (most\_actives, day\_gainers, undervalued\_large\_caps, …). |
| `statementFrequency` | string | `both`, `annual`, or `quarterly`. |
| `includeStatements` | boolean | Include income/balance/cash-flow statements. Default `true`. |
| `includePriceHistory` | boolean | Include historical OHLCV. Default `false`. |
| `priceRange` | string | Range for price history (`1mo`–`max`). |
| `maxItems` | integer | Max symbols. `0` = no limit. Default `100`. |
| `proxyConfiguration` | object | Proxy settings. Default: Apify Proxy on. |
| `maxConcurrency` | integer | Max parallel requests. Default `5`. |

***

### Input examples

**1) A few tickers with full statements**

```json
{
  "symbols": ["AAPL", "MSFT", "GOOGL"],
  "statementFrequency": "both"
}
```

**2) Discover & scrape the most active stocks**

```json
{
  "screener": "most_actives",
  "maxItems": 50
}
```

**3) Quotes + key stats only (fast, no statements)**

```json
{
  "symbols": ["TSLA", "NVDA", "AMD"],
  "includeStatements": false
}
```

**4) With price history**

```json
{
  "symbols": ["AAPL"],
  "includePriceHistory": true,
  "priceRange": "5y"
}
```

***

### Output — data fields

One record per symbol. Top-level fields include:

| Group | Fields |
|------|--------|
| Identity | `symbol`, `name`, `exchange`, `currency`, `quoteType`, `sector`, `industry`, `country`, `website`, `employees`, `businessSummary` |
| Quote | `price`, `marketCap`, `previousClose`, `dayHigh`, `dayLow`, `fiftyTwoWeekHigh`, `fiftyTwoWeekLow`, `volume`, `averageVolume` |
| Valuation | `trailingPE`, `forwardPE`, `pegRatio`, `priceToBook`, `priceToSales`, `enterpriseValue`, `enterpriseToRevenue`, `enterpriseToEbitda`, `beta`, `bookValue`, `trailingEps`, `forwardEps`, `sharesOutstanding`, `floatShares` |
| Profitability | `profitMargins`, `grossMargins`, `operatingMargins`, `returnOnEquity`, `returnOnAssets`, `revenueGrowth`, `earningsGrowth`, `totalRevenueTTM`, `ebitdaTTM`, `totalCash`, `totalDebt`, `currentRatio`, `quickRatio`, `freeCashflowTTM`, `operatingCashflowTTM` |
| Dividends | `dividendRate`, `dividendYield`, `payoutRatio`, `exDividendDate` |
| Analyst | `targetMeanPrice`, `targetHighPrice`, `targetLowPrice`, `recommendationKey`, `numberOfAnalystOpinions` |
| Statements | `financials.incomeStatement[]`, `financials.balanceSheet[]`, `financials.cashFlow[]` |
| Price history | `priceHistory[]` (when enabled) |

Each statement row: `{ date, frequency, periodType, currency, ...lineItems }` — e.g. income rows carry `totalRevenue`, `grossProfit`, `operatingIncome`, `ebitda`, `netIncome`, `dilutedEPS`, …; balance rows carry `totalAssets`, `stockholdersEquity`, `totalDebt`, `cashAndCashEquivalents`, …; cash-flow rows carry `operatingCashFlow`, `freeCashFlow`, `capitalExpenditure`, …

***

### Sample output record

```json
{
  "symbol": "AAPL",
  "name": "Apple Inc.",
  "exchange": "NMS",
  "currency": "USD",
  "sector": "Technology",
  "marketCap": 4571145961472,
  "price": 311.23,
  "trailingPE": 37.72,
  "forwardPE": 32.39,
  "priceToBook": 42.87,
  "enterpriseValue": 4587349606400,
  "returnOnEquity": 1.4147,
  "profitMargins": 0.2715,
  "targetMeanPrice": 310.5,
  "recommendationKey": "buy",
  "dividendYield": 0.0035,
  "financials": {
    "incomeStatement": [
      { "date": "2025-09-30", "frequency": "annual", "currency": "USD", "totalRevenue": 416161000000, "netIncome": 99000000000, "dilutedEPS": 7.46, "ebitda": 144748000000 }
    ],
    "balanceSheet": [
      { "date": "2025-09-30", "frequency": "annual", "totalAssets": 359241000000, "stockholdersEquity": 66000000000 }
    ],
    "cashFlow": [
      { "date": "2025-09-30", "frequency": "annual", "operatingCashFlow": 120000000000, "freeCashFlow": 98767000000 }
    ]
  },
  "scrapedAt": "2026-06-05T10:00:00.000Z"
}
```

***

### Coverage

- **Stocks** (global exchanges), **ETFs**, **indices** (`^GSPC`), **crypto** (`BTC-USD`), **FX** (`EURUSD=X`).
- Full financial statements apply to **equities**; indices/FX/crypto return quote & price data.
- Discover symbols with the built-in **screeners**, or supply your own ticker list.

***

### Tips & best practices

- 🧪 **Start with a few symbols** to confirm the output shape.
- ⚡ **Disable statements** for a fast quotes + key-stats run when you don't need full history.
- 🧱 **Use a screener** to scan a whole segment (e.g. most actives, undervalued large caps).
- 🐢 **Keep concurrency moderate** and proxy on — Yahoo rate-limits aggressive bursts.
- 💾 **Use the Apify API / integrations** to push results into Google Sheets, a database, or a webhook, and **schedule** runs to track quarterly results.

***

### Frequently asked questions

**Which statements are included?**
Income statement, balance sheet and cash flow — annual and/or quarterly, with normalized field names and multiple years of history.

**Does it cover non-US companies?**
Yes — any symbol available on Yahoo Finance, across global exchanges, plus ETFs, indices, crypto and FX.

**Can I discover tickers automatically?**
Yes — pick a predefined screener (most actives, day gainers, undervalued large caps, etc.).

**Do I get analyst price targets and dividends?**
Yes — mean/high/low targets, recommendation, analyst count, and dividend rate/yield/payout.

**What export formats are supported?**
JSON, CSV, Excel, XML, HTML table, RSS — plus the Apify API and integrations.

***

### Changelog

**Last updated:** 2026-07-02 — Actor verified and maintained. Data pipeline tested for quality, structure and freshness; selectors/endpoints confirmed against the live site.

**0.1.0**

- Initial release: full income/balance/cash-flow statements (annual + quarterly), key stats, valuation ratios, profitability, dividends, analyst targets and live quotes.
- Symbol list or screener discovery; optional OHLCV price history.
- API-first with resilient session handling and proxy rotation.

# Actor input Schema

## `screener` (type: `string`):

The easiest way to start: pick a curated Yahoo Finance list and we fetch fundamentals for every stock in it — no typing tickers. Combine with 'Symbols' below if you also want specific companies. Leave on 'None' and add symbols instead if you prefer. If you leave everything empty, a popular sample of stocks, ETFs and crypto is returned automatically.

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

Add specific tickers to scrape, e.g. AAPL, MSFT, TSLA, BTC-USD. Stocks, ETFs, indices, crypto and FX are all supported. Optional — leave empty and pick a ready-made list above instead, or leave everything empty for a popular sample.

## `statementFrequency` (type: `string`):

Which financial-statement periods to include.

## `includeStatements` (type: `boolean`):

Include full income statement, balance sheet and cash flow history. Disable for a faster quotes + key-stats-only run.

## `includePriceHistory` (type: `boolean`):

Include historical daily open/high/low/close/volume price data.

## `priceRange` (type: `string`):

How far back to pull price history (only used when 'Include price history' is on).

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

Maximum number of symbols to scrape. Use 0 for no limit.

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

Rotating proxies keep large runs reliable. The default works out of the box.

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

Maximum parallel requests. Keep moderate for the most reliable runs.

## Actor input object example

```json
{
  "screener": "",
  "symbols": [
    "AAPL",
    "MSFT"
  ],
  "statementFrequency": "both",
  "includeStatements": true,
  "includePriceHistory": false,
  "priceRange": "1y",
  "maxItems": 100,
  "proxyConfiguration": {
    "useApifyProxy": true
  },
  "maxConcurrency": 5
}
```

# Actor output Schema

## `symbols` (type: `string`):

All symbol records collected during the run.

## `runUrl` (type: `string`):

Open this run in the Apify Console.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

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

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "symbols": [
        "AAPL",
        "MSFT"
    ],
    "maxItems": 100,
    "proxyConfiguration": {
        "useApifyProxy": true
    },
    "maxConcurrency": 5
};

// Run the Actor and wait for it to finish
const run = await client.actor("haketa/yahoo-finance-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 = {
    "symbols": [
        "AAPL",
        "MSFT",
    ],
    "maxItems": 100,
    "proxyConfiguration": { "useApifyProxy": True },
    "maxConcurrency": 5,
}

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

```

## MCP server setup

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