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

Get Google Trends data for any keyword: interest over time, interest by country/state/city, related and rising queries, keyword comparisons and daily trending searches. Fast, with automatic retries and proxy rotation.

- **URL**: https://apify.com/daniel_slimpson/google-trends-scraper.md
- **Developed by:** [Dan](https://apify.com/daniel_slimpson) (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

$5.00 / 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.

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

Get **Google Trends data** for any keyword without the manual work: interest over time, interest by country, state, city or metro area, top and rising related queries, side-by-side keyword comparisons and today's **trending searches**. Export to JSON, CSV or Excel, or call it from the API, Make, Zapier, n8n or an AI agent.

Built for reliability: it retries automatically, rotates sessions, and switches to residential proxies if Google starts blocking, so a large keyword list finishes instead of failing halfway.

### What you can get

| Data | Description |
|---|---|
| **Interest over time** | Search interest from 0 to 100 for each hour, day, week or month, from the past hour back to 2004 |
| **Interest by region** | Interest per country, state or region, city, or US metro area (DMA) |
| **Related queries** | Top and rising searches for each term, including "Breakout" terms |
| **Keyword comparison** | Up to 5 terms on the same 0-100 scale, exactly like the Google Trends website |
| **Trending now** | Today's trending searches for any country, with approximate traffic and related news articles |
| **Search type** | Web, Image, News, Google Shopping or YouTube search |

### Use cases

- **SEO and content planning:** find rising queries before they peak.
- **Market research:** compare brands, products or competitors over time and by region.
- **E-commerce and dropshipping:** spot seasonal demand and trending products.
- **Finance and crypto:** track retail interest as an alternative data signal.
- **News and social media:** monitor daily trending searches across countries.
- **AI agents and dashboards:** schedule runs and pipe the results anywhere through the API.

### How to use

1. Enter your **search terms**, one per line.
2. Choose a **time range** and **location**, or leave the location empty for worldwide.
3. Pick the data you want: interest over time, by region, related queries.
4. Click **Start**. Results appear in the dataset tab and can be downloaded in any format.

To compare keywords on one scale, turn on **Compare terms on one scale**. For daily trending searches, set **What to scrape** to **Trending now**.

### Input example

```json
{
  "searchTerms": ["bitcoin", "ethereum", "solana"],
  "compareTerms": true,
  "timeRange": "today 12-m",
  "geo": "US",
  "interestOverTime": true,
  "interestByRegion": true,
  "regionResolution": "REGION",
  "relatedQueries": true
}
```

### Output example

```json
{
  "searchTerms": ["bitcoin", "ethereum"],
  "geo": "US",
  "timeRange": "today 12-m",
  "category": 0,
  "property": "web",
  "interestOverTime": [
    {"date": "2026-10-04T00:00:00Z", "timestamp": 1791072000, "isPartial": true, "values": {"bitcoin": 17, "ethereum": 2}}
  ],
  "interestByRegion": [
    {"geoCode": "US-NV", "geoName": "Nevada", "values": {"bitcoin": 90, "ethereum": 10}}
  ],
  "relatedQueries": {
    "bitcoin": {
      "top": [{"query": "bitcoin price", "value": 100, "formattedValue": "100", "link": "https://trends.google.com/trends/explore?q=bitcoin+price&date=today+12-m&geo=US"}],
      "rising": [{"query": "how to buy bitcoin safely", "value": 11200, "formattedValue": "Breakout", "link": "..."}]
    }
  }
}
```

Trending now items look like this:

```json
{"type": "trendingNow", "geo": "CA", "rank": 1, "title": "aurora forecast", "approxTraffic": "2000+", "startedAt": "Thu, 8 Oct 2026 13:10:00 -0700", "news": [{"title": "...", "url": "...", "source": "..."}]}
```

### Pricing

You pay per result:

- **Explore mode:** one result per search term, or per comparison group of up to 5 terms, with every data section you selected included.
- **Trending now:** one result per trending search.

Failed lookups are never charged.

### Notes

- Google Trends values are **relative** (0-100), not absolute search volumes. A value of 100 marks the term's peak for the chosen place and time.
- Values in separate results are on separate scales. Use **Compare terms** to put terms on the same scale.
- Google does not return "related topics" to automated tools, so this scraper provides related queries only.
- Data comes from the public Google Trends website. This scraper is not affiliated with Google.

### Support

Found a bug or need a feature? Open an issue on the **Issues** tab and I'll usually respond within a day.

# Actor input Schema

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

<b>Explore</b> returns interest over time, by region and related searches for your keywords. <b>Trending now</b> returns today's trending searches for the chosen countries.

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

Keywords or topics to look up. Each term becomes one result unless 'Compare terms' is on.

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

Put terms in groups of up to 5 so their values share one 0-100 scale, like typing them into Google Trends together. Each group counts as one result.

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

Period to fetch. Shorter ranges return finer time steps (minutes/hours), longer ones weeks or months.

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

Overrides the time range above. Format: <code>YYYY-MM-DD YYYY-MM-DD</code>, e.g. <code>2024-01-01 2024-06-30</code>.

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

Country or region code, e.g. <code>US</code>, <code>GB</code>, <code>US-CA</code>. Leave empty for worldwide.

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

Google Trends category ID (0 = all categories). Examples: 7 Finance, 71 Food & Drink, 958 Jobs, 29 Real Estate.

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

Which Google search to measure: web, images, news, shopping or YouTube.

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

Time series of search interest (0-100).

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

Search interest per country, state, city or metro.

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

Granularity for interest by region. Leave on automatic to use Google's default (countries for worldwide, states for a country).

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

Also return regions with too little search volume for Google to rank reliably.

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

Top and rising related searches for each term.

## `trendingGeos` (type: `array`):

Country codes for 'Trending now' mode, e.g. US, GB, CA, IN.

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

Language for topic names and dates, e.g. en-US, de, fr, es.

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

Apify Proxy is used by default. If Google blocks requests, the scraper switches to residential proxies automatically.

## Actor input object example

```json
{
  "mode": "explore",
  "searchTerms": [
    "bitcoin",
    "ethereum"
  ],
  "compareTerms": false,
  "timeRange": "today 12-m",
  "geo": "",
  "category": 0,
  "searchProperty": "",
  "interestOverTime": true,
  "interestByRegion": false,
  "regionResolution": "",
  "includeLowVolumeRegions": false,
  "relatedQueries": true,
  "trendingGeos": [
    "US"
  ],
  "language": "en-US",
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

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

One item per search term (or comparison group), or one per trending search.

## `overview` (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": [
        "bitcoin",
        "ethereum"
    ],
    "trendingGeos": [
        "US"
    ],
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

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

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

```

## MCP server setup

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