# Google Trends Scraper — Reliable, No Start Fee (`trendtech/google-trends-scraper`) Actor

Get Google Trends data reliably: interest over time, interest by region, related queries, related topics and Trending Now. Compare up to 5 keywords, many countries per run. Pay only for successful results.

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

## Pricing

$3.00 / 1,000 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

## Google Trends Scraper — Reliable, No Start Fee

Get **Google Trends** data as clean JSON — for people, spreadsheets and AI agents alike:

- 📈 **Interest over time** (0–100 timeline + average)
- 🗺️ **Interest by region** — countries, states, cities or US metro areas
- 🔍 **Related queries** — top and rising (incl. "Breakout" queries)
- 🧩 **Related topics** — top and rising
- 🔥 **Trending Now** — what people search for right now, per country, with news links
- ⚖️ **Compare up to 5 keywords** in one report, exactly like trends.google.com
- 🌍 **Many countries in one run** — every keyword is fetched for every location

### Why this scraper?

**Built around Google's rate limits.** Google Trends blocks bursts of requests (HTTP 429) — that is why many Trends scrapers fail often. This Actor rotates proxy sessions with fresh cookies, backs off intelligently and automatically escalates to residential proxies when a request keeps getting blocked.

**Fair pricing.**

- ✅ No Actor start fee
- ✅ You pay only for results that were saved — failed lookups are never charged
- ✅ One result = one complete report (timeline + regions + related queries + related topics), not one row per data point

### How to use

1. Enter your **search terms**, e.g. `bitcoin`, `electric car`.
2. Pick **countries** (`US`, `DE`, `US-CA` …) or leave empty for worldwide.
3. Pick a **time range** and press **Start**.

For a live list of trending searches, switch **Mode** to *Trending Now* and choose countries — no keywords needed.

#### Example input

```json
{
    "searchTerms": ["bitcoin", "ethereum"],
    "compareTerms": true,
    "geos": ["US", "DE"],
    "timeRange": "today 12-m"
}
```

### Output

One dataset item per report. Example (shortened):

```json
{
    "searchTerm": "bitcoin",
    "geo": "US",
    "timeRange": "today 12-m",
    "property": "web",
    "trendsUrl": "https://trends.google.com/trends/explore?q=bitcoin&date=today+12-m&geo=US",
    "averageInterest": 52.79,
    "interestOverTime": [
        { "date": "2026-07-27T00:00:00.000Z", "formattedTime": "Jul 27, 2026", "value": 46 }
    ],
    "interestByRegion": [
        { "geoCode": "US-NV", "geoName": "Nevada", "value": 100 }
    ],
    "relatedQueries": {
        "top": [{ "query": "bitcoin price", "value": 100, "formattedValue": "100" }],
        "rising": [{ "query": "bitcoin etf", "value": 5000, "formattedValue": "Breakout" }]
    },
    "relatedTopics": {
        "top": [{ "title": "Cryptocurrency", "type": "Topic", "mid": "/m/0vpj4_b", "value": 100 }],
        "rising": []
    },
    "scrapedAt": "2026-10-27T12:00:00.000Z"
}
```

When **comparing** terms, `value` becomes `values` (`{ "bitcoin": 46, "ethereum": 7 }`) and related queries are grouped per term.

**Trending Now** items look like this:

```json
{
    "type": "trendingNow",
    "geo": "DE",
    "rank": 1,
    "title": "champions league",
    "approxTraffic": "200,000+",
    "approxTrafficNumber": 200000,
    "startedAt": "2026-10-27T18:00:00.000Z",
    "news": [{ "title": "…", "url": "https://…", "source": "…" }]
}
```

A run summary (results saved, failed lookups and why) is stored in the key-value store under `OUTPUT`.

### Good to know

- Google Trends values are **relative** (0–100), not absolute search volumes. Values are only comparable within one report — use *Compare terms* to compare keywords directly.
- Google compares at most **5 terms** at once. More terms are split into groups of 5.
- Google does **not** return related topics for comparisons. For some requests Google also withholds related topics; the item then contains a `relatedTopicsNote` explaining it.
- Very new or niche keywords may have little or no data — that is Google's answer, not an error.

