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

Collect public Google Finance quotes, market statistics, company facts, related stocks, news headlines, and investor outlook.

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

## Pricing

from $3.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.

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

### What does Google Finance Scraper do?

Google Finance Scraper collects public quote and company information from [Google Finance](https://www.google.com/finance/): prices, market statistics, fundamentals, company facts, related stocks, news headlines, and investor outlook. Each dataset row represents a real quote; failed, empty, or blocked pages are logged and summarized separately.

The Actor reads public pages only. It does not sign in, fetch linked news articles, use private endpoints, solve CAPTCHAs, or bypass access boundaries.
It extracts the quote-page Overview and its visible investor-outlook summary. Google Finance also exposes separate Analysis, Earnings, Financials, and Holdings tabs; this Actor does not currently navigate those tabs or include their tables in each quote record.

### Why use Google Finance Scraper?

Use it to monitor listed instruments, compare related stocks, collect public company facts, and feed quote snapshots into spreadsheets or analytics pipelines. A run accepts several ticker/exchange pairs or public quote URLs and emits one deduplicated row per instrument.

Apify provides scheduled runs, API access, run history, and dataset exports. The Actor reads one public quote page per requested instrument. JavaScript rendering can be enabled to make one bounded request to the same quote page when direct HTML omits rich finance fields; it is disabled by default.

### What data can Google Finance Scraper extract?

Fields are included only when the quote page exposes a usable value. Nested arrays and objects keep the source's related items grouped as JSON instead of flattening them into text.

| Fields | Type | Description |
|---|---|---|
| `ticker`, `exchange`, `symbol`, `companyName` | strings | Quote identity and displayed instrument name. `exchange` is omitted for source identifiers such as currency pairs when Google does not provide an exchange. |
| `quotePageUrl`, `canonicalQuoteUrl` | URLs | Public Google Finance links for the quote. |
| `currentPrice`, `currentPriceText`, `priceCurrency` | number, strings | Numeric price, displayed price text, and displayed currency code. |
| `changeAmount`, `changePercent`, `dayChangeText`, `marketStatus` | number, strings | Session change and the page's market-status label when shown. |
| `afterHoursPrice`, `afterHoursChangeAmount`, `afterHoursChangePercent`, `afterHoursTimeText` | numbers, string | After-hours quote values and the displayed time label when the page exposes them; the time is kept as text without fabricating a date or timezone. |
| `quoteTimestamp`, `quoteTimestampText` | ISO date-time, string | A normalized timestamp is emitted only when the page supplies a year and timezone; otherwise the exact displayed time remains in `quoteTimestampText`. |
| `previousClose`, `open`, `high`, `low` | numbers | Previous close and session price statistics. |
| `marketCap`, `averageVolume`, `volume` | numbers | Market capitalization and trading-volume statistics. |
| `dividendYield`, `quarterlyDividend`, `exDividendDate` | number, number, string | Dividend information shown on the page. |
| `peRatio`, `eps`, `beta` | numbers | Valuation and risk metrics shown on the page. |
| `week52High`, `week52Low`, `sharesOutstanding` | numbers | Annual price range and shares outstanding. |
| `employeeCount`, `ceo`, `founded`, `headquarters`, `sector`, `website` | numbers, strings, URL | Public company profile facts. |
| `companyDescription`, `companyDescriptionHtml` | string | Complete company overview text and sanitized source HTML, without prose truncation. HTML preserves paragraphs, lists and emphasis, with controls, active content and all attributes removed; it is omitted if only the text fallback is available. |
| `relatedStocks[]` | array of objects | Related instruments with identity, normalized price/change, the exact displayed price/change text, currency, and quote-page link. |
| `newsStories[]` | array of objects | Visible headline, publisher, publication text, article link, image link, and publisher domain when present. Linked articles are not fetched. |
| `analysisOutlook` | object | Bullish, neutral, and bearish percentages shown in the page outlook. |

Run totals and source-access information are available separately from quote records in the Output tab.

### How to scrape Google Finance

1. Open the Actor's Input tab.
2. Enter ticker/exchange pairs, or provide Google Finance quote URLs.
3. Set a quote limit and choose whether to include company profile fields.
4. Start the run and review the dataset and run summary.

When both `startUrls` and ticker queries are supplied, `startUrls` take precedence, including when all supplied URLs are invalid (the Actor reports them instead of scraping a different default symbol). A supplied `query` alias overrides the default `queries` list; `maxResults` overrides `maxItems`. `useBrowser: true` enables the same bounded rendered-page fallback as `renderJavaScript: true`. `maxItems` is a global cap across unique quote symbols. This Actor reads one quote page per symbol and does not paginate quote pages; `page` and `maxPages` are therefore fixed at 1. `proxyConfiguration` is accepted for schema compatibility but ignored because this Actor uses direct public-page requests.

### How much will it cost to scrape Google Finance?

Apify charges depend on your platform plan and the run's compute use; this Actor does not set a fixed per-quote price. More requested symbols and optional rendered-page enrichment can increase run duration and compute use.

### Input

See the input tab for the complete configuration.

```json
{
  "queries": ["GOOGL:NASDAQ", "AAPL:NASDAQ"],
  "maxItems": 2,
  "includeCompanyProfile": true
}
```

```json
{
  "startUrls": [
    { "url": "https://www.google.com/finance/quote/GOOGL:NASDAQ?hl=en" },
    { "url": "https://www.google.com/finance/quote/AAPL:NASDAQ?hl=en" }
  ],
  "maxItems": 2,
  "renderJavaScript": true
}
```

| Input | Type | Default and behavior |
|---|---|---|
| `queries` | array of strings | Defaults to `GOOGL:NASDAQ`; ticker-only values use `defaultExchange`. |
| `query` | string | Alias for one query; overrides the default `queries` list when provided. |
| `startUrls` | array of `{ "url": string }` objects | Optional Google Finance quote URLs; takes precedence over `queries`. |
| `defaultExchange` | string | `NASDAQ`; appended to ticker-only queries. |
| `maxItems` | integer, 1–100 | `25`; global limit on unique quote rows. |
| `page` | integer, fixed at 1 | This source does not expose numbered quote pages. |
| `maxPages` | integer, fixed at 1 | One quote page is read per symbol; `maxItems` limits the number of symbols. |
| `proxyConfiguration` | object, optional | Accepted for compatibility but ignored; no proxy is used. |
| `maxResults` | integer, 1–100 | Alias for `maxItems`; overrides it when provided. |
| `includeCompanyProfile` | boolean | `true`; include profile facts and overview text when disclosed. |
| `renderJavaScript` | boolean | `false`; optionally permits a bounded rendered-page request to fill missing fields from the same quote page. |
| `useBrowser` | boolean | `true` also enables the rendered-page fallback. |

### Output

You can download the dataset in various formats such as JSON, HTML, CSV, or Excel.

Each row is a quote entity, and optional fields are omitted when the target does not disclose them. Here is a shortened example based on a saved public quote snapshot; live market values change. Arrays are shortened for display.

```json
{
  "ticker": "GOOGL",
  "exchange": "NASDAQ",
  "symbol": "GOOGL:NASDAQ",
  "companyName": "Alphabet Inc Class A",
  "quotePageUrl": "https://www.google.com/finance/quote/GOOGL:NASDAQ?hl=en",
  "canonicalQuoteUrl": "https://www.google.com/finance/quote/GOOGL:NASDAQ?hl=en",
  "currentPrice": 355.54,
  "currentPriceText": "$355.54",
  "priceCurrency": "USD",
  "changeAmount": 6,
  "changePercent": 1.72,
  "dayChangeText": "(+6.00) Today",
  "quoteTimestamp": "2026-09-21T17:09:30.000Z",
  "quoteTimestampText": "Sep 21, 1:09:30 PM UTC-4",
  "previousClose": 349.54,
  "open": 350.64,
  "high": 357.61,
  "low": 349.1,
  "marketCap": 4320000000000,
  "averageVolume": 23760000,
  "volume": 13430000,
  "dividendYield": 0.25,
  "quarterlyDividend": 0.22,
  "exDividendDate": "Sep 4, 2026",
  "peRatio": 17.87,
  "week52High": 408.61,
  "week52Low": 235.84,
  "eps": 19.9,
  "beta": 1.22,
  "sharesOutstanding": 5870000000,
  "employeeCount": 199000,
  "ceo": "Sundar Pichai",
  "founded": "Oct 2, 2015",
  "headquarters": "Mountain View, California, United States",
  "sector": "Interactive media",
  "website": "https://abc.xyz/",
  "relatedStocks": [
    {
      "ticker": "AMZN",
      "exchange": "NASDAQ",
      "symbol": "AMZN:NASDAQ",
      "companyName": "Amazon.com Inc",
      "currentPrice": 258.06,
      "currentPriceText": "$258.06",
      "priceCurrency": "USD",
      "changePercent": 1.71,
      "changePercentText": "+1.71%",
      "quotePageUrl": "https://www.google.com/finance/quote/AMZN:NASDAQ?hl=en"
    }
  ],
  "newsStories": [
    {
      "publisher": "Investing.com India",
      "headline": "Meta, Alphabet and SpaceX: frontier model upside compared By Investing.com",
      "articleUrl": "https://in.investing.com/news/stock-market-news/meta-alphabet-and-spacex-frontier-model-upside-compared-93CH-5600074",
      "sourceDomain": "in.investing.com"
    }
  ],
  "analysisOutlook": {
    "summary": "Outlook: 34.3% bullish · 60.8% neutral · 4.9% bearish",
    "bullishPercent": 34.3,
    "neutralPercent": 60.8,
    "bearishPercent": 4.9
  }
}
```

If Google returns an empty, unavailable, or access-controlled page, no quote record is added. The run summary and logs report the issue.

### Tips and advanced options

- Use `ticker:EXCHANGE` when the desired market is not the configured default.
- Start with a modest `maxItems` value, then raise it as needed.
- Set `renderJavaScript` to `true` when the public page’s rendered quote cards or profile facts are needed. It reads the same public quote page.
- Related stocks are capped at 10 per quote and news stories at 20. The Actor does not follow quote or article links for enrichment.
- Missing statistics remain absent; the Actor does not substitute zeros or estimate undisclosed values.

### FAQ, support, and responsible use

**Why is a quote missing?** The instrument may not resolve, the page may not show a supported quote, or Google may return an access boundary. Check the run summary and logs. A blocked response stops that source; no bypass is attempted.

**Where can I see a failed request?** Check the run summary and Apify logs. Dataset records contain quote, market, company, related-stock, and visible news information.

**Does this Actor fetch linked articles or use a proxy?** No. It reads the public Google Finance quote page and records displayed news-card links without fetching those articles. `proxyConfiguration` is accepted for schema compatibility but ignored; requests are made directly.

For support, use the Actor's Issues tab and include the run ID and affected symbol. Google Finance data may be delayed, incomplete, or revised. Respect Google's terms and applicable privacy and data-use requirements. This Actor is independent and is not affiliated with Google.

# Actor input Schema

## `queries` (type: `array`):

Ticker symbols such as GOOGL:NASDAQ or AAPL:NASDAQ. A default exchange is added when omitted.

## `query` (type: `string`):

Alias for one ticker or quote query. When supplied, this value takes precedence over queries.

## `startUrls` (type: `array`):

Public Google Finance quote URLs such as /finance/quote/GOOGL:NASDAQ.

## `defaultExchange` (type: `string`):

Exchange appended to ticker-only queries.

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

Global limit on unique quote records emitted.

## `page` (type: `integer`):

Fixed at 1 because each ticker has one public quote page rather than numbered result pages.

## `maxPages` (type: `integer`):

Fixed at 1; the Actor reads one quote page per symbol and does not paginate quote pages.

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

Compatibility-only field. This Actor makes ordinary direct requests and ignores proxy settings.

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

Alias for maxItems; when supplied, this value takes precedence over maxItems.

## `includeCompanyProfile` (type: `boolean`):

Include public company facts such as website, headquarters, sector, CEO, employee count, and profile description when Google Finance discloses them.

## `renderJavaScript` (type: `boolean`):

Optionally render the same public quote page when direct HTML lacks quote or rich finance fields. Disabled by default; access boundaries are respected.

## `useBrowser` (type: `boolean`):

Alias that enables the rendered-page fallback when set to true.

## Actor input object example

```json
{
  "queries": [
    "GOOGL:NASDAQ"
  ],
  "defaultExchange": "NASDAQ",
  "maxItems": 25,
  "page": 1,
  "maxPages": 1,
  "includeCompanyProfile": true,
  "renderJavaScript": false,
  "useBrowser": false
}
```

# Actor output Schema

## `dataset` (type: `string`):

No description

## `runSummary` (type: `string`):

No description

## `runHealth` (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 = {};

// Run the Actor and wait for it to finish
const run = await client.actor("googleapi/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 = {}

# Run the Actor and wait for it to finish
run = client.actor("googleapi/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 '{}' |
apify call googleapi/google-finance-scraper --silent --output-dataset

```

## MCP server setup

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