# Google Trends Scraper - Reliable, Pay Only for Results (`zahidthani/google-trends-scraper`) Actor

Get Google Trends interest over time, interest by region, related queries & topics and Trending Now for any keyword, country and time range. Built-in retries and proxy fallback; you're only charged for successful results.

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

## Pricing

from $4.00 / 1,000 trend 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, Pay Only for Results

**Get Google Trends data for any keyword as clean JSON, CSV or Excel: interest over time, interest by region,
related queries and related topics in one item, with a ready-made trend summary. No Google account, no API key,
no pytrends rate-limit errors. $4 per 1,000 keywords, and failed keywords are free.**

### What can this Google Trends scraper do?

- 📈 **Interest over time** for any keyword, country, US state or city, from the past hour back to 2004.
- 🗺️ **Interest by region**: countries, states/regions, US metro areas (DMA) or cities.
- 🔎 **Related queries and related topics**, both *top* and *rising* (including "Breakout" terms).
- 🧮 **Trend summary on every keyword**: average, peak, latest value, direction (`rising` / `stable` / `falling`)
  and % change, so spreadsheets, dashboards and AI agents need no extra maths.
- ⚖️ **Compare mode**: up to 5 keywords on the same 0-100 scale, exactly like trends.google.com.
- 🔥 **Trending Now** searches for any country, with approximate traffic and news links (optional).
- 🌐 Web, Images, News, Google Shopping or YouTube search, any Google Trends category.
- 🛡️ **Built to survive Google's rate limits**: warm sessions, backoff, a fresh IP per retry and an automatic switch
  to residential proxies when datacenter IPs get blocked (the #1 reason Google Trends scrapers fail).

### Who uses it

- **SEO and content teams:** find rising queries before competitors and plan content around seasonal peaks.
- **E-commerce and product research:** check demand for a product, compare brands, find the states that search most.
- **Market research and investing:** track interest in companies, tickers, technologies or topics over time.
- **AI agents and automations:** one call returns a complete, summarised report per keyword (API, MCP, Make, Zapier, n8n).
- **Newsrooms and social teams:** watch Trending Now searches per country, with the news behind them.

### How to use it

1. Click **Try for free**. The form opens with two example keywords (`air fryer`, `instant pot`) for the US.
2. Replace them with your keywords, pick a country (`geo`, empty = worldwide) and a time range.
3. Tick **Compare terms** if you want the keywords on one shared scale.
4. Click **Start**. A run with a few keywords finishes in about 10-20 seconds.
5. Open the **Overview** table or export JSON, CSV, Excel or HTML, or call it from the API.

### Input examples

**Demand check for two products in the US over 12 months**

```json
{
  "searchTerms": ["air fryer", "instant pot"],
  "geo": "US",
  "timeRange": "today 12-m"
}
```

**Compare AI assistants worldwide on one scale, last 90 days**

```json
{
  "searchTerms": ["ChatGPT", "Gemini", "Claude"],
  "timeRange": "today 3-m",
  "compareTerms": true
}
```

**YouTube search interest by US metro area, plus today's Trending Now in the US and UK**

```json
{
  "searchTerms": ["pickleball"],
  "geo": "US",
  "searchProperty": "youtube",
  "regionResolution": "DMA",
  "trendingNowGeos": ["US", "GB"]
}
```

| Field | What it does |
|---|---|
| `searchTerms` | Keywords to analyse (one report each, or grouped by 5 when **Compare terms** is on) |
| `geo` | `US`, `GB`, `DE`, `US-CA`... Empty = worldwide |
| `timeRange` / `customTimeRange` | Past hour ... 2004-present, or an exact range like `2024-01-01 2024-12-31` |
| `searchProperty` | `web`, `images`, `news`, `shopping` (Google Shopping), `youtube` |
| `category` | Google Trends category ID (0 = all) |
| `includeInterestOverTime` / `ByRegion` / `RelatedQueries` / `RelatedTopics` | Choose the sections you need |
| `regionResolution` | Countries, states/regions, US metro areas (DMA) or cities |
| `trendingNowGeos` | Also get Trending Now searches for these countries |

### Output example

One item per keyword. This is a real result from a run on 6 October 2026 (`instant pot`, US, past 12 months),
with the arrays shortened:

```json
{
  "searchTerm": "instant pot",
  "comparedWith": [],
  "geo": "US",
  "timeRange": "today 12-m",
  "category": 0,
  "property": "web",
  "trendsUrl": "https://trends.google.com/trends/explore?q=instant+pot&date=today+12-m&geo=US",
  "status": "ok",
  "errors": [],
  "summary": {
    "average": 47.6,
    "peak": { "date": "2026-04-12T00:00:00Z", "value": 100 },
    "latest": 36,
    "trend": "falling",
    "changePercent": -31.1,
    "firstQuarterAverage": 48.7,
    "lastQuarterAverage": 33.5
  },
  "interestOverTime": [
    { "date": "2026-09-27T00:00:00Z", "label": "Sep 27 – Oct 3, 2026", "value": 36, "hasData": true, "isPartial": false },
    { "date": "2026-10-04T00:00:00Z", "label": "Oct 4 – 10, 2026", "value": 42, "hasData": true, "isPartial": true }
  ],
  "interestByRegion": [
    { "geoCode": "US-ID", "geoName": "Idaho", "value": 34 },
    { "geoCode": "US-OR", "geoName": "Oregon", "value": 31 }
  ],
  "relatedQueries": {
    "top": [
      { "query": "instant pot chicken", "value": 100, "formattedValue": "100", "link": "https://trends.google.com/trends/explore?q=instant+pot+chicken&date=today+12-m&geo=US" },
      { "query": "pressure cooker", "value": 69, "formattedValue": "69", "link": "https://trends.google.com/trends/explore?q=pressure+cooker&date=today+12-m&geo=US" }
    ],
    "rising": [
      { "query": "how to use an instant pot", "value": 1300, "formattedValue": "+1,300%", "link": "https://trends.google.com/trends/explore?q=how+to+use+an+instant+pot&date=today+12-m&geo=US" },
      { "query": "instant pot pro", "value": 650, "formattedValue": "+650%", "link": "https://trends.google.com/trends/explore?q=instant+pot+pro&date=today+12-m&geo=US" }
    ]
  },
  "relatedTopics": { "top": [], "rising": [] }
}
```

The full item had 53 weekly points, 51 states and 25 top plus 10 rising queries. Keywords Google can't serve come
back with `"status": "failed"` and an `errors` list, and are not charged.

Trending Now items (when `trendingNowGeos` is set):

```json
{
  "type": "trendingNow",
  "geo": "US",
  "rank": 1,
  "title": "politics",
  "approxTraffic": "200+",
  "startedAt": "Thu, 24 Sep 2026 14:10:00 -0700",
  "news": [{ "title": "Trump Hosts Xi at the White House: Live Summit Meeting Updates", "url": "https://www.nytimes.com/live/2026/09/24/us/trump-xi-summit-meeting-us-china", "source": "The New York Times" }]
}
```

### How much does it cost to scrape Google Trends?

Pay per event, **only for successful results**. No subscription.

| Event | Price | Per 1,000 |
|---|---|---|
| Trend report (one keyword, every section you selected) | $0.004 | **$4.00** |
| Trending Now search | $0.001 | $1.00 |
| Run start | $0.01 | - |

| Job | Cost |
|---|---|
| 2 keywords (the example) | about $0.02 |
| 100 keywords, all sections | about $0.41 |
| 1,000 keywords | about $4.01 |

Failed keywords are free. Set **Maximum cost per run** in the run options and the Actor stops cleanly at your
budget. Apify's free plan includes monthly platform credit you can spend on runs.

### Use it with AI agents (MCP) and the API

Add the Actor to Claude, ChatGPT, Cursor or any MCP client through the Apify MCP server:
`https://mcp.apify.com?tools=zahidthani/google-trends-scraper`. Then ask, for example:

> Compare Google Trends interest for "air fryer" and "instant pot" in the US over the last 12 months. Which one is
> growing, where is each most popular, and what are the rising related searches?

The `summary` object answers "is it growing?" directly, so the agent doesn't have to analyse 52 data points.

Call it over HTTP and get the dataset back in one request:

```bash
curl -X POST "https://api.apify.com/v2/acts/zahidthani~google-trends-scraper/run-sync-get-dataset-items" \
  -H "Authorization: Bearer $APIFY_TOKEN" -H "Content-Type: application/json" \
  -d '{"searchTerms": ["air fryer"], "geo": "US", "timeRange": "today 3-m"}'
```

Python, JavaScript and CLI examples are on the **API** tab.

### How it compares

| | This Actor | pytrends (Python library) | Typical Google Trends scrapers | trends.google.com by hand |
|---|---|---|---|---|
| Survives Google's 429 rate limits | Retries with fresh IPs + residential fallback | Frequent 429 errors; you manage proxies | Varies. Public Store stats show some fail a large share of runs | n/a |
| Failed keywords charged | **No** | n/a | Often yes | n/a |
| Over time, by region, related queries and topics in **one item** | Yes | Separate calls | Often separate runs or one row per data point | Separate tabs |
| Ready-made summary (trend, peak, % change) | Yes | No | Rarely | No |
| Compare up to 5 terms on one scale | Yes | Yes | Some | Yes |
| Schedules, API, MCP, Zapier/Make/n8n | Yes | Your own code | Yes | No |

### Limits and tips

- Google Trends values are **relative** (0-100 within your request), not search counts. Compare terms against
  each other with **Compare terms**.
- Google samples its data, so values can move a few points between requests. Very niche keywords can return no
  data, and related topics are sometimes empty. This mirrors trends.google.com.
- Google Trends occasionally contains odd spikes from a single region. Check `interestByRegion` before drawing
  conclusions from one peak.
- For hundreds of keywords, keep **residential fallback** on so the run completes even when Google tightens its limits.

### FAQ

**Is there an official Google Trends API?** Google's own Trends API has only been open to a limited group of
approved testers. This Actor gives you the same data as the website through Apify's API today, with no
application, key or Google account.

**Is this a pytrends alternative?** Yes. It returns the same data as pytrends and handles Google's rate limits for
you. There's nothing to install, and you can call it from any language, a no-code tool or an AI agent.

**Can I export Google Trends data to Google Sheets, CSV or Excel?** Yes. Export the dataset as CSV/Excel, or use
Apify's Google Sheets, Make, Zapier or n8n integrations to push each run automatically.

**Can I track keywords every day or week?** Yes. Save your input as a task and add a schedule. Each run costs
$0.004 per keyword.

**Why do my numbers differ slightly from the website?** Google samples its data, so values shift a few points
between requests. That's normal for Google Trends.

**How do I get the full Trending Now list or alerts for new trends?** Use our
[Google Trends Trending Now Monitor](https://apify.com/zahidthani/google-trends-trending-now). It returns every
trending search per country (hundreds, with search volume and categories), and its "only new" mode suits hourly alerts.

**Is it legal to scrape Google Trends?** The Actor collects only **public, aggregated and anonymous** statistics
that anyone can see on trends.google.com, with no login. It collects no personal data. You are responsible for
using the data in line with applicable laws and Google's terms.

**Something not working?** Open an issue on the **Issues** tab. We monitor this Actor daily and usually reply within a day.

### Related Actors

- [Google Trends Trending Now Monitor](https://apify.com/zahidthani/google-trends-trending-now): full Trending Now list per country, with only-new alerts.
- [App Store & Google Play Reviews Scraper](https://apify.com/zahidthani/app-store-google-play-reviews): what users say about any app, in both stores.
- [Website Tech Stack Detector](https://apify.com/zahidthani/website-tech-stack-detector): the technologies behind any list of websites.

# Actor input Schema

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

Keywords or phrases to look up on Google Trends. Each term gets its own report (or turn on 'Compare terms' to put up to 5 on the same 0-100 scale).

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

Two-letter country code (US, GB, DE, IN...) or sub-region (US-CA, GB-ENG). Leave empty for Worldwide.

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

How far back to look. 'Past 5 years' is best for spotting long-term growth and seasonality; 'Past 7 days' or shorter gives hourly detail for news and spikes.

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

Overrides the preset. Format: YYYY-MM-DD YYYY-MM-DD, e.g. 2024-01-01 2024-12-31.

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

Put terms side by side on the same 0-100 scale, exactly like comparing on trends.google.com. Terms are grouped in fives.

## `searchProperty` (type: `string`):

Which Google search to measure: regular web search, Image, News, Google Shopping or YouTube.

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

Google Trends category (0 = all categories). Example: 71 = Food & Drink, 18 = Shopping, 12 = Business & Industrial.

## `includeInterestOverTime` (type: `boolean`):

Return the 0-100 interest timeline for each term, plus a summary (trend, % change, peak).

## `includeInterestByRegion` (type: `boolean`):

Return where each term is most popular (countries, states, metros or cities).

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

Return the top and fastest-rising related searches for each term.

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

Return the top and fastest-rising related topics (entities) for each term.

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

Detail level for the regional breakdown. 'Automatic' picks countries for worldwide searches and states/regions inside a country.

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

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

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

Optional. Also fetch today's Trending Now searches (with approximate traffic and news links) for these country codes, e.g. US, GB.

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

Interface language Google Trends uses for names of regions and topics, e.g. en-US, de, es.

## `timezoneOffset` (type: `integer`):

Timezone for the timeline, as minutes offset from UTC (e.g. -300 for New York in winter). Leave 0 for UTC.

## `maxRetries` (type: `integer`):

How many times to retry a request that Google rate-limits or blocks before giving up on that term. You are only charged for successful results.

## `allowResidentialFallback` (type: `boolean`):

Google Trends often blocks datacenter IPs. When enabled, the Actor switches to residential proxies after repeated rate limits so the run still succeeds.

## `residentialFallbackAfter` (type: `integer`):

After this many failed attempts on datacenter proxies, retry with residential proxies (more reliable, used only when needed). Set 0 to use residential from the start.

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

Proxies used to reach Google Trends. The default Apify Proxy works for most runs; the Actor rotates IPs automatically.

## Actor input object example

```json
{
  "searchTerms": [
    "air fryer",
    "instant pot"
  ],
  "geo": "US",
  "timeRange": "today 12-m",
  "compareTerms": false,
  "searchProperty": "web",
  "category": 0,
  "includeInterestOverTime": true,
  "includeInterestByRegion": true,
  "includeRelatedQueries": true,
  "includeRelatedTopics": true,
  "regionResolution": "",
  "includeLowVolumeRegions": false,
  "language": "en-US",
  "timezoneOffset": 0,
  "maxRetries": 8,
  "allowResidentialFallback": true,
  "residentialFallbackAfter": 3,
  "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 = {
    "searchTerms": [
        "air fryer",
        "instant pot"
    ],
    "geo": "US",
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("zahidthani/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": [
        "air fryer",
        "instant pot",
    ],
    "geo": "US",
    "proxyConfiguration": { "useApifyProxy": True },
}

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

```

## MCP server setup

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