# Google Trends Scraper - Multi-Country Reports & Insights (`skydata/google-trends-scraper`) Actor

Google Trends scraper for many keywords and countries: interest over time, by region, rising searches, insights, ONE scale for 50+ keywords with ranking, and weekly what's-new monitoring. Pay only for reports with data.

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

## Pricing

from $3.00 / 1,000 trends reports

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

### 📈 What does Google Trends Scraper do?

**Google Trends Scraper** gets Google Trends data for **many keywords and many countries in one run** and turns it into answers you can use right away:

- 📊 **Interest over time**: Google's 0–100 interest index for every day, week or month
- 🗺️ **Interest by region**: countries, states, cities or US metro areas ranked by interest
- 🔎 **Top & rising searches**: what people search together with your keyword, with **Breakout** searches flagged
- 💡 **Ready insights**: rising / stable / falling, % change, peak date and month, best months of the year, breakout list
- 🏆 **ONE scale for 50+ keywords**: Google only compares 5 at a time. This Actor chains them so **all your keywords share one 0–100 scale**, and gives you a **ranking**
- 🔔 **What's new monitoring**: run it weekly and get only what changed: new Breakout searches, new rising searches, % change since last run

**💸 You only pay for reports that contain data.** Blocked, empty or failed lookups are always free.

### 👥 Who is it for?

| You are… | You use it to… |
|---|---|
| 🛒 **E-commerce seller / dropshipper** | Find products with rising demand and know the best months to stock up and advertise |
| ✍️ **SEO & content marketer** | Catch rising and Breakout searches before competitors write about them |
| 📢 **Agency** | Compare markets for clients across many countries in one run, and export to Excel or Sheets |
| 📈 **Analyst / researcher** | Pull clean, structured time series for dashboards and models |
| 🤖 **AI agent / developer** | Give your LLM workflow fresh trend data through the API or MCP |

### ⭐ Why choose this one?

| | This Actor | Typical Trends scrapers |
|---|---|---|
| Many keywords **×** many countries in one run | ✅ | Often one location per run |
| **50+ keywords on ONE comparable scale** + ranking | ✅ | Max 5, or separate scales |
| **What's new since last run** (monitoring) | ✅ | ❌ |
| Ready insights (trend, peak, best months, breakouts) | ✅ | Raw numbers only |
| Charged only when a report has real data | ✅ | Often charged for empty results |
| Detects Google's silent "empty" blocks | ✅ | Can return blank data that looks real |
| Automatic session + residential IP rotation | ✅ | Varies |
| Clear status per report (`ok`, `partial`, `no_data`, `failed`) | ✅ | Rare |

### 🚀 How to use it

1. Add your **keywords** (e.g. `air fryer`, `standing desk`).
2. Add **locations** as country codes (`US`, `GB`, `IN`, `BR` …) or region codes (`US-CA`). Leave an empty line for **Worldwide**.
3. Choose a **time range**: past hour up to 2004–today, or a custom `YYYY-MM-DD YYYY-MM-DD`.
4. Optional: pick a **Comparison mode**: separate reports, groups of 5, or **ONE scale for all keywords** (+ ranking).
5. Optional: turn on **Monitor changes** and schedule the Actor (e.g. weekly) to get a `changes` section and a `CHANGES_SUMMARY`.
6. Click **Start**, then download as **JSON, CSV, Excel or HTML**, or use the API, schedules, webhooks, Zapier, Make, Google Sheets or MCP.

Every keyword is checked in every location: **3 keywords × 4 countries = 12 reports**.

💡 Want a head start? Open the **Example tasks** tab for ready-made setups (one click to run), e.g. common research jobs with the inputs already filled in.

### 🏆 ONE scale for many keywords

Google Trends compares at most 5 keywords at once, and every comparison has its own 0–100 scale, so numbers from different comparisons don't match.
With **Comparison mode = ONE scale for all keywords**, every group of 5 shares one **anchor keyword**. The Actor uses it to put **all keywords on one common scale**, then adds a `ranking`:

```json
"ranking": [
  { "rank": 1, "keyword": "python", "average": 30.2, "latestValue": 16.5, "trend": "falling", "changePercent": -26.6 },
  { "rank": 2, "keyword": "rust", "average": 15.2, "latestValue": 11.5, "trend": "stable", "changePercent": 0 }
]
```

Tip: choose an **anchor keyword** with medium, steady interest for the most precise results. Charged per Google comparison used (1 per anchor + up to 4 keywords).

### 🔔 What's new monitoring

Turn on **Monitor changes**, give the monitor a **name**, and run the Actor on a **schedule** (daily or weekly). From the second run on, every report gets a `changes` section:

