# Google Trends Scraper (`siftdata/google-trends-scraper`) Actor

Reliable Google Trends scraper: interest over time, interest by region, related queries and topics (top + rising) and Trending Now. Batch thousands of keywords or compare up to 5.

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

## Pricing

from $2.50 / 1,000 trends results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Google Trends Scraper

**Reliable Google Trends data at scale.** For every keyword you get interest over time, interest by region, related queries (top and rising, including *Breakout*) and summary stats, plus today's **Trending Now** searches with news articles. Run thousands of keywords in one go, or compare up to 5 against each other.

It's built to finish every run: automatic retries, session and IP rotation when Google rate-limits, and a clear list of anything that failed. You won't get silent timeouts or empty runs.

### What does this Google Trends scraper do?

- 📈 **Interest over time**: the full 0–100 timeline for any period, from the past hour to 2004–present, or custom dates.
- 🧮 **Summary stats on every keyword**: average interest, latest value, peak date, and **trend change %**, which compares the first and last quarter of the period. You can sort thousands of keywords by growth right away.
- 🗺️ **Interest by region**: countries, states or regions, cities, or US metro areas (DMA).
- 🔎 **Related queries**: top and rising searches, with growth values like `+1,600%` or `Breakout`.
- 🔥 **Trending Now**: today's trending searches for any country, with approximate traffic and related news stories.
- ⚖️ **Compare mode**: up to 5 keywords on the same scale, exactly like Google Trends' compare view.
- 🧭 **Filters**: location, time range, category, and Google property (Web, Images, News, Shopping, YouTube).
- 🔁 **Built for reliability**: rotating residential sessions, exponential backoff, partial results instead of failures, and a run summary that lists every keyword that failed.

### Who uses it?

- **SEO and content teams** find rising topics and seasonal peaks before they plan content.
- **Marketers and e-commerce sellers** check product demand, seasonality and which regions to target.
- **Analysts and investors** track brand and category interest over time.
- **Agencies** build client reports and competitor comparisons.
- **AI agents and automations (MCP, n8n, Make, Zapier)** get fresh trend data inside workflows.

### How to use it

1. Click **Try for free**.
2. Add your **Keywords**, for example `chatgpt` or `air fryer`. You can add hundreds or thousands.
3. Choose a **Location** (`US`, `GB`, `DE`, `NO`, or empty for worldwide) and a **Time range**.
4. Optional:
   - Turn on **Compare keywords** to put up to 5 on the same scale.
   - Add **Trending Now countries** to also get today's trending searches.
5. Click **Start**, then download the results as JSON, CSV, Excel or HTML, or fetch them via the API.

Tip: sort single-keyword results by `summary.trendChangePercent` to find the fastest-growing keywords in your list.

### Input example

```json
{
    "keywords": ["chatgpt", "claude ai", "gemini"],
    "geo": "US",
    "timeRange": "today 12-m",
    "includeRegions": true,
    "includeRelatedQueries": true,
    "trendingNowGeos": ["US", "GB"]
}
```

### Output example (single keyword)

```json
{
    "type": "keyword",
    "keyword": "chatgpt",
    "geo": "US",
    "timeRange": "today 12-m",
    "property": "web",
    "summary": {
        "average": 79,
        "latest": 81,
        "peakValue": 100,
        "peakDate": "2025-10-19",
        "trendChangePercent": -20
    },
    "timeline": [
        { "date": "2025-09-21", "timestamp": 1758412800, "value": 97, "isPartial": false }
    ],
    "regions": [
        { "geoCode": "US-CA", "geoName": "California", "value": 100 }
    ],
    "relatedQueries": {
        "top": [{ "query": "chatgpt login", "value": 100, "formattedValue": "100" }],
        "rising": [{ "query": "codex", "value": 1600, "formattedValue": "+1,600%" }]
    },
    "exploreUrl": "https://trends.google.com/trends/explore?q=chatgpt&date=today+12-m&geo=US",
    "errors": [],
    "scrapedAt": "2026-09-25T16:30:00.000Z"
}
```

**Compare mode** returns `"type": "comparison"`. Its timeline values are keyed by keyword (for example `{"nike": 70, "adidas": 41}`), and it includes per-keyword `summaries` and `related` queries.

**Trending Now** items look like this:

```json
{
    "type": "trending",
    "geo": "NO",
    "rank": 1,
    "title": "beskytterskap",
    "approxTraffic": "200+",
    "publishedAt": "2026-09-25T15:10:00.000Z",
    "news": [{ "title": "…", "url": "https://…", "source": "Dagbladet" }]
}
```

Each run also saves a summary in the `OUTPUT` record: how many reports succeeded, any failed keywords with the reason, partial reports, and request statistics.

### How much does it cost?

