# Google Finance Scraper — quotes, key stats & news (`istmobot/google-finance-scraper`) Actor

Get Google Finance quotes for stocks, ETFs, indexes, currencies and crypto: price, change, day/52-week range, market cap, P/E, dividend yield, volume, company description and related news — the data the shut-down Google Finance API used to give you.

- **URL**: https://apify.com/istmobot/google-finance-scraper.md
- **Developed by:** [Istmobot](https://apify.com/istmobot) (community)
- **Categories:** Other, Developer tools
- **Security:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per event

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/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

## Google Finance Scraper — quotes, key stats & news

Google shut down its Finance API years ago. This Actor gives you the same data back as clean JSON: **price, change, previous close, day and 52-week range, market cap, average volume, P/E ratio, dividend yield, EPS, beta, company description and related news** for stocks, ETFs, indexes, currencies and crypto — straight from the public Google Finance quote pages. No browser, no login, no API key.

### What it does

- Loads `https://www.google.com/finance/quote/{TICKER}` for every ticker you give it and reads the data embedded in the page (not fragile CSS classes), so numbers are raw values, not formatted strings like "4.86T".
- Works for **stocks** (`AAPL:NASDAQ`, `SAP:ETR`, `7203:TYO`), **ETFs** (`SPY:NYSEARCA`), **indexes** (`.INX:INDEXSP`, `.DJI:INDEXDJX`), **currencies** (`EUR-USD`) and **crypto** (`BTC-USD`).
- **Bare US symbols** (`TSLA`, `JPM`, `SPY`) are resolved automatically: NASDAQ → NYSE → NYSEARCA.
- **Related news**: the ticker's "News stories" list with title, source, URL and publish time.
- Any **language** Google supports (`hl=de`, `fr`, `ja`…) for descriptions and news.
- Built-in retries with exponential backoff, EU consent handling and optional Apify Proxy rotation for Google's rate limits.

### Use cases

- **Portfolio & watchlist trackers** — daily quotes and key stats for a list of tickers into Google Sheets, Notion or a database.
- **Fintech prototypes** — a free quote + fundamentals + news feed without a market-data contract.
- **Research & newsletters** — snapshot market cap, P/E and dividend yield for a universe of stocks; pull the latest headlines per ticker.
- **AI agents & LLM apps** — give an assistant structured, current market context for a company.

### Input

| Field | Type | Default | Description |
|---|---|---|---|
| `tickers` | list of strings | — (required) | `AAPL:NASDAQ`, `TSLA`, `BTC-USD`, `EUR-USD`, `.INX:INDEXSP` |
| `includeNews` | boolean | `true` | Add the related news list |
| `language` | string | `en` | Google `hl` language code |
| `maxConcurrency` | integer | `3` | Pages loaded in parallel (1–10) |
| `proxyConfiguration` | proxy | Apify Proxy | Recommended for anything beyond a handful of tickers |

```json
{
  "tickers": ["AAPL:NASDAQ", "TSLA", "BTC-USD", "EUR-USD", ".INX:INDEXSP"],
  "includeNews": true,
  "language": "en",
  "maxConcurrency": 3,
  "proxyConfiguration": { "useApifyProxy": true }
}
```

> Tip: not sure about the exchange code? Search the company on google.com/finance and copy the part after `/quote/` from the URL.

### Output

```json
{
  "input": "AAPL:NASDAQ",
  "ticker": "AAPL:NASDAQ",
  "symbol": "AAPL",
  "exchange": "NASDAQ",
  "name": "Apple Inc",
  "assetType": "stock",
  "price": 333.02,
  "currency": "USD",
  "change": 3.619995,
  "changePercent": 1.0989664,
  "previousClose": 329.4,
  "open": 330.8,
  "dayHigh": 339.5,
  "dayLow": 330.1401,
  "yearHigh": 345.34,
  "yearLow": 243.42,
  "volume": 49988558,
  "avgVolume": 41598627,
  "marketCap": 4860153663263.55,
  "peRatio": 38.176006,
  "eps": 8.72328,
  "dividendYield": 0.32430488,
  "beta": 1.0856,
  "primaryExchange": "NASDAQ",
  "sector": "Computers, Peripherals, and Software",
  "afterHoursPrice": 334.25,
  "afterHoursChangePercent": 0.3693505,
  "quoteTime": "2026-09-30T20:00:01.000Z",
  "about": "Apple Inc. is an American multinational technology company headquartered in Cupertino, California, in Silicon Valley, and known for consumer electronics, software and online services. Founded in 1976 as Apple Computer Company by Steve Jobs, Steve Wozniak and Ronald Wayne, the company was incorporated by Jobs and Wozniak as Apple Computer, Inc.",
  "news": [
    {
      "title": "Apple Predicted To Sell 6 Million iPhone Duo Handsets This Year",
      "source": "Investor's Business Daily",
      "url": "https://www.investors.com/news/technology/apple-stock-aapl-iphone-duo-2026-sales-forecast/",
      "publishedAt": "2026-09-30T21:06:00.000Z"
    }
  ],
  "url": "https://www.google.com/finance/quote/AAPL:NASDAQ?hl=en",
  "scrapedAt": "2026-10-01T01:38:29.512Z"
}
```

- `changePercent` and `dividendYield` are in percent (`1.10` = 1.10 %). `marketCap` is in the quote currency.
- `assetType` is `stock`, `etf`, `mutualFund`, `index`, `currency` or `crypto`.
- Fields that don't apply are `null` (e.g. no P/E for an index, no market cap for EUR-USD; indexes have no `currency`).
- `quoteTime` is the time of the regular-session price; `afterHoursPrice` is set for US stocks outside regular hours.

#### Error item

```json
{ "input": "ZZZZQX", "errorType": "NOT_FOUND", "error": "No Google Finance quote for ZZZZQX:NASDAQ / ZZZZQX:NYSE / ZZZZQX:NYSEARCA. Use SYMBOL:EXCHANGE as shown in the Google Finance URL, e.g. \"SAP:ETR\", \".DJI:INDEXDJX\".", "scrapedAt": "2026-10-01T01:38:30.989Z" }
```

`errorType` is `NOT_FOUND`, `BLOCKED` (rate-limited even after retries) or `FETCH_FAILED`. Error items are never charged.

### Pricing

Pay-per-event:

- **Actor start** — small fixed fee per run.
- **`ticker-result`** — per ticker successfully scraped (news included).

Not-found tickers and errors are free. Set a maximum cost per run and the Actor stops cleanly once it is reached.

### FAQ

**How fresh are the prices?** Whatever Google Finance shows: real-time for some markets, delayed (typically 15–20 minutes) for many exchanges. Check `quoteTime`.

**Why do I get `BLOCKED` errors?** Google rate-limits many requests from the same IP (HTTP 429 or a captcha page). Enable Apify Proxy — every retry then uses a new IP — and prefer the **RESIDENTIAL** group for large lists. Lower `maxConcurrency` if you run without a proxy.

**Can I get historical prices?** Not in this version — it returns the current quote and key stats. Schedule it (e.g. daily) to build your own history.

**Does it work from Europe?** Yes. Consent cookies are sent with every request, so Google's consent page doesn't get in the way.

**Why is a field `null` for my ticker?** Google doesn't show it for that instrument (e.g. P/E for loss-making companies, dividend yield for non-payers, key stats for crypto).

**Is this the official Google Finance API?** No — Google has no public Finance API. This Actor reads the public web pages.

### Disclaimer

This is an **unofficial** tool, **not affiliated with, endorsed by or sponsored by Google LLC**. It reads **publicly available, possibly delayed** data from Google Finance pages; Google notes its data is provided "as is" and may be delayed or inaccurate. Page structure can change without notice. **Nothing here is investment advice.** You are responsible for using the data in line with applicable laws and Google's terms of service.

# Actor input Schema

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

Use the form shown in Google Finance URLs: SYMBOL:EXCHANGE (AAPL:NASDAQ, SAP:ETR, 7203:TYO), currency or crypto pairs (EUR-USD, BTC-USD), indexes (.INX:INDEXSP, .DJI:INDEXDJX). A bare US symbol (TSLA, JPM, SPY) is tried on NASDAQ, then NYSE, then NYSEARCA.

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

Add the ticker's related news stories (title, source, URL, publish time).

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

Google interface language (hl parameter), e.g. en, de, fr, es, ja. Affects the company description, names and news selection. Numbers are always raw values.

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

How many quote pages to load in parallel. Keep it low (1–3) without residential proxies to avoid Google rate limits.

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

Recommended. Google rate-limits repeated requests from one IP (HTTP 429 / captcha). Apify Proxy rotates IPs on every retry; RESIDENTIAL is the most reliable for large runs.

## Actor input object example

```json
{
  "tickers": [
    "AAPL:NASDAQ",
    "TSLA",
    "BTC-USD",
    "EUR-USD",
    ".INX:INDEXSP"
  ],
  "includeNews": true,
  "language": "en",
  "maxConcurrency": 3,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `results` (type: `string`):

No description

# API

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

## JavaScript example

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

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

// Prepare Actor input
const input = {
    "tickers": [
        "AAPL:NASDAQ",
        "TSLA",
        "BTC-USD",
        "EUR-USD",
        ".INX:INDEXSP"
    ],
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("istmobot/google-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:NASDAQ",
        "TSLA",
        "BTC-USD",
        "EUR-USD",
        ".INX:INDEXSP",
    ],
    "proxyConfiguration": { "useApifyProxy": True },
}

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

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "tickers": [
    "AAPL:NASDAQ",
    "TSLA",
    "BTC-USD",
    "EUR-USD",
    ".INX:INDEXSP"
  ],
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call istmobot/google-finance-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,istmobot/google-finance-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/EhGps61RQ2TbU8gl6/builds/IqkfxkejpkjeVEVbS/openapi.json