```json
"changes": {
  "previousRunAt": "2026-11-01T01:19:35Z",
  "keywords": {
    "electric bike": {
      "notable": true,
      "newBreakouts": ["fat tire electric bike"],
      "newRisingQueries": ["electric bike rebate"],
      "latestValueBefore": 55, "latestValueNow": 59,
      "changeSinceLastRunPercent": 7.3,
      "topRegionBefore": "Texas", "topRegionNow": "California"
    }
  }
}
```

The notable changes of a run are also saved as `CHANGES_SUMMARY` in the run's key-value store. Connect it to Slack, email or a webhook with Apify integrations.

### 📦 Example output (shortened)

```json
{
  "keywords": ["electric bike"],
  "location": "US",
  "timeframe": "today 12-m",
  "status": "ok",
  "insights": {
    "electric bike": {
      "trend": "stable",
      "changePercent": 15.5,
      "average": 30.6,
      "peakValue": 100,
      "peakDate": "2026-04-12T00:00:00Z",
      "peakMonth": "Apr",
      "latestValue": 13,
      "breakoutQueries": ["yozma in 10"]
    }
  },
  "interestOverTime": {
    "electric bike": [ { "date": "2026-04-12T00:00:00Z", "value": 100, "isPartial": false } ]
  },
  "interestByRegion": {
    "electric bike": [ { "geoCode": "US-CA", "geoName": "California", "value": 21 } ]
  },
  "relatedQueries": {
    "electric bike": {
      "top": [ { "query": "electric dirt bike", "value": 100 } ],
      "rising": [ { "query": "fat tire electric bike", "formattedValue": "+250%", "breakout": false } ]
    }
  }
}
```

`bestMonths` (the 3 strongest months of the year) is added when the time range covers **2 years or more**, so it reflects a real pattern and not one unusual season.

### 💰 Pricing

Pay per **report with data**: one keyword (or one compared group of up to 5) in one location. In ONE scale mode you pay per Google comparison used.

- 5 keywords × 4 countries = 20 reports
- Reports with `no_data` or `failed` status are **never charged**
- Platform usage is included: no extra compute or proxy costs

**$3.00 per 1,000 reports** ($0.003 each), plus a tiny run-start fee (a small fraction of a cent per run). See the **Pricing** tab.

### 🤖 Use it with AI agents

