# Google Finance Scraper - Most Comprehensive (`kaix/google-finance-scraper`) Actor

🔥 ~$0.1/1K stocks 🔥 Scrape Google Finance for stock quotes, financials, charts, news, and more

- **URL**: https://apify.com/kaix/google-finance-scraper.md
- **Developed by:** [Kai](https://apify.com/kaix) (community)
- **Categories:** E-commerce, Developer tools, Agents
- **Stats:** 23 total users, 6 monthly users, 94.5% runs succeeded, 0 bookmarks
- **User rating**: 5.00 out of 5 stars

## Pricing

from $0.08 / 1,000 stocks

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

## Google Finance Scraper

Collect quotes, company profiles, financial statements, charts, news, and related instruments from Google Finance. The Actor supports stocks, ETFs, indices, crypto, currency pairs, and futures on global exchanges.

### Quote and market coverage

| Group | Available data |
| --- | --- |
| Quote | Price, change, trading range, volume, valuation metrics, market state, currency, and exchange data |
| Company profile | Description, leadership, employees, founding date, headquarters, website, and classification |
| Statements and charts | Quarterly and annual financial periods plus price-and-volume points for the selected chart window |
| News and related instruments | Stock or market articles and related quote records when Google supplies them |
| Discovery | Full instrument records from market pages, short autocomplete results, market movers, indices, and optional earnings events |

Optional sections are present only when you enable them and Google supplies the
data for that instrument.

### Choose a mode

| Goal | Key input | Primary `recordType` |
|---|---|---|
| Collect full instrument records | `stocks` | `stock` |
| Discover instruments on a market page | `searchMarket` | `stock` |
| Find identifiers with autocomplete | `searchTerm` | `search_result` |
| Add upcoming earnings | A primary selector with `includeEarnings: true` | Adds `earnings_calendar` after the primary mode |

If an input contains several primary selectors, `stocks` takes precedence over
`searchMarket`, and `searchMarket` takes precedence over `searchTerm`.

### Look up one or more instruments

```json
{
  "stocks": ["GOOGL:NASDAQ"]
}
```

Add more identifiers to the same `stocks` array when you need several
instruments:

```json
{
  "stocks": [
    "GOOGL:NASDAQ",
    "AAPL:NASDAQ",
    "TSLA:NASDAQ",
    "AMZN:NASDAQ"
  ]
}
```

### Add charts, financials, and news

```json
{
  "stocks": ["GOOGL:NASDAQ"],
  "includeFinancials": true,
  "includeChart": true,
  "includeNews": true
}
```

Use Google Finance identifiers. Examples include `GOOGL:NASDAQ`, `7203:TYO`,
`BTC-USD`, `EUR-USD`, `GCW00:COMEX`, and `CLW00:NYMEX`. Use
`GCW00:COMEX` for gold, not the Yahoo-style identifier `GC=F`. A full Google
Finance quote URL is also accepted.

### Get quote-only records

Disable the large optional sections when you only need quote data:

```json
{
  "stocks": ["GOOGL:NASDAQ"],
  "includeFinancials": false,
  "includeChart": false,
  "includeNews": false,
  "includeRelated": false
}
```

### Discover instruments from a market page

```json
{
  "searchMarket": "gainers",
  "maxSearchResults": 10
}
```

Use `searchTerm` instead when you want short autocomplete results rather than full quote records.

### Look up several asset types

This input requests a stock, crypto pair, currency pair, and gold future. It
also shows that a full Google Finance quote URL is accepted.

```json
{
  "stocks": [
    "https://www.google.com/finance/quote/GOOGL:NASDAQ",
    "BTC-USD",
    "EUR-USD",
    "GCW00:COMEX"
  ],
  "includeFinancials": false,
  "includeChart": false,
  "includeNews": false,
  "includeRelated": false,
  "includeMarketIndices": false,
  "includeMarketMovers": false,
  "includeEstimates": false,
  "includeEarnings": false
}
```

Global exchange identifiers work in the same array. For example:

```json
{
  "stocks": [
    "005930:KRX",
    "7203:TYO",
    "RELIANCE:NSE",
    "VOW3:ETR",
    "0700:HKG"
  ]
}
```

### Find an instrument identifier

Search mode returns short discovery records.

```json
{
  "searchTerm": "GOOGL",
  "maxSearchResults": 1,
  "includeFinancials": false,
  "includeChart": false,
  "includeNews": false,
  "includeRelated": false,
  "includeMarketIndices": false,
  "includeMarketMovers": false,
  "includeEstimates": false,
  "includeEarnings": false
}
```

### Collect market-page news

This input can return a `market_news` record and currency records.

```json
{
  "searchMarket": "currencies",
  "maxSearchResults": 1,
  "includeFinancials": false,
  "includeChart": false,
  "includeNews": true,
  "includeRelated": false,
  "includeMarketIndices": false,
  "includeMarketMovers": false,
  "includeEstimates": false,
  "includeEarnings": false,
  "newsLimit": 2,
  "newsTypes": ["market"]
}
```

### Input reference

Provide at least one of `stocks`, `searchTerm`, or `searchMarket`.

The next example covers every input field. It is a field reference, not a
recommended combination.

<details>
<summary>Open the complete input example</summary>

```json
{
  "stocks": ["GOOGL:NASDAQ"],
  "searchTerm": "Alphabet",
  "searchMarket": "gainers",
  "maxSearchResults": 1,
  "includeFinancials": true,
  "includeChart": true,
  "includeNews": true,
  "includeRelated": true,
  "includeMarketIndices": true,
  "includeMarketMovers": true,
  "includeEstimates": true,
  "includeEarnings": true,
  "newsLimit": 2,
  "newsTypes": ["international", "trending", "market"],
  "moverCategories": ["losers"],
  "chartWindow": "1D",
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

</details>

#### Fields

| Field | Type | Default | Description |
|---|---|---|---|
| `stocks` | string\[] | none | Google Finance URLs or identifiers such as `GOOGL:NASDAQ`, `BTC-USD`, or `GCW00:COMEX`. The Actor keeps the supplied order and duplicates. |
| `searchTerm` | string | none | Autocomplete query. This mode returns `search_result` records, not full stock records. |
| `searchMarket` | enum | `""` | Market page used to discover instruments and full stock records. |
| `maxSearchResults` | integer | `20` | Maximum search or market results. Allowed range: 1 to 100. It does not limit an explicit `stocks` array. |
| `includeFinancials` | boolean | `true` | Add quarterly and annual financial periods when Google provides them. |
| `includeChart` | boolean | `true` | Add price and volume chart data. |
| `includeNews` | boolean | `true` | Add stock news. It also enables category news for supported market pages. |
| `includeRelated` | boolean | `true` | Add the smaller related-stock quote records. |
| `includeMarketIndices` | boolean | `false` | Add regional market-index groups to each stock record. |
| `includeMarketMovers` | boolean | `false` | Add the selected market-mover groups to each stock record. |
| `includeEstimates` | boolean | `false` | Add forward analyst estimates when available. |
| `includeEarnings` | boolean | `false` | Add a separate `earnings_calendar` record after the primary mode. |
| `newsLimit` | integer | `6` | Maximum articles for each selected stock-news type. Allowed range: 1 to 50. Market-category news can contain more items. |
| `newsTypes` | enum\[] | `["stock", "market"]` | Any of `stock`, `market`, `international`, `trending`, `crypto`, and `crypto-general`. |
| `moverCategories` | enum\[] | `["active"]` | Any of `active`, `gainers`, `losers`, and `trending`. Used only when `includeMarketMovers` is true. |
| `chartWindow` | enum | `"1M"` | `1D`, `5D`, `1M`, `6M`, `YTD`, `1Y`, `5Y`, or `MAX`. Used only when `includeChart` is true. |
| `proxyConfiguration` | object | `{"useApifyProxy":true}` | Optional connection settings for the run. |

`searchMarket` accepts `indexes`, `gainers`, `losers`, `most-active`, `trending`, `climate-leaders`, `currencies`, `crypto`, `etfs`, `futures`, `commodities`, `bonds`, `sectors`, `americas`, `europe-middle-east-africa`, `asia-pacific`, and `world`.

### Dataset record reference

The default Dataset contains one of four record types. Use `recordType` to select the correct shape.

| `recordType` | When it appears |
|---|---|
| `stock` | Each instrument from `stocks`, or each instrument discovered with `searchMarket` |
| `search_result` | Each autocomplete result from `searchTerm` |
| `market_news` | Category news from a supported market page when `includeNews` is true |
| `earnings_calendar` | Upcoming earnings events when `includeEarnings` is true and data is available |

Prices, timestamps, news, and other source values can change. Long arrays below
show one item.

#### Stock record

This GOOGL field-shape projection includes quote data and selected optional
sections. It is not a complete record. Each populated child array shows one
item.

<details>
<summary>Open the stock JSON</summary>

```json
{
  "recordType": "stock",
  "ticker": "GOOGL",
  "exchange": "NASDAQ",
  "exchangeName": "NASDAQ",
  "name": "Alphabet Inc Class A",
  "type": "stock",
  "currency": "USD",
  "country": "US",
  "kgMid": "/m/07zln7n",
  "price": 345.9,
  "previousClose": 346.36,
  "open": 346.8,
  "high": 350.45,
  "low": 344.5,
  "change": -0.45999146,
  "changePercent": -0.13280733,
  "fiftyTwoWeekHigh": 408.61,
  "fiftyTwoWeekLow": 196.595,
  "marketCap": 4216998267589.7217,
  "peRatio": 17.377691,
  "dividendYield": 0.2544088,
  "volume": 29455364,
  "avgVolume": 19.90483,
  "beta": 1.2372,
  "sharesOutstanding": 5849460000,
  "sector": "Interactive media",
  "isDelayed": false,
  "lastUpdateTimestamp": 1786753800,
  "timezone": "America/New_York",
  "utcOffset": -14400,
  "brandColor": "#ED161E",
  "afterHours": {
    "price": 347.39,
    "change": 1.4900208,
    "changePercent": 0.43076634,
    "lastUpdateTimestamp": 1786751992
  },
  "marketHours": {
    "open": {
      "year": 2026,
      "month": 8,
      "day": 14,
      "hour": 9,
      "minute": 30
    },
    "close": {
      "year": 2026,
      "month": 8,
      "day": 14,
      "hour": 16
    }
  },
  "baseCurrency": null,
  "quoteCurrency": null,
  "baseName": null,
  "quoteName": null,
  "companyKgMid": "/g/11bwcf511s",
  "nextEarningsDate": {
    "year": 2026,
    "month": 9,
    "day": 4,
    "hour": 4
  },
  "company": {
    "description": "Alphabet Inc. is an American multinational technology conglomerate holding company headquartered in Mountain View, California. It was created through a restructuring of Google on October 2, 2015, and became the parent holding company of Google and several former Google subsidiaries. Alphabet is listed on the large-cap section of the Nasdaq under the ticker symbols GOOGL and GOOG; both classes of stock are components of major stock market indices such as the S&P 500 and Nasdaq-100. Alphabet has been described as a Big Tech company. As of July 2026, it is the third largest publicly traded company in the world by market capitalization.\nThe establishment of Alphabet Inc. was prompted by a desire to make the core Google business \"cleaner and more accountable\" while allowing greater autonomy to group companies that operate in businesses other than Internet services. Founders Larry Page and Sergey Brin announced their resignation from their executive posts in December 2019, with the CEO role to be filled by Sundar Pichai, who is also the CEO of Google. Page and Brin remain employees, board members, and controlling shareholders of Alphabet Inc.",
    "ceo": "Sundar Pichai",
    "employees": 198933,
    "founded": {
      "year": 2015,
      "month": 10,
      "day": 2
    },
    "hq": {
      "city": "Mountain View",
      "state": "California",
      "country": "United States",
      "countryCode": "US",
      "address": "1600 Amphitheatre Parkway"
    },
    "website": "https://abc.xyz/",
    "wikipediaUrl": "https://en.wikipedia.org/wiki/Alphabet_Inc."
  },
  "classification": {
    "labels": [
      {
        "name": "Stock",
        "description": "Ownership of a fraction of a corporation and the right to claim a share of the corporation's assets and profits equal to the amount of stock owned"
      }
    ]
  },
  "financials": {
    "periods": [
      {
        "periodType": "quarterly",
        "fiscalEnd": {
          "year": 2026,
          "month": 6,
          "day": 30
        },
        "currency": "USD",
        "revenue": 119796000000,
        "netIncome": 112193000000,
        "eps": 9.11,
        "operatingMargin": 93.65,
        "operatingIncome": 40770000000,
        "operatingExpense": 17848000000,
        "ebitda": 45943000000,
        "sharesOutstanding": 116976077690,
        "epsDiluted": 9.11,
        "revenueGrowth": 0.024106829068701697,
        "netIncomeGrowth": 2.128982067601125,
        "peRatio": 15.26,
        "cashAndShortTermInvestments": 79026000000,
        "shortTermDebt": 48241000000,
        "returnOnCapital": 19.14,
        "totalAssets": 921983000000,
        "totalLiabilities": 343524000000,
        "totalEquity": 640480000000,
        "currentAssets": 281503000000,
        "intangibleAssets": 12230000000,
        "operatingCashFlow": 39069000000,
        "investingCashFlow": -82433000000,
        "financingCashFlow": 61243000000,
        "dividendsPaid": -6523500000,
        "profitMargin": 50.9,
        "returnOnAssets": 12.54,
        "debtToEquityOrPriceToBook": 6.8047151277013755,
        "freeCashFlow": 126111000000,
        "shareRepurchase": 55911000000,
        "capex": 33083000000
      }
    ]
  },
  "chart": {
    "window": "1D",
    "intervalSeconds": 60,
    "previousClose": 346.36,
    "dataPoints": [
      {
        "timestamp": 1786714200,
        "date": [
          2026,
          8,
          14,
          9,
          30
        ],
        "price": 346.93,
        "change": 0.5699999999999932,
        "changePercent": 0.0016456865688878426,
        "volume": 7072
      }
    ]
  },
  "news": [
    {
      "title": "Instagram promised to remove harassing Meta glasses videos. I keep finding them.",
      "source": "Business Insider",
      "url": "https://www.businessinsider.com/instagram-crackdown-meta-ai-glasses-pickup-rizz-videos-moderation-challenges-2026-8",
      "timestamp": 1786872798,
      "snippet": "Instagram said it would remove harassing videos filmed with Meta AI glasses. Weeks later, dozens remain.",
      "articleId": "1136597525684352992",
      "thumbnailUrl": "https://encrypted-tbn1.gstatic.com/images?q=tbn:ANd9GcTNdAhsNlwUAiFqp4yXoVXEKgvDWXyFEpY3vfR6QLzCzix62IAGRCwb4SCQxLs",
      "thumbnailWidth": 259,
      "thumbnailHeight": 194,
      "relatedTickers": [
        {
          "ticker": "",
          "exchange": "",
          "kgMid": ""
        }
      ],
      "relatedStockQuotes": [
        {
          "ticker": "META",
          "exchange": "NASDAQ",
          "name": "Meta Platforms Inc",
          "price": 589.85,
          "change": -5.119995,
          "changePercent": -0.8605468,
          "kgMid": "/m/0rz9htl"
        }
      ]
    }
  ],
  "relatedStocks": [
    {
      "ticker": "AMZN",
      "exchange": "NASDAQ",
      "name": "Amazon.com Inc",
      "type": "stock",
      "currency": "USD",
      "price": 262.65,
      "change": -2.480011,
      "changePercent": -0.9353943,
      "previousClose": 265.13,
      "kgMid": "/m/07zl90k",
      "afterHours": {
        "price": 263.15,
        "change": 0.5,
        "changePercent": 0.19036742
      }
    }
  ],
  "marketIndices": [
    {
      "region": "US",
      "regionType": 1,
      "indices": [
        {
          "ticker": ".DJI",
          "exchange": "INDEXDJX",
          "name": "Dow Jones Industrial Average",
          "displayName": "Dow Jones",
          "price": 53732.41,
          "change": -107.578125,
          "changePercent": -0.19981083,
          "kgMid": "/m/0cqyw"
        }
      ]
    }
  ],
  "marketMovers": [
    {
      "ticker": "BLSH",
      "exchange": "NYSE",
      "name": "Bullish",
      "price": 24.39,
      "change": -3.0900002,
      "changePercent": -11.244542,
      "kgMid": "/g/11xrmgpntm"
    }
  ],
  "estimates": [
    {
      "fiscalEnd": {
        "year": 2028,
        "month": 12,
        "day": 31
      },
      "periodType": "quarterly",
      "currency": "USD",
      "estimatedRevenue": null,
      "estimatedEps": null,
      "estimatedEpsDiluted": 4.16473,
      "estimatedPeRatio": null
    }
  ]
}
```

</details>

The four currency-pair fields are null for an equity. This BTC example shows their populated form.

```json
{
  "recordType": "stock",
  "ticker": "BTC-USD",
  "exchange": "",
  "exchangeName": "",
  "name": "Bitcoin (BTC / USD)",
  "type": "crypto",
  "currency": "USD",
  "country": null,
  "kgMid": "/g/11bvvxp7st",
  "baseCurrency": "BTC",
  "quoteCurrency": "USD",
  "baseName": "Bitcoin",
  "quoteName": "United States Dollar",
  "company": null,
  "classification": {
    "labels": [
      {
        "name": "Exchange Rate",
        "description": "Value of the base currency compared to the quote currency"
      },
      {
        "name": "Cryptocurrency",
        "description": "A digital asset maintained by a decentralized system that records and verifies transactions using cryptography"
      }
    ]
  }
}
```

##### Stock field reference

Quote and identity fields are present in every `stock` record. Optional sections
are absent when disabled. When enabled, they can be `null` or empty if Google
does not return data.

| Path | JSON type and nullability |
|---|---|
| `recordType` | string; always `stock` |
| `ticker`, `exchange`, `exchangeName`, `name`, `kgMid` | string |
| `type` | `stock`, `index`, `etf`, `crypto`, `currency`, or `commodity` |
| `currency`, `country`, `sector`, `timezone`, `brandColor` | string or `null` |
| `price`, `previousClose`, `open`, `high`, `low`, `change`, `changePercent` | number |
| `fiftyTwoWeekHigh`, `fiftyTwoWeekLow`, `marketCap`, `peRatio`, `dividendYield`, `volume`, `avgVolume`, `beta`, `sharesOutstanding` | number or `null` |
| `isDelayed` | boolean |
| `lastUpdateTimestamp`, `utcOffset` | number |
| `afterHours` | object or `null`; when present, `price`, `change`, `changePercent`, and `lastUpdateTimestamp` are numbers |
| `marketHours` | object or `null`; when present, `open` and `close` are date objects |
| `baseCurrency`, `quoteCurrency`, `baseName`, `quoteName`, `companyKgMid` | string or `null` |
| `nextEarningsDate` | date object or `null` |
| `company` | object or `null` |
| `classification` | object |
| `financials` | optional object or `null` |
| `chart` | optional object or `null` |
| `news` | optional object array or `null` |
| `relatedStocks` | optional object array or `null` |
| `marketIndices` | optional object array or `null` |
| `marketMovers` | optional object array or `null` |
| `estimates` | optional object array or `null` |

| Child object | Field contract |
|---|---|
| Date object | `year`, `month`, and `day` are numbers; `hour` and `minute` are optional numbers. |
| `company` | `description`: string; `ceo`, `website`, and `wikipediaUrl`: string or `null`; `employees`: number or `null`; `founded`: date object or `null`; `hq`: object or `null` |
| `company.hq` | `city`, `state`, `country`, `countryCode`, and `address` are strings. |
| `classification.labels` | Object array; each item has string `name` and `description`. |
| `financials.periods` | Object array using the financial-period contract below. |
| `chart` | `window`: string; `intervalSeconds` and `previousClose`: number; `dataPoints`: object array |
| `chart.dataPoints` | `timestamp`, `price`, `change`, and `changePercent`: number; `date`: number array; `volume`: number or `null` |
| `news` | Each item uses the news-article contract below. |
| `relatedStocks` | Each item uses the related-stock contract below. |
| `marketIndices` | Each item has string `region`, number `regionType`, and an `indices` object array using the market-index contract below. |
| `marketMovers` | Each item uses the market-mover contract below. |
| `estimates` | Each item uses the analyst-estimate contract below. |

| Repeated object | Field contract |
|---|---|
| Financial period | `periodType`: `quarterly` or `annual`; `fiscalEnd`: date object; `currency`: string; `revenue`, `netIncome`, `eps`, `epsDiluted`, `operatingIncome`, `operatingMargin`, `sharesOutstanding`, `totalAssets`, `totalLiabilities`, `totalEquity`, `cashAndShortTermInvestments`, `operatingCashFlow`, `investingCashFlow`, `financingCashFlow`, `capex`, `peRatio`, `profitMargin`, `returnOnAssets`, `revenueGrowth`, and `netIncomeGrowth`: number; `operatingExpense`, `ebitda`, `currentAssets`, `intangibleAssets`, `shortTermDebt`, `freeCashFlow`, `dividendsPaid`, `shareRepurchase`, `returnOnCapital`, and `debtToEquityOrPriceToBook`: number or `null` |
| News article | `title`, `source`, and `url`: string; `timestamp`: number; `snippet`, `articleId`, and `thumbnailUrl`: string or `null`; `thumbnailWidth` and `thumbnailHeight`: number or `null`; `relatedTickers`: object array of string `ticker`, `exchange`, and `kgMid`; `relatedStockQuotes`: object array or `null` |
| News related quote | `ticker`, `exchange`, `name`, and `kgMid`: string; `price`, `change`, and `changePercent`: number |
| Related stock | `ticker`, `exchange`, `name`, `type`, and `kgMid`: string; `currency`: string or `null`; `price`, `change`, `changePercent`, and `previousClose`: number; `afterHours`: object or `null` with number `price`, `change`, and `changePercent` |
| Market index | `ticker`, `exchange`, `name`, and `kgMid`: string; `displayName`: string or `null`; `price`, `change`, and `changePercent`: number |
| Market mover | `ticker`, `exchange`, `name`, and `kgMid`: string; `price`, `change`, and `changePercent`: number |
| Analyst estimate | `fiscalEnd`: date object; `periodType`: `quarterly` or `annual`; `currency`: string; `estimatedRevenue`, `estimatedEps`, `estimatedEpsDiluted`, and `estimatedPeRatio`: number or `null` |

#### Search result record

This example shows an instrument search result.

```json
{
  "recordType": "search_result",
  "ticker": "GOOGL",
  "exchange": "NASDAQ",
  "name": "Alphabet Inc Class A",
  "kgMid": "/m/07zln7n"
}
```

| Field | JSON type and nullability |
|---|---|
| `recordType` | string; always `search_result` |
| `ticker`, `exchange`, `name`, `kgMid` | string |

#### Market news record

Each article has the same field shape as `stock.news[]`. This example keeps one article. Here, `relatedTickers` is an empty array and `relatedStockQuotes` is null.

```json
{
  "recordType": "market_news",
  "market": "currencies",
  "marketCategoryNews": [
    {
      "title": "EUR/USD Churns but Bulls Have So Far Held the Line",
      "source": "FOREX.com",
      "url": "https://www.forex.com/en-us/news-and-analysis/eur-usd-churns-but-bulls-have-so-far-held-the-line/",
      "timestamp": 1786642250,
      "snippet": "It's been a quiet couple of weeks in EUR/USD but so far the levels have remained clean.",
      "articleId": "15423650982462343712",
      "thumbnailUrl": "https://encrypted-tbn2.gstatic.com/images?q=tbn:ANd9GcRwgD8K2mQA0FY1atRzIt2046sNra4AufKbuc5uwRpn81DAgSm6EOQV9JdUNp0",
      "thumbnailWidth": 275,
      "thumbnailHeight": 183,
      "relatedTickers": [],
      "relatedStockQuotes": null
    }
  ]
}
```

| Field | JSON type and nullability |
|---|---|
| `recordType` | string; always `market_news` |
| `market` | string |
| `marketCategoryNews` | object array; each item uses the news-article contract above |

#### Earnings calendar record

This example keeps one event. The calendar can be empty, and the three final fields can be null.

```json
{
  "recordType": "earnings_calendar",
  "earningsCalendar": [
    {
      "ticker": "HD",
      "exchange": "NYSE",
      "companyName": "Home Depot",
      "kgMid": "/m/07zkzvn",
      "year": 2027,
      "quarter": 2,
      "earningsCallTimestamp": 1787058000,
      "earningsReleaseTimestamp": null,
      "investorRelationsUrl": null
    }
  ]
}
```

| Field | JSON type and nullability |
|---|---|
| `recordType` | string; always `earnings_calendar` |
| `earningsCalendar` | object array; it can be empty |
| `earningsCalendar[].ticker`, `exchange`, `companyName`, `kgMid` | string |
| `earningsCalendar[].year`, `quarter` | number |
| `earningsCalendar[].earningsCallTimestamp`, `earningsReleaseTimestamp` | number or `null` |
| `earningsCalendar[].investorRelationsUrl` | string or `null` |

### Mode and result behaviour

- If one result fails, the Actor still completes successfully and keeps valid
  records from the other instruments. If all explicit stocks or all discovered
  market instruments fail, the run can complete with no stock records.
- A valid run can finish with an empty Dataset when a stock identifier or
  search term has no matching instrument. A market page can also return no
  stock records. Check the identifier format or use a broader search term.

# Actor input Schema

## `stocks` (type: `array`):

Google Finance page URLs or identifiers. Formats: TICKER:EXCHANGE (GOOGL:NASDAQ, 7203:TYO), crypto (BTC-USD, ETH-USD), currencies (EUR-USD), futures (GCW00:COMEX for Gold, CLW00:NYMEX for Oil), or full URLs (https://www.google.com/finance/quote/GOOGL:NASDAQ). Note: Use Google Finance ticker format, not Yahoo (GCW00:COMEX not GC=F).

## `searchTerm` (type: `string`):

Search Google Finance autocomplete and return lightweight instrument discovery records. Use this instead of stock identifiers or a market page.

## `searchMarket` (type: `string`):

Discover instruments from one Google Finance market page, then fetch full quote records. Use this instead of stock identifiers or a search term.

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

Maximum number of stocks to return from search or market page.

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

Include income statement, balance sheet, and cash flow data (quarterly + annual).

## `includeChart` (type: `boolean`):

Include a price-and-volume chart with configurable time range.

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

Include news headlines, sources, snippets, thumbnails, and related stock quotes.

## `includeRelated` (type: `boolean`):

Include related and similar stocks with full quote data.

## `includeMarketIndices` (type: `boolean`):

Include global market indices (US, Europe, Asia, Currencies, Crypto, Futures). Same data appears on every stock page.

## `includeMarketMovers` (type: `boolean`):

Include top gainers, losers, and trending stocks. Same data appears on every stock page.

## `includeEstimates` (type: `boolean`):

Include analyst forward estimates (EPS projections for up to 18 future quarters).

## `includeEarnings` (type: `boolean`):

Include upcoming earnings events with call times, release times, and IR URLs.

## `newsLimit` (type: `integer`):

Maximum number of news articles per type. Default 6.

## `newsTypes` (type: `array`):

Which news editorial buckets to fetch. Each type returns different articles.

## `moverCategories` (type: `array`):

Which market mover categories to include. Multiple can be combined.

## `chartWindow` (type: `string`):

Time range for chart data. 1D gives intraday prices; other windows give daily price-and-volume points.

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

Apify proxy configuration. Residential proxies recommended for best results.

## Actor input object example

```json
{
  "stocks": [
    "https://www.google.com/finance/quote/GOOGL:NASDAQ"
  ],
  "maxSearchResults": 20,
  "includeFinancials": true,
  "includeChart": true,
  "includeNews": true,
  "includeRelated": true,
  "includeMarketIndices": false,
  "includeMarketMovers": false,
  "includeEstimates": false,
  "includeEarnings": false,
  "newsLimit": 6,
  "newsTypes": [
    "stock",
    "market"
  ],
  "moverCategories": [
    "active"
  ],
  "chartWindow": "1M",
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# 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 = {
    "stocks": [
        "https://www.google.com/finance/quote/GOOGL:NASDAQ"
    ],
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("kaix/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 = {
    "stocks": ["https://www.google.com/finance/quote/GOOGL:NASDAQ"],
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("kaix/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 '{
  "stocks": [
    "https://www.google.com/finance/quote/GOOGL:NASDAQ"
  ],
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call kaix/google-finance-scraper --silent --output-dataset

```

## MCP server setup

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