# Google Finance Scraper (`fastdataapi/google-finance-scraper`) Actor

Scrape Google Finance price history for stocks, indexes, mutual funds, crypto and currency pairs on any exchange Google Finance lists. One row per ticker: name, exchange, latest price, change, volume and every price point from 1 day to the full history. No login or API key.

- **URL**: https://apify.com/fastdataapi/google-finance-scraper.md
- **Developed by:** [Fast Data API](https://apify.com/fastdataapi) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.99 / 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

### Google Finance Scraper — Prices, Change, Volume and Price History

Google Finance Scraper returns the price history of stocks, indexes, mutual funds, crypto and currency pairs from Google Finance: name, exchange, latest price, change, volume and every price point from one day to the full history. It reads **any exchange Google Finance lists**, from New York and Tokyo to London, Frankfurt and Mumbai. Every response is structured JSON — ready to pass directly to an LLM, index into a vector store, or feed a market data pipeline. No Google account or API key needed. Paste your tickers and start tracking prices.

![Google Finance Scraper output: ticker, last price, change and volume as JSON](https://api.apify.com/v2/key-value-stores/Lg9lp51Levfro6SrV/records/h-google-finance-hero.webp)

***

### What data can I extract with Google Finance Scraper?

Using this Google Finance API, you will be able to extract the following Google Finance ticker data:

| 🏷️ Ticker you entered | 🆔 Google Finance ticker | 🏢 Instrument name | 🏛️ Exchange |
|---|---|---|---|
| 💰 Latest price | ↕️ Change from period start | 📊 Change as a fraction | 📦 Volume (when Google has it) |
| 🕒 Time of the latest price (UTC) | 📅 Chart period | 🔢 Number of price points | 📈 Full price history with time, price, change and volume |
| 🔗 Google Finance quote page | 🧾 Row type | ⚠️ Error message and reason | |

***

### How to use Google Finance Scraper

Built for analysts, traders and AI builders who need market prices as data: this stock price scraper turns a list of tickers into one row per instrument with its full price history.

**Copy to your AI assistant:**

```text
This actor (Apify Actor ID: fastdataapi/google-finance-scraper, https://apify.com/fastdataapi/google-finance-scraper) is an Apify Actor that returns Google Finance price history for stocks, indexes, mutual funds, crypto and currency pairs as structured JSON: Google Finance ticker, instrument name, exchange, latest price, change and change fraction from the start of the period, volume, time of the latest price, and every price point of the period with time, price, change and volume. Use it whenever someone needs Google Finance historical data without cookies, a login, or a browser - tracking a watchlist, exporting stock chart data to a spreadsheet, or giving an AI agent current and past prices. Inputs: urls (array of strings, required, Google Finance quote URLs or tickers in Google Finance format: SYMBOL:EXCHANGE such as "GOOGL:NASDAQ" or "VOD:LON", ".DJI" for indexes, "BTC-USD" for crypto and currencies; a symbol without an exchange such as "AAPL" is looked up on NASDAQ, NYSE, NYSEARCA, NYSEAMERICAN, BATS and MUTF), period (string, required, "1D" | "5D" | "1M" | "6M" | "YTD" | "1Y" | "5Y" | "MAX", default "1M"), proxyConfiguration (object, optional). Each ticker gives one row: rowType "ticker" rows have prices and are charged as the row_result event; rowType "error" rows (entry is not a ticker, ticker not found, no prices for the period, Google Finance did not answer) carry error and errorReason and are free. change and changePct are measured from the start of the chosen period, as on the Google Finance chart. The OUTPUT key-value record holds {config, results, timestamp} for the whole run.
```

#### Google Finance Scraper MCP Server: use these Actors from ChatGPT, Claude or Cursor

Point your AI assistant at Apify and it can read Google Finance on its own: latest prices and price history for stocks, indexes, funds, crypto and currencies on any listed exchange. No glue code, no scraping logic in your prompts.

```bash
claude mcp add --transport http apify "https://mcp.apify.com?tools=fastdataapi/google-finance-scraper"
```

#### Step by step

1. [Create a free Apify account](https://console.apify.com/sign-up).
2. Open [Google Finance Scraper](https://apify.com/fastdataapi/google-finance-scraper) in the Apify Store.
3. Paste Google Finance quote URLs or tickers, one per line, and pick the period.
4. Click **Start** (or send your API request).
5. Download or stream your results in JSON, CSV or Excel.

#### How to scale Google Finance Scraper to bulk

Put every ticker in one run: the URLs or tickers field takes a list, and 8 tickers are read at the same time. A recorded run returned 40 tickers from 13 exchanges, with 879 price points, in 9.8 seconds. Rows are saved in your order as each ticker finishes, so you can read the dataset while the run is still going. Use it as a ticker price tracker by scheduling the same input daily in Apify Console, or start runs from the API.

***

### ✨ Features

Google Finance Scraper fetches clean, structured price data from Google Finance ⚡. It's ideal for watchlist tracking, backtesting with historical stock prices, exporting stock chart data to spreadsheets and giving AI agents market context — a stock market data scraper, crypto price history and forex rates scraper in one actor. It extracts, per ticker:

- **Latest price, change and volume** – the newest point of the period, with the change from the period start
- **Full price history** – every point Google Finance draws on the chart, newest first
- **Instrument name and exchange** – Google Finance's own name and exchange code for the ticker
- **Any period** – 1 day (intraday), 5 days, 1 month, 6 months, year to date, 1 year, 5 years or the full history
- **Any market** – stocks, ETFs, mutual funds and indexes on any exchange Google Finance lists, plus crypto and currency pairs

⚡ No Google account or API key needed. Tickers that can't be read get a free error row that says why.

***

### Use cases 💡

- **Analyst** — export a 5-year weekly price history for a sector watchlist into Excel.
- **Trader** — track today's intraday prices and change for a set of tickers.
- **Fund researcher** — compare mutual fund and index performance over year to date.
- **Crypto and forex desk** — pull daily crypto price history and currency rates in one run.
- **AI engineer** — give an agent current prices and change as JSON for market questions.

Building an AI agent? [Connect Google Finance Scraper over MCP](#mcp-integration-for-ai-agents) and let it call the actor on its own.

***

### Why choose this actor?

1. **Many tickers in seconds.** A recorded run returned 40 tickers from 13 exchanges in 9.8 seconds, and every ticker in it came back with prices.
2. **The right company on every exchange.** Prices come from Google Finance itself for the exact ticker and exchange you enter: Toyota on Tokyo, Vodafone on London, SAP on Frankfurt and Reliance on the National Stock Exchange of India all came back correctly in a recorded run.
3. **From one day to the full history.** Eight chart periods; a recorded full-history run returned 1,156 daily points for Alphabet back to 2004 and 1,558 points for the S\&P 500.

***

### ⬇️ Input

![Google Finance Scraper input: tickers or URLs and a period](https://api.apify.com/v2/key-value-stores/Lg9lp51Levfro6SrV/records/h-google-finance-input.webp)

Paste Google Finance quote URLs or tickers, one per line, and pick the period; both fields are required.

| Parameter | Required | Type | Description | Example value |
|---|---|---|---|---|
| `urls` | Yes | array of strings | Google Finance quote URLs or tickers. `SYMBOL:EXCHANGE` for stocks and funds, `.DJI` for indexes, `BASE-QUOTE` for crypto and currencies. A symbol without an exchange is looked up on NASDAQ, NYSE, NYSEARCA, NYSEAMERICAN, BATS and MUTF. Upper or lower case both work; duplicates are skipped. | `["GOOGL:NASDAQ", "7203:TYO", "BTC-USD"]` |
| `period` | Yes | string | `1D`, `5D`, `1M`, `6M`, `YTD`, `1Y`, `5Y` or `MAX`. Default `1M`. | `1M` |
| `proxyConfiguration` | No | object | Optional. Without it the actor goes direct and switches to Apify residential proxies on its own if Google Finance blocks a request. | `{"useApifyProxy": false}` |

Accepted formats for each entry:

- `https://www.google.com/finance/quote/GOOGL:NASDAQ` (extra parts such as `?hl=en` are ignored)
- `GOOGL:NASDAQ`, `7203:TYO`, `VOD:LON`, `SAP:ETR`, `RELIANCE:NSE`, `SWPPX:MUTF`
- `.DJI`, `.INX:INDEXSP`, `DAX:INDEXDB`
- `BTC-USD`, `ETH-BTC`, `EUR-USD`
- `AAPL` (US exchanges only)

#### Free plan limits

Free plan: up to 20 tickers per run (all URLs/tickers together) and 200 per month; paid plans have no limit.

#### Example input

```json
{
  "urls": [
    "https://www.google.com/finance/quote/.DJI",
    "https://www.google.com/finance/quote/SWPPX:MUTF",
    "https://www.google.com/finance/quote/GOOGL:NASDAQ",
    "7203:TYO",
    "VOD:LON",
    "AAPL",
    "BTC-USD",
    "EUR-USD"
  ],
  "period": "1M",
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

***

### ⬆️ Output

![Google Finance Scraper output: one row per ticker with price and history](https://api.apify.com/v2/key-value-stores/Lg9lp51Levfro6SrV/records/h-google-finance-output.webp)

Every ticker is one typed, normalized JSON item with the same fields on every run; values that Google Finance doesn't have are `null`. Export the dataset as JSON (default), CSV or Excel. An entry that gives no prices gets a free error row with the reason, and the `OUTPUT` record in the key-value store keeps the whole run as one JSON document.

#### Example output

A recorded row for `AAPL` with the `1M` period (price history shortened to two points; the run returned 20), followed by the error row for a ticker that doesn't exist:

```json
[
  {
    "ticker": "AAPL",
    "googleTicker": "AAPL:NASDAQ",
    "name": "Apple Inc",
    "exchange": "NASDAQ",
    "period": "1M",
    "quoteUrl": "https://www.google.com/finance/quote/AAPL:NASDAQ",
    "lastPrice": 336.64,
    "change": 3.5600000000000023,
    "changePct": 0.010688122973459837,
    "volume": 37881200,
    "dateTimeUTC": "2026-10-09T20:00:00.000Z",
    "historicalDataPoints": 20,
    "data": [
      {
        "dateTimeUTC": "2026-10-09T20:00:00.000Z",
        "price": {"lastPrice": 336.64, "change": 3.5600000000000023, "changePct": 0.010688122973459837},
        "volume": 37881200
      },
      {
        "dateTimeUTC": "2026-10-08T20:00:00.000Z",
        "price": {"lastPrice": 340.42, "change": 7.340000000000032, "changePct": 0.0220367479284257},
        "volume": 35332450
      }
    ],
    "rowType": "ticker",
    "error": null,
    "errorReason": null
  },
  {
    "ticker": "NOSUCHXX:NASDAQ",
    "googleTicker": null,
    "name": null,
    "exchange": null,
    "period": "1M",
    "quoteUrl": null,
    "lastPrice": null,
    "change": null,
    "changePct": null,
    "volume": null,
    "dateTimeUTC": null,
    "historicalDataPoints": 0,
    "data": [],
    "rowType": "error",
    "error": "NOSUCHXX:NASDAQ is not listed on Google Finance. Check the symbol and exchange (e.g. GOOGL:NASDAQ, 7203:TYO, BTC-USD). Nothing was charged.",
    "errorReason": "ticker_not_found"
  }
]
```

Error reasons: `invalid_ticker` (the entry is not a ticker or a Google Finance quote URL), `ticker_not_found`, `no_price_history` (listed, but no prices for the period), `blocked` (Google Finance did not answer after every retry) and `unexpected_error`. Error rows are not charged.

***

### How does it work?

For each ticker the actor opens its public Google Finance quote page, the same one any visitor sees, and reads Google Finance's own name and exchange for it. It then asks Google Finance for the chart of the chosen period and returns every point exactly as Google draws it: price, change from the start of the period and volume. Nothing is calculated or filled in by the actor. A symbol without an exchange is checked on the main US exchanges in turn. If Google Finance blocks a request, the actor retries with a fresh connection and switches to rotating residential proxies on its own. It returns only publicly visible data, with no login, and the output fields stay the same from run to run, so your code and spreadsheets keep working when Google Finance changes its pages.

***

### How do you integrate Google Finance Scraper into your stack?

It works with what you already use: the REST API from any language, MCP for AI agents, and no-code tools.

#### MCP integration for AI agents

Add the Apify MCP server to your AI client with one command:

```bash
claude mcp add --transport http apify "https://mcp.apify.com?tools=fastdataapi/google-finance-scraper"
```

This registers Google Finance Scraper as a tool your agent can call directly: the agent finds it through the server's search, adds it and runs it, then reads the ticker rows back as JSON. Ask for "Toyota and Sony over the last 6 months" and it does the rest. It works in Claude Code, Cursor and Windsurf.

#### No-code tools (n8n, Make, LangChain)

**n8n:** add the Apify node and choose "Run an Actor", or use the HTTP Request node pointed at the run-sync endpoint with your token. Send the latest prices to a Google Sheet or a Slack alert in the next node.

**Make:** use the Apify app's "Run an Actor" module, then "Get Dataset Items" to pull the ticker rows into the rest of your scenario.

**LangChain:** install `langchain-apify` and wrap this actor with `ApifyActorsTool()` once it is in your account, so your agent can look up prices and history by ticker.

***

### Is it legal to scrape Google Finance data?

Collecting publicly available data from Google Finance is generally lawful, as long as you stay out of logged-in areas. This actor returns only publicly available data — what any visitor sees without logging in: instrument names, exchanges, prices and volumes. It collects no personal data. Market data can be subject to exchange and provider terms, so check those terms before you republish prices or use them in a commercial product. Consult legal counsel if your use case involves redistributing market data.

***

### Frequently asked questions

#### What fields does Google Finance Scraper return?

It returns each ticker's Google Finance name and exchange, latest price, change from the start of the period, volume and the full price history of the period. See [the data fields section](#what-data-can-i-extract-with-google-finance-scraper) for the full list.

#### Does Google Finance Scraper require a Google account or login?

No. Only public Google Finance data is extracted, and no credentials are needed.

#### How fast does Google Finance Scraper run?

A recorded run saved 40 tickers in 9.8 seconds, with the first row after 1.6 seconds; most tickers take about one second. Every run reads live data, not a cache.

#### What happens if a ticker doesn't exist or has no prices?

The run saves a free error row for that ticker with an error message and reason, such as `ticker_not_found` or `no_price_history`, and nothing is charged for it. In code, keep rows where the row type is "ticker" and log the rest.

#### Can I scrape multiple Google Finance tickers at once?

Yes. Put every URL or ticker in the list; 8 are read at the same time and rows are saved in your order.

#### Does Google Finance Scraper work with Claude, ChatGPT, and other AI agent tools?

Yes — Google Finance Scraper is available as an MCP tool. Register it in Claude Code, Cursor or Windsurf with `claude mcp add --transport http apify "https://mcp.apify.com?tools=fastdataapi/google-finance-scraper"`. Any agent that can call an HTTP endpoint can use the REST API directly.

#### Does Google Finance Scraper return data in a format LLMs can use directly?

Yes. Each ticker is typed, normalized JSON with consistent field names, so there is no HTML parsing and no selectors. Pass it straight to an LLM, index it into a vector store, or feed it to an agent tool — no transformation step.

#### What happens when Google Finance changes its layout or updates its anti-bot system?

The actor is maintained, and when Google Finance changes, it is updated so your calls keep returning the same JSON fields with no changes on your end.

#### Can I use Google Finance Scraper without managing proxies or browser infrastructure?

Yes. Retries and the switch to rotating residential proxies when Google Finance blocks requests run on the actor's side, and no browser is needed. You send one request and get structured JSON back, with no proxy accounts and no maintenance.

#### Which Google Finance fields work best for AI training data and RAG indexing?

For RAG, use the instrument name, exchange, latest price and time of the latest price. For training data and analytics, use the price history: time, price, change and volume for every point. All fields are plain strings, numbers and nulls, so no normalization is needed.

***

### Your feedback

Found a bug or missing a field? Let us know in the actor's Issues tab. Every report is read, and fixes ship as new versions of the actor.

# Actor input Schema

## `urls` (type: `array`):

One entry per line: a Google Finance quote URL (https://www.google.com/finance/quote/GOOGL:NASDAQ) or a ticker in Google Finance format: SYMBOL:EXCHANGE for stocks and funds (GOOGL:NASDAQ, 7203:TYO, VOD:LON, SWPPX:MUTF), .DJI for indexes, BASE-QUOTE for crypto and currencies (BTC-USD, EUR-USD). A symbol without an exchange (AAPL) is looked up on the US exchanges NASDAQ, NYSE, NYSEARCA, NYSEAMERICAN, BATS and MUTF; add the exchange for any other market. Each ticker gives one row.

## `period` (type: `string`):

The chart period, the same as the period tabs on a Google Finance quote page. 1D gives the latest trading day's intraday prices (about one point per minute); 5D gives several points per trading day; 1M, 6M, YTD and 1Y give one point per trading day; 5Y gives one point per week; MAX gives the full history since listing.

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

Optional. Google Finance usually works without a proxy. With no proxy selected, the first try goes direct and a residential proxy is added automatically if Google Finance blocks a request. Select Apify Proxy or your own proxies to use them from the first request.

## Actor input object example

```json
{
  "urls": [
    "https://www.google.com/finance/quote/.DJI",
    "https://www.google.com/finance/quote/SWPPX:MUTF",
    "https://www.google.com/finance/quote/GOOGL:NASDAQ",
    "https://www.google.com/finance/quote/ETH-BTC",
    "https://www.google.com/finance/quote/EUR-USD"
  ],
  "period": "1M",
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

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

All ticker rows in the Actor's default dataset.

## `summary` (type: `string`):

The tickers and period of the run and every ticker's price points in one JSON record.

# 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 = {
    "urls": [
        "https://www.google.com/finance/quote/.DJI",
        "https://www.google.com/finance/quote/SWPPX:MUTF",
        "https://www.google.com/finance/quote/GOOGL:NASDAQ",
        "https://www.google.com/finance/quote/ETH-BTC",
        "https://www.google.com/finance/quote/EUR-USD"
    ],
    "proxyConfiguration": {
        "useApifyProxy": false
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("fastdataapi/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 = {
    "urls": [
        "https://www.google.com/finance/quote/.DJI",
        "https://www.google.com/finance/quote/SWPPX:MUTF",
        "https://www.google.com/finance/quote/GOOGL:NASDAQ",
        "https://www.google.com/finance/quote/ETH-BTC",
        "https://www.google.com/finance/quote/EUR-USD",
    ],
    "proxyConfiguration": { "useApifyProxy": False },
}

# Run the Actor and wait for it to finish
run = client.actor("fastdataapi/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 '{
  "urls": [
    "https://www.google.com/finance/quote/.DJI",
    "https://www.google.com/finance/quote/SWPPX:MUTF",
    "https://www.google.com/finance/quote/GOOGL:NASDAQ",
    "https://www.google.com/finance/quote/ETH-BTC",
    "https://www.google.com/finance/quote/EUR-USD"
  ],
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}' |
apify call fastdataapi/google-finance-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,fastdataapi/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/8M20DmukgQzi2SHtq/builds/zNQU3s7eMg90dPZ8A/openapi.json
