# Google Trends Scraper: Interest, Rising & Regional (`scrapers_lat/google-trends-scraper`) Actor

Scrape Google Trends for any keyword: interest over time, rising and top related queries, related topics and regional breakdown. Multi-geo, multi-timeframe, web/news/youtube/shopping. Export JSON, CSV, Excel. No API key.

- **URL**: https://apify.com/scrapers\_lat/google-trends-scraper.md
- **Developed by:** [Scrapers Lat](https://apify.com/scrapers_lat) (community)
- **Categories:** Developer tools, SEO tools, Other
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $12.48 / 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/platform/actors/running/actors-in-store#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 Trends Scraper: Interest, Rising & Regional](https://scrapers.lat/banners/google-trends-scraper.png)](https://console.apify.com/actors/IijEh2Ck4BTEXsdM6/input)

## Google Trends Scraper: Interest, Rising & Regional

Here is one real result, with every field the actor returns:

```json
{
  "keyword": "bitcoin",
  "geo": "US",
  "timeframe": "today 12-m",
  "category": 0,
  "gprop": "web",
  "interestOverTime": [
    { "date": "Aug 10, 2025", "timestamp": 1754784000, "value": 36 },
    { "date": "Aug 17, 2025", "timestamp": 1755388800, "value": 29 },
    { "date": "Aug 24, 2025", "timestamp": 1755993600, "value": 29 }
  ],
  "averageInterest": 35.7,
  "peak": { "value": 100, "date": "Feb 1, 2026" },
  "risingQueries": [
    { "query": "how to buy bitcoin safely", "value": 15050, "formattedValue": "Breakout", "risingLabel": "Breakout" },
    { "query": "spacex stock", "value": 1250, "formattedValue": "+1,250%", "risingLabel": "+1,250%" }
  ],
  "topQueries": [
    { "query": "bitcoin price", "value": 100, "formattedValue": "100", "risingLabel": null },
    { "query": "bitcoin today", "value": 19, "formattedValue": "19", "risingLabel": null }
  ],
  "relatedTopics": [],
  "regionalInterest": [
    { "geoCode": "US-WY", "geoName": "Wyoming", "value": 100 },
    { "geoCode": "US-NV", "geoName": "Nevada", "value": 48 },
    { "geoCode": "US-KS", "geoName": "Kansas", "value": 45 }
  ],
  "aiTrendSummary": "Interest in Bitcoin has been declining over the past few weeks, with a recent average interest of 35.7. The peak was recorded on February 1, 2026 at a value of 100.",
  "aiMomentum": "falling",
  "observedAt": "2026-08-15T03:26:20.823Z",
  "error": null
}
```

The most complete Google Trends scraper available. It returns the full interest-over-time series plus the rising and top related queries, related topics and the per-region breakdown for each keyword, adds derived average and peak fields, and gives you five inputs (geo, timeframe, category, Google property, up to five keywords) to target exactly the trend you need.

**📥 [Input](https://apify.com/scrapers_lat/google-trends-scraper/input-schema) · 📤 [Output](https://apify.com/scrapers_lat/google-trends-scraper/output-schema) · 💰 [Pricing](https://apify.com/scrapers_lat/google-trends-scraper/pricing) · ▶️ [Examples](https://apify.com/scrapers_lat/google-trends-scraper/examples)**

![Apify](https://img.shields.io/badge/Platform-Apify-1CE1CE?logo=apify\&logoColor=white)
![Coverage](https://img.shields.io/badge/Coverage-Worldwide-blue)
![Output](https://img.shields.io/badge/Output-JSON%20%7C%20CSV%20%7C%20Excel-orange)
![Billing](https://img.shields.io/badge/Billing-Pay%20per%20result-brightgreen)

### Table of contents

- [What it does](#what-it-does)
- [Quickstart](#quickstart)
- [Input reference](#input-reference)
- [Output reference](#output-reference)
- [Example output record](#example-output-record)
- [Run via API and CLI](#run-via-api-and-cli)
- [Fetch results](#fetch-results)
- [Billing and limits](#billing-and-limits)
- [FAQ and troubleshooting](#faq-and-troubleshooting)
- [More scrapers at scrapers.lat](#more-scrapers-at-scraperslat)

### What it does

Give it up to five keywords and it returns, for each one:

- **Interest over time**: the full normalized 0-100 search-interest series (weekly or the resolution Google uses for your timeframe), with a date and unix timestamp on every point.
- **Average and peak**: the mean interest across the window and the peak value with its date, computed for you.
- **Rising queries**: the searches growing fastest alongside your keyword, including Breakout and percentage-growth labels.
- **Top queries**: the most-searched related queries, ranked 0-100.
- **Related topics**: Google entity topics related to the keyword when Google returns them.
- **Regional interest**: the per-state or per-country breakdown, each region scored 0-100.
- **AI trend summary** (optional): a short plain-language summary and a momentum label (rising, falling, stable or volatile).

It works for any geo (worldwide, a country, or a sub-region), any timeframe from the last hour to the last five years, any Google Trends category, and across Web, News, YouTube, Image and Shopping search. Unlike thin wrappers that break when a single library endpoint changes, this actor performs the real Google Trends token handshake per keyword and degrades gracefully: if one keyword has no data it is reported without a charge and the rest of the run continues.

### Quickstart

Real input example:

```json
{
  "keywords": ["bitcoin", "ethereum"],
  "geo": "US",
  "timeframe": "today 12-m",
  "gprop": "web",
  "withRelated": true,
  "withRegional": true,
  "withAiSummary": true
}
```

Each keyword becomes one row in the dataset. Export the results as JSON, CSV or Excel from the run's dataset.

### Input reference

| Name | Type | Required | Description | Example |
| --- | --- | --- | --- | --- |
| `keywords` | array | yes | Up to 5 search terms. Each returns its own independent 0-100 series and related data. | `["bitcoin", "ethereum"]` |
| `geo` | string | no | Two-letter country code or sub-region code. Empty means Worldwide. | `US`, `GB`, `US-CA` |
| `timeframe` | string | no | Google Trends time range. | `today 12-m`, `now 7-d`, `today 5-y`, `all` |
| `category` | integer | no | Google Trends category id to narrow the topic. 0 means all. | `7` (Finance) |
| `gprop` | string | no | Google surface to measure: web, news, youtube, images, shopping. | `web` |
| `withRelated` | boolean | no | Capture rising and top related queries plus related topics. Paid plans only. Default true. | `true` |
| `withRegional` | boolean | no | Capture the per-region interest breakdown. Paid plans only. Default true. | `true` |
| `withAiSummary` | boolean | no | Add an AI summary and momentum label per keyword. Paid plans only. Default false. | `false` |
| `residentialProxy` | boolean | no | Route through residential IPs instead of the default datacenter pool. | `false` |
| `proxyConfiguration` | object | no | Proxy settings. Defaults to Apify datacenter proxy. | `{ "useApifyProxy": true }` |

### Output reference

| Name | Type | Description |
| --- | --- | --- |
| `keyword` | string | The search term this record covers. |
| `geo` | string | Geo used (region code or "Worldwide"). |
| `timeframe` | string | Time range used. |
| `category` | integer | Category id used. |
| `gprop` | string | Google property used (web, news, youtube, images, shopping). |
| `interestOverTime` | array | Series of `{ date, timestamp, value }`, value normalized 0-100. |
| `averageInterest` | number | Mean interest across the window. |
| `peak` | object | `{ value, date }` of the highest interest point. |
| `risingQueries` | array | Fastest-growing related queries with `formattedValue` and `risingLabel`. |
| `topQueries` | array | Most-searched related queries, each scored 0-100. |
| `relatedTopics` | array | Related Google entity topics when Google returns them (can be empty). |
| `regionalInterest` | array | Per-region breakdown: `{ geoCode, geoName, value }`, value 0-100. |
| `aiTrendSummary` | string | Optional AI summary of the trend. Null unless the AI add-on is on. |
| `aiMomentum` | string | Optional momentum label: rising, falling, stable, volatile. |
| `observedAt` | string | ISO timestamp when the record was captured. |
| `error` | string | Populated only on a failed keyword; that row is never charged. |

### Example output record

```json
{
  "keyword": "ethereum",
  "geo": "US",
  "timeframe": "today 12-m",
  "category": 0,
  "gprop": "web",
  "interestOverTime": [
    { "date": "Aug 10, 2025", "timestamp": 1754784000, "value": 68 },
    { "date": "Aug 17, 2025", "timestamp": 1755388800, "value": 54 }
  ],
  "averageInterest": 40.6,
  "peak": { "value": 100, "date": "Aug 10, 2025" },
  "risingQueries": [
    { "query": "ethereum etf", "value": 4900, "formattedValue": "+4,900%", "risingLabel": "+4,900%" }
  ],
  "topQueries": [
    { "query": "ethereum price", "value": 100, "formattedValue": "100", "risingLabel": null }
  ],
  "relatedTopics": [],
  "regionalInterest": [
    { "geoCode": "US-NY", "geoName": "New York", "value": 100 }
  ],
  "aiTrendSummary": "Interest in Ethereum has been declining over the past few months, with recent values well below the August 2025 peak.",
  "aiMomentum": "falling",
  "observedAt": "2026-08-15T03:26:22.400Z",
  "error": null
}
```

### Run via API and CLI

Start a run with the Apify API:

```bash
curl -X POST "https://api.apify.com/v2/acts/scrapers_lat~google-trends-scraper/runs?token=YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{ "keywords": ["bitcoin", "ethereum"], "geo": "US", "timeframe": "today 12-m", "gprop": "web" }'
```

Or with the Apify CLI:

```bash
apify call scrapers_lat/google-trends-scraper \
  --input '{ "keywords": ["bitcoin"], "geo": "US", "timeframe": "today 12-m" }'
```

### Fetch results

```bash
curl "https://api.apify.com/v2/datasets/DATASET_ID/items?clean=true&format=json&token=YOUR_TOKEN"
```

Swap `format=json` for `format=csv` or `format=xlsx` to download a spreadsheet.

### Billing and limits

This actor is pay per result. You are billed per keyword record, not per run.

| Event | Price (USD) | When it is charged |
| --- | --- | --- |
| `result` | 0.012 | One keyword series returned (interest over time, average, peak). |
| `related` | 0.008 | Rising and top queries plus topics returned for a keyword. |
| `regional` | 0.008 | Per-region breakdown returned for a keyword. |
| `ai_trend_summary` | 0.012 | AI summary and momentum returned for a keyword. |

- **No charge on failure.** A keyword with no data is written as an `error` row and is never billed.
- **Add-ons are opt-in and paid-plan only.** `related`, `regional` and `ai_trend_summary` are disabled for free Apify plans; free runs return the interest-over-time series only.
- **Free plan cap.** Free Apify accounts are capped at 10 records per run (this actor takes up to 5 keywords, so all fit).
- **Spend cap.** Set `maxTotalChargeUsd` on the run and the actor stops emitting billable records once the cap is reached.

### FAQ and troubleshooting

**Why is `relatedTopics` sometimes empty?** Google's related-topics widget frequently returns no entries for a keyword even when related queries exist. When Google returns topics, the field is populated; otherwise it is an empty array. Related queries and regional data are the primary related signals.

**Can I compare keywords head to head?** Each keyword is measured independently on its own 0-100 scale, so you get a clean series per term rather than one keyword normalized against another. Pass several keywords in one run to gather them together.

**Which timeframes are supported?** Anything Google Trends accepts, for example `now 1-H`, `now 7-d`, `today 1-m`, `today 3-m`, `today 12-m`, `today 5-y`, `all`.

**Do I need an API key or login?** No. The actor collects public Google Trends data with no account.

**A keyword returned an error row.** Google rate-limits by IP. The actor rotates proxy sessions and retries automatically; a keyword that still fails is reported without a charge. Re-running usually resolves transient rate limits.

### More scrapers at scrapers.lat

Browse the full catalog of company registry, KYB, licensing, finance and market-signal scrapers at [scrapers.lat](https://scrapers.lat).

# Actor input Schema

## `keywords` (type: `array`):

Search terms to analyze on Google Trends. Up to 5 keywords per run; each returns its own independent 0-100 interest series and related data.

## `geo` (type: `string`):

Two-letter country code (e.g. US, GB, BR, IN) or a sub-region code (e.g. US-CA). Leave empty for Worldwide.

## `timeframe` (type: `string`):

Google Trends time range. Examples: now 1-H, now 7-d, today 1-m, today 3-m, today 12-m, today 5-y, all.

## `category` (type: `integer`):

Google Trends category id to narrow the topic. 0 = all categories (e.g. 7 = Finance, 71 = Food & Drink).

## `gprop` (type: `string`):

Which Google surface to measure search interest on.

## `withRelated` (type: `boolean`):

Add-on. Capture rising and top related queries plus related topics for each keyword. Billed per keyword when related data is returned. Paid Apify plans only.

## `withRegional` (type: `boolean`):

Add-on. Capture the per-region (state/country) interest breakdown for each keyword. Billed per keyword when regional data is returned. Paid Apify plans only.

## `withAiSummary` (type: `boolean`):

Add-on. Generate a short AI summary and momentum label (rising/falling/stable/volatile) per keyword from the series and related queries. Billed per keyword on usable output. Paid Apify plans only.

## `residentialProxy` (type: `boolean`):

Route requests through residential IPs instead of the default datacenter pool. Slower but harder to rate-limit for high-volume runs.

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

Proxy settings. Defaults to Apify datacenter proxy, which is stable for the Google Trends token handshake.

## Actor input object example

```json
{
  "keywords": [
    "bitcoin"
  ],
  "geo": "",
  "timeframe": "today 12-m",
  "category": 0,
  "gprop": "web",
  "withRelated": true,
  "withRegional": true,
  "withAiSummary": false,
  "residentialProxy": false,
  "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 = {
    "keywords": [
        "bitcoin"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("scrapers_lat/google-trends-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 = { "keywords": ["bitcoin"] }

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

```

## MCP server setup

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