# Google Trends Scraper — Interest, Regions, Related & Trending (`herus13/google-trends-scraper`) Actor

Scrape Google Trends data: interest over time, interest by region, top and rising related queries, and country trending searches. Clean CSV/JSON output, no official API key.

- **URL**: https://apify.com/herus13/google-trends-scraper.md
- **Developed by:** [bootforge](https://apify.com/herus13) (community)
- **Categories:** Developer tools, SEO tools, Other
- **Stats:** 1 total users, 1 monthly users, 84.2% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $5.00 / 1,000 results

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.

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

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## Google Trends Scraper — Interest, Regions, Related & Trending

Google Trends Scraper is an Apify actor that extracts data from [Google Trends](https://trends.google.com) — search-interest over time, interest by region, top and rising related queries, and today's country-level trending searches — without an official API key.

Use it to spot rising keywords before you write content, benchmark a brand or product's search interest across countries, feed a trend-monitoring dashboard, or catch a topic the moment it starts trending in a country — exported to JSON, CSV, or Excel.

### Table of contents

- [What the Google Trends Scraper does](#what-the-google-trends-scraper-does)
- [Use cases](#use-cases)
- [How to scrape Google Trends data](#how-to-scrape-google-trends-data)
- [Google Trends scraper input](#google-trends-scraper-input)
- [What data you get](#what-data-you-get)
- [Pricing](#pricing)
- [Why residential proxy for Google Trends](#why-residential-proxy-for-google-trends)
- [Why this Google Trends scraper](#why-this-google-trends-scraper)
- [FAQ](#faq)
- [Rate this actor](#rate-this-actor-)
- [Related actors](#related-actors)

### What the Google Trends Scraper does

- 📈 **Interest over time** — the 0–100 search-interest index per date for one or more keywords, so you can chart momentum and seasonality.
- 🌍 **Interest by region** — the same 0–100 index broken down by country/region, so you can see where a keyword is hottest.
- 🔎 **Related queries** — the top and rising related searches Google Trends surfaces for a keyword, great for keyword-research and content ideation.
- 🔥 **Trending now** — today's trending searches for a country, no keyword required — catch what's blowing up right now.
- ⚡ **HTTP-only, no anti-bot browser tier** — no login, no CAPTCHA solving; runs are fast and cheap when a residential proxy keeps requests unblocked.

### Use cases

**Content planning against rising demand** — Related-query data separates *top* queries (already large) from *rising* ones (growing fast). Writing against the rising set is how you publish before a term becomes competitive rather than after.

**Cross-country brand benchmarking** — Interest-by-region output shows where a brand or product actually has search demand, which routinely contradicts where a team assumes it does. Useful before committing a market-entry budget.

**Trend-monitoring dashboards** — Interest-over-time on a fixed keyword set, run on a schedule, gives a demand signal to sit alongside your own sales or traffic numbers.

**Catching a country-level trend as it breaks** — The trending-searches mode returns what a country is searching right now, which is the input for newsroom and social-team workflows that have to move within hours.

### How to scrape Google Trends data

1. Click **Try for free** and open the actor.
2. Choose `data_type` — **one per run**: `interest_over_time` (default), `interest_by_region`, `related_queries`, or `trending_now`. Each produces a clean, single-schema dataset.
3. For the three keyword-based types, enter 1–5 `keywords`. For `trending_now`, enter a `geo` country code instead (no keywords needed).
4. Optionally narrow with `geo` (country code), `timeframe` (e.g. `today 12-m`), and `category`.
5. Click **Start** and watch results stream into the dataset.
6. Export as **JSON, CSV, or Excel**, or pull from the [Apify API](https://docs.apify.com/api/v2).

Interest over time for two keywords, last 12 months, worldwide:

```json
{
  "data_type": "interest_over_time",
  "keywords": ["bitcoin", "ethereum"],
  "timeframe": "today 12-m"
}
```

Interest by region for one keyword, US only:

```json
{
  "data_type": "interest_by_region",
  "keywords": ["bitcoin"],
  "geo": "US"
}
```

Top and rising related queries for a keyword:

```json
{
  "data_type": "related_queries",
  "keywords": ["bitcoin"],
  "timeframe": "today 12-m"
}
```

Today's trending searches in the US (no keyword needed):

```json
{
  "data_type": "trending_now",
  "geo": "US"
}
```

### Google Trends scraper input

| Field | Type | Default | Description |
|---|---|---|---|
| `data_type` | enum | `interest_over_time` | One per run: `interest_over_time`, `interest_by_region`, `related_queries`, or `trending_now`. |
| `keywords` | string\[] | — | 1–5 search terms. Required for all data types except `trending_now`. |
| `geo` | string | `""` (worldwide) | Two-letter country code, e.g. `US`, `GB`, `VN`. **Required** for `trending_now`. |
| `timeframe` | select | `Past 12 months` | Time range to measure: Past hour / 4 hours / day / 7 days / 30 days / 90 days / 12 months / 5 years / 2004–present. Used by interest & related types only. |
| `category` | select | `All categories` | Narrow to a Google Trends topic (Finance, Sports, Health, …) — disambiguates terms like `apple` (Finance = stock, Food & Drink = fruit). Default: all categories. |
| `hl` | string | `en-US` | UI language for the underlying Trends request. |
| `tz` | int | `-420` | Timezone offset in minutes used by Trends (e.g. `-420` for PDT). |
| `max_records` | int | — | Cap total rows per run — useful for `interest_by_region` / `trending_now`. |
| `proxy` | object | — | Apify Proxy configuration. **Residential strongly recommended** — see [Why residential proxy](#why-residential-proxy-for-google-trends). |

### What data you get

#### Interest over time (`data_type: interest_over_time`)

One row per date per keyword. Sample from a live run:

```json
{
  "data_type": "interest_over_time",
  "keyword": "bitcoin",
  "date": "2026-06-14",
  "value": 62,
  "is_partial": false,
  "geo": "",
  "timeframe": "today 12-m",
  "category": 0,
  "scraped_at": "2026-07-17T09:12:44.118203+00:00"
}
```

#### Interest by region (`data_type: interest_by_region`)

One row per region per keyword. Sample from a live run:

```json
{
  "data_type": "interest_by_region",
  "keyword": "bitcoin",
  "geo_name": "California",
  "geo_code": "US-CA",
  "value": 100,
  "geo": "US",
  "timeframe": "today 12-m",
  "category": 0,
  "scraped_at": "2026-07-17T09:12:44.118203+00:00"
}
```

#### Related queries (`data_type: related_queries`)

One row per top/rising related query per keyword. Sample from a live run:

```json
{
  "data_type": "related_queries",
  "keyword": "bitcoin",
  "rank_type": "rising",
  "query": "bitcoin etf",
  "value": 850,
  "geo": "",
  "timeframe": "today 12-m",
  "scraped_at": "2026-07-17T09:12:44.118203+00:00"
}
```

#### Trending now (`data_type: trending_now`)

One row per trending topic for the requested country. Sample from a live run:

```json
{
  "data_type": "trending_now",
  "geo": "US",
  "rank": 1,
  "title": "NBA Draft",
  "search_volume": "200K+",
  "started": "2026-07-17T08:00:00Z",
  "related_terms": "NBA Draft 2026, draft order, mock draft",
  "scraped_at": "2026-07-17T09:12:44.118203+00:00"
}
```

| Field | Description |
|---|---|
| `data_type` | Which of the four data types this row belongs to (matches the run's `data_type` input). |
| `keyword` | The search term this row is about (interest/related types only). |
| `date` / `value` / `is_partial` | Date, 0–100 search-interest index, and whether that data point is a still-incomplete final period (interest over time). |
| `geo_name` / `geo_code` / `value` | Region name, region code, and 0–100 interest index (interest by region). |
| `rank_type` / `query` / `value` | `top` or `rising`, the related search term, and its relative value (related queries). |
| `rank` / `title` / `search_volume` / `started` / `related_terms` | Trending topic's rank, title, estimated search volume, start time, and related terms (trending now). |
| `geo`, `timeframe`, `category`, `scraped_at` | Request parameters echoed back plus the capture timestamp. |

### Pricing

This actor uses **pay-per-event** pricing — you pay for what you scrape, not for time. Pricing below is **provisional** until Console monetization is finalized (see the Monetization tab for current live pricing).

| Event | USD | Per 1,000 |
|---|---|---|
| Actor start (per run) | $0.001 | — |
| Trend result scraped (`trend-result`) | $0.005 | $5 |

| Typical run | Cost |
|---|---|
| 1 keyword, interest over time | ~$0.006 |
| 5 keywords, interest over time | ~$0.026 |
| 1 country, trending now | ~$0.006 |

A "result" is one delivered keyword result set (interest-over-time series, interest-by-region breakdown, or related-queries set for one keyword) or one country's trending feed — not per individual row, so a 12-month daily timeline still bills as a single event.

### Why residential proxy for Google Trends

Google Trends aggressively rate-limits and blocks datacenter IPs (typically HTTP 429) after a handful of requests. **A residential proxy is strongly recommended** for anything beyond a one-off run — set it under **Proxy configuration** in the input. Apify Proxy (residential) works out of the box.

If you run your own scrapers (inside or outside Apify) and need reliable residential proxies for scale, we use **[DataImpulse](https://dataimpulse.com/?aff=404588\&utm_source=apify)** — pay-as-you-go IPs with per-country targeting and no monthly minimum:

👉 **[Get DataImpulse proxies](https://dataimpulse.com/?aff=404588\&utm_source=apify)** (referral link)

### Why this Google Trends scraper

- **Four data types, one actor** — interest over time, interest by region, related queries, and trending now, each a clean single-schema dataset; pick one per run.
- **No anti-bot browser tax** — HTTP-only, no browser, no CAPTCHA solving, so runs are fast and cheap as long as requests stay unblocked.
- **No official API key needed** — Google Trends has no public API; this actor replicates the same requests the trends.google.com website makes.
- **Validated output** — every row is Pydantic-validated before it's pushed; malformed entries are dropped, not shipped with garbage fields.
- **Open source** — the underlying `google-trends-scraper` Python package ships a Typer CLI and a FastAPI server; the Apify wrapper is a thin layer.

### FAQ

**Is this the official Google Trends API?** No — Google Trends has no official public API. This actor scrapes the same public data the trends.google.com website displays, via the same requests the site's own frontend makes.

**Why are values 0–100 instead of raw search counts?** That's how Google Trends itself reports interest — a relative index scaled to the highest point in the selected timeframe/region (100 = peak popularity), not an absolute search-volume count. Google does not publish raw numbers.

**How many keywords can I compare at once?** Up to 5 per run, matching Google Trends' own comparison limit for `interest_over_time`, `interest_by_region`, and `related_queries`.

**Do I need a proxy?** Not strictly, but Google Trends blocks datacenter IPs quickly (HTTP 429). A residential proxy (Apify Proxy or your own) is strongly recommended beyond light, occasional use — see [Why residential proxy](#why-residential-proxy-for-google-trends).

**Can I get multiple data types in one run?** One `data_type` per run by design, so every run's dataset has a single clean schema. Run the actor again with a different `data_type` to get another.

**Is scraping Google Trends legal?** This actor collects only publicly available, aggregated search-interest data — no personal data. You are responsible for complying with Google's terms and applicable laws.

### Rate this actor ⭐

If the Google Trends Scraper saved you time, please **leave a review on its Apify Store page** — ratings help other people find it and tell us what to build next. Hit a bug or missing field? Open an issue or contact us through the actor's **Issues** tab and we'll fix it fast — recency and reliability are what keep this actor ranking.

### Related actors

Building a trend-research or content-intelligence pipeline? Pair this actor with our other scrapers — same proxy config format, same Pydantic-validated output, all open source.

- **[levels.fyi Salary Scraper](https://apify.com/herus13/levels-fyi-salary-scraper)** — another HTTP-only, no-anti-bot actor if you're assembling a lightweight-scrape toolkit.
- **[Indeed Job Scraper](https://apify.com/herus13/indeed-scraper)** — cross-reference job-market demand against the keywords trending here.
- **[Google Play App Search & Reviews Scraper](https://apify.com/herus13/google-play-reviews-scraper)** — pair app search-interest trends with real app reviews.

# Actor input Schema

## `data_type` (type: `string`):

<p>Pick ONE per run — each produces a clean, single-schema dataset.</p><ul><li><b>Interest over time</b> — search-interest index (0–100) per date for your keyword(s).</li><li><b>Interest by region</b> — interest index per country/region.</li><li><b>Related queries</b> — top + rising related searches for a keyword.</li><li><b>Trending now</b> — today's trending searches for a country (no keyword needed).</li></ul>
## `keywords` (type: `array`):

<p>1–5 search terms. Required for all data types except Trending now. Multiple terms are compared against each other (Google Trends compares up to 5).</p>
## `geo` (type: `string`):

Two-letter country code, e.g. <code>US</code>, <code>GB</code>, <code>VN</code>. Empty = Worldwide (keyword products). REQUIRED for Trending now.

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

How far back to measure search interest. Used by Interest over time, Interest by region, and Related queries (ignored for Trending now).

## `category` (type: `string`):

<p>Narrow results to a Google Trends topic category. Useful for ambiguous terms — e.g. <code>apple</code> under <b>Finance</b> = Apple stock, under <b>Food &amp; Drink</b> = the fruit. Default: all categories.</p>
## `hl` (type: `string`):

UI language, e.g. en-US.

## `tz` (type: `integer`):

Timezone offset in minutes used in Trends requests (e.g. -420 for PDT).

## `max_records` (type: `integer`):

Cap total rows per run (useful for Interest by region / Trending now).

## `proxy` (type: `object`):

Proxy settings. RESIDENTIAL strongly recommended — Google Trends blocks datacenter IPs (HTTP 429).

## Actor input object example

```json
{
  "data_type": "interest_over_time",
  "keywords": [
    "bitcoin"
  ],
  "timeframe": "today 12-m",
  "category": "0",
  "hl": "en-US",
  "tz": -420
}
```

# Actor output Schema

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

Interest-over-time, interest-by-region, related-queries, or trending-now rows for the requested data\_type

# 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": [
        "bitcoin"
    ],
    "geo": ""
};

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

# Run the Actor and wait for it to finish
run = client.actor("herus13/google-trends-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).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": [
    "bitcoin"
  ],
  "geo": ""
}' |
apify call herus13/google-trends-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=herus13/google-trends-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/acts/QkqclwsUyhOY5pXgp/builds/Yuo3tHGAhtha9DTx0/openapi.json