Works as a tool for AI agents (Claude, ChatGPT, Cursor and others) through the [Apify MCP server](https://mcp.apify.com), and with Zapier, Make, n8n and the Apify API.

### 🧰 More from SkyData Tools

- 🔍 **[Google Ads Transparency Scraper](https://apify.com/skydata/google-ads-transparency-scraper)**: competitor ad reports, likely winning ads, countries, alerts
- 🎬 **[YouTube Transcript Scraper](https://apify.com/skydata/youtube-transcript-scraper)**: channels, playlists and search, AI-ready chunks, phrase search
- ⭐ **[App Reviews Scraper](https://apify.com/skydata/app-reviews-scraper)**: App Store + Google Play reviews with complaint reports and alerts
- 📇 **[Website Contact & Company Info Scraper](https://apify.com/skydata/website-contact-company-scraper)**: emails, phones, social profiles and tech stack from any list of websites

### ❓ FAQ

**Are the numbers search volumes?**
No. Google Trends shows **relative interest from 0 to 100**, where 100 is the peak in that report. Numbers are comparable within one report. With a comparison mode on, they're comparable across the compared keywords. With ONE scale, across all of them.

**Why do I get `no_data` for some keywords?**
Google has too little data for very rare searches. Those reports are free.

**What does `partial` mean?**
The main data arrived, but one section (for example related topics) didn't. You still get everything that worked.

**Related topics are empty, why?**
Google currently often returns related topics empty, even on its own website. They're optional and never charged separately.

**Do I need a proxy?**
The default residential proxy is recommended, because Google blocks most data-centre IPs. It's included in your Apify usage.

**Can I run it every day or week?**
Yes. Use Apify **Schedules**. Turn on **Monitor changes** to get only what's new each time, and connect the results to Google Sheets, Slack, email or a webhook.

**Can AI agents use it?**
Yes. It works through the Apify API and the Apify MCP server, with clean, structured output.

**Is it legal?**
It collects publicly available, aggregated and anonymous Google Trends data, with no personal data. You're responsible for using the data in line with the laws and terms that apply to you. This Actor isn't affiliated with or endorsed by Google.

### 🛠️ Settings

| Setting | Default | Notes |
|---|---|---|
| Keywords | – | Required |
| Locations | Worldwide | Country or region codes |
| Time range | Past 12 months | Or custom `YYYY-MM-DD YYYY-MM-DD` |
| What to include | Over time, by region, related queries | Related topics optional |
| Comparison mode | Separate | Groups of 5, or ONE scale for all (+ ranking) |
| Anchor keyword | First keyword | For ONE scale mode |
| Monitor changes | Off | What's new since last run; use with Schedules |
| Monitor name | default | Separate history per keyword list |
| Search type | Web | Images, News, YouTube, Shopping |
| Category ID | 0 (all) | Google Trends category number |
| Region detail | Default | Countries, regions, cities, US metro areas |
| Proxy | Residential | Recommended |
| Pause between requests | 600 ms | Higher = slower but safer |

### 💬 Support

Missing a field or found a problem? Open an **Issue** on this page. We reply **within 12 hours** and ship fixes fast.

# Changelog

This Actor's version history is a separate document: https://apify.com/skydata/google-trends-scraper/changelog.md

# Actor input Schema

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

Search terms to look up. Each keyword gets its own report (or turn on 'Compare keywords' to put up to 5 on the same scale).

## `locations` (type: `array`):

Two-letter country codes like US, GB, IN, BR, or region codes like US-CA. Leave one empty line for Worldwide. Every keyword is checked in every location.

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

Period to analyse. Custom ranges use 'YYYY-MM-DD YYYY-MM-DD'.

## `sections` (type: `array`):

Report sections. Related topics are currently often empty on Google's side; they are never charged separately.

## `comparison` (type: `string`):

Separate: each keyword gets its own report. Groups of 5: up to 5 keywords on one scale per report (like Google's compare view). ONE scale for all: any number of keywords on one common 0-100 scale plus a ranking (chained through an anchor keyword; uses one Google request per 4 extra keywords).

## `anchorKeyword` (type: `string`):

Optional. The keyword used to connect the groups. Best: a keyword with medium, steady interest. Default: the first keyword.

## `searchType` (type: `string`):

Which Google search to analyse: web (default), images, news, YouTube or Google Shopping.

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

Google Trends category number (0 = all categories).

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

Leave empty for Google's default (countries for Worldwide, regions inside a country, metro areas inside US states). If Google has no data at the chosen detail (often the case for cities), the default level is returned with a note.

## `includeLowVolumeRegions` (type: `boolean`):

Also show regions with very little search volume (Google hides them by default).

## `monitorChanges` (type: `boolean`):

Remember results between runs and add a 'changes' section: new Breakout searches, new rising searches, % change since last run and top-region changes. Use with Apify Schedules (e.g. weekly). A summary is saved as CHANGES_SUMMARY.

## `monitorName` (type: `string`):

Name for this monitor, so different keyword lists keep separate history (e.g. 'client-a-weekly').

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

Google blocks most data-centre IPs. Residential proxy is recommended and is the default.

## `pacingMs` (type: `integer`):

Average pause between calls to Google. Higher is slower but safer.

## `maxAttempts` (type: `integer`):

How many times to retry a request when Google slows the robot down. Failed reports are never charged.

## Actor input object example

```json
{
  "keywords": [
    "electric bike",
    "running shoes"
  ],
  "locations": [
    "US"
  ],
  "timeframe": "today 12-m",
  "sections": [
    "interestOverTime",
    "interestByRegion",
    "relatedQueries"
  ],
  "comparison": "none",
  "searchType": "web",
  "category": 0,
  "regionResolution": "",
  "includeLowVolumeRegions": false,
  "monitorChanges": false,
  "monitorName": "default",
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  },
  "pacingMs": 600,
  "maxAttempts": 6
}
```

# Actor output Schema

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

All Trends reports as dataset items: insights, interest over time, interest by region, related queries, ranking and changes.

## `overview` (type: `string`):

Short view per report: keywords, location, status and insights.

## `changesSummary` (type: `string`):

Only with 'Monitor changes': notable changes since the previous run (new breakouts, new rising searches, big moves).

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

Number of reports, how many had data (charged) or not (free), 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": [
        "electric bike",
        "running shoes"
    ],
    "locations": [
        "US"
    ],
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ]
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("skydata/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": [
        "electric bike",
        "running shoes",
    ],
    "locations": ["US"],
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
    },
}

# Run the Actor and wait for it to finish
run = client.actor("skydata/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": [
    "electric bike",
    "running shoes"
  ],
  "locations": [
    "US"
  ],
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}' |
apify call skydata/google-trends-scraper --silent --output-dataset

```

## MCP server setup

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