### Use cases

- **SEO & content planning** — find rising queries before your competitors do
- **Market research** — compare products, brands and demand across countries
- **E-commerce** — spot seasonal demand and product trends
- **AI agents & automations** — feed fresh trend data to n8n, Make, Zapier or your LLM via the Apify API / MCP

### Integrations

Use the Apify API, schedules and integrations (Make, Zapier, n8n, Google Sheets, webhooks) to run it automatically, e.g. daily Trending Now for your markets.

Questions or a feature request? Open an issue on the Actor's **Issues** tab.

# Actor input Schema

## `mode` (type: `string`):

"Explore" returns full Trends reports for your keywords. "Trending Now" returns what is trending right now in the selected countries (no keywords needed).

## `searchTerms` (type: `array`):

Keywords to look up, e.g. "bitcoin" or "electric car". Each term gets its own report unless "Compare terms" is on.

## `compareTerms` (type: `boolean`):

On: terms are compared in one report (max 5 per report, like on trends.google.com), so values are relative to each other. Off: every term is its own report scaled 0–100.

## `geos` (type: `array`):

Two-letter country codes ("DE", "US") or sub-regions ("US-CA", "DE-BY"). Empty = worldwide (Trending Now: US). Every term is fetched for every location.

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

Period to analyse. Ignored if a custom time range is set.

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

Optional. Format "YYYY-MM-DD YYYY-MM-DD", e.g. "2024-01-01 2024-12-31".

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

Google Trends category ID (0 = all categories). Examples: 7 = Finance, 18 = Shopping, 47 = Autos & Vehicles, 71 = Food & Drink, 958 = Jobs.

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

Which Google search to analyse.

## `interestOverTime` (type: `boolean`):

Timeline of search interest (0–100) plus the average.

## `interestByRegion` (type: `boolean`):

Search interest per country / region / city.

## `relatedQueries` (type: `boolean`):

Top and rising related search queries.

## `relatedTopics` (type: `boolean`):

Top and rising related topics.

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

Granularity of "Interest by region". Default: countries for worldwide, regions for a single country.

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

Also return regions with very low search volume.

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

Language code for topic names and labels, e.g. "en", "de", "fr".

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

How many reports to fetch in parallel. Higher is faster but Google rate-limits bursts; 3 is a safe default.

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

Proxy used to reach Google Trends. The default works for most runs.

## `residentialFallback` (type: `boolean`):

If Google keeps blocking a request, retry it automatically through residential proxies. Keeps success rates high.

## Actor input object example

```json
{
  "mode": "explore",
  "searchTerms": [
    "bitcoin",
    "ethereum"
  ],
  "compareTerms": false,
  "geos": [
    "US"
  ],
  "timeRange": "today 12-m",
  "category": 0,
  "property": "",
  "interestOverTime": true,
  "interestByRegion": true,
  "relatedQueries": true,
  "relatedTopics": true,
  "regionResolution": "",
  "includeLowVolumeRegions": false,
  "language": "en",
  "maxConcurrency": 3,
  "proxyConfiguration": {
    "useApifyProxy": true
  },
  "residentialFallback": true
}
```

# Actor output Schema

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

One item per Google Trends report (keyword or comparison x location), or one item per Trending Now topic.

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

Number of saved results, failed lookups with reasons (never charged) 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 = {
    "searchTerms": [
        "bitcoin",
        "ethereum"
    ],
    "geos": [
        "US"
    ],
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("trendtech/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 = {
    "searchTerms": [
        "bitcoin",
        "ethereum",
    ],
    "geos": ["US"],
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("trendtech/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 '{
  "searchTerms": [
    "bitcoin",
    "ethereum"
  ],
  "geos": [
    "US"
  ],
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call trendtech/google-trends-scraper --silent --output-dataset

```

## MCP server setup

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