Pricing is **pay per result**: one result is one keyword report, one comparison report, or one Trending Now search. **Proxy and platform costs are included**, so you won't get surprise bills. See the **Pricing** tab for the current price and plan discounts. The Apify free plan includes monthly credit, which is enough to try it.

### Integrations and API

- **API and clients**: start runs and fetch results from Python, JavaScript or any HTTP client.
- **Schedules**: track keywords daily or weekly and build your own trend history.
- **Zapier, Make, n8n, Google Sheets, Slack, webhooks**: through Apify integrations.
- **AI agents (MCP)**: works through the Apify MCP server, so Claude, Cursor and other agents can pull Google Trends data on demand.

### FAQ

**Why are values between 0 and 100?**
Google Trends reports relative interest. 100 is the peak popularity for the chosen keyword(s), location and period, not absolute search volume. In compare mode, all keywords share one scale.

**Why do some reports have entries in `errors`?**
If one part of a report, such as regions, couldn't be fetched after all retries, you still get the rest of the report. The `errors` field shows what was missing. Keywords that failed completely are listed in the run's `OUTPUT` summary, and you are not charged for them.

**Why are related topics usually empty?**
Google currently returns related-topics data for very few searches, so it's **off by default**. Related queries work normally.

**Why is the last timeline point marked `isPartial`?**
That period hasn't ended yet (for example the current week), so its value can still change. Summary stats ignore partial points.

**How many keywords can I run?**
As many as you need. Runs process keywords in parallel with rate-limit protection. Increase **Parallel requests** to go faster, or lower it if you see many retries.

**Do I need my own proxies?**
No. Residential proxies are used by default and included in the price.

**Something doesn't work?**
Open an issue in the **Issues** tab. We reply fast and fix breakages quickly.

# Actor input Schema

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

Search terms to analyze. Add as many as you like. Each keyword gets its own full report (interest over time, regions, related queries and topics).

## `compareKeywords` (type: `boolean`):

Compare keywords in groups of up to 5 (like typing them together on Google Trends), so values are relative to each other. Off = each keyword is analyzed on its own.

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

Country or region code, e.g. US, GB, DE, NO, US-CA. Leave empty for worldwide.

## `timeRange` (type: `string`):

Period to analyze. Use Custom time range below for exact dates.

## `customTimeRange` (type: `string`):

Overrides Time range. Format: "YYYY-MM-DD YYYY-MM-DD", e.g. "2025-01-01 2025-06-30".

## `property` (type: `string`):

Where searches happened.

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

Google Trends category ID (0 = all categories). Examples: 3 Arts & Entertainment, 5 Computers & Electronics, 7 Finance, 12 Business & Industrial, 71 Food & Drink.

## `includeTimeline` (type: `boolean`):

Timeline of search interest (0–100) plus summary stats (average, peak, trend change).

## `includeRegions` (type: `boolean`):

Search interest by country/state/city.

## `includeRelatedQueries` (type: `boolean`):

Top and rising related searches (including Breakout).

## `includeRelatedTopics` (type: `boolean`):

Top and rising related topics. Note: Google currently returns this data for few searches, so it is off by default.

## `regionResolution` (type: `string`):

Level of detail for Interest by region. Auto uses Google's default for the location.

## `trendingNowGeos` (type: `array`):

Also fetch today's trending searches (with traffic and news articles) for these countries, e.g. US, GB, NO.

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

Interface language for topic names, e.g. en-US, de, fr, nb.

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

How many keywords to process at once. Higher is faster but more likely to be rate-limited by Google.

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

Google rate-limits aggressively. Residential proxies are strongly recommended and used by default.

## Actor input object example

```json
{
  "keywords": [
    "chatgpt",
    "claude ai"
  ],
  "compareKeywords": false,
  "geo": "US",
  "timeRange": "today 12-m",
  "property": "",
  "category": 0,
  "includeTimeline": true,
  "includeRegions": true,
  "includeRelatedQueries": true,
  "includeRelatedTopics": false,
  "regionResolution": "",
  "language": "en-US",
  "maxConcurrency": 3,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# Actor output Schema

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

Keyword reports, comparisons and Trending Now searches.

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

Succeeded and failed keywords, partial reports and request statistics.

# 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": [
        "chatgpt",
        "claude ai"
    ],
    "geo": "US"
};

// Run the Actor and wait for it to finish
const run = await client.actor("siftdata/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": [
        "chatgpt",
        "claude ai",
    ],
    "geo": "US",
}

# Run the Actor and wait for it to finish
run = client.actor("siftdata/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": [
    "chatgpt",
    "claude ai"
  ],
  "geo": "US"
}' |
apify call siftdata/google-trends-scraper --silent --output-dataset

```

## MCP server setup

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