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

Search interest over time, interest by country, related queries, and what is trending right now — from Google Trends

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

## Pricing

from $1.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.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#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

Pull **Google Trends** data — how search interest moves over time, which countries search for something most, what people search alongside it, and what is **trending right now**.

### What does Google Trends Scraper do?

Five things, each a mode you pick:

- **Interest over time** — chart how interest in up to five terms changes, from the past hour to 2004.
- **Interest by region** — rank countries or states by how much they search a term.
- **Related queries and topics** — what else people search for around your keyword, split into established and fast-rising. Google restricts this one heavily; see the FAQ.
- **Trending now** — what is spiking in a country right now, with search volumes and growth.
- **Keyword suggestions** — the terms and topics Google recognises for a phrase.

### Why use Google Trends Scraper?

- **SEO and content planning** — find rising searches before they peak.
- **Market research** — see where in the world demand for a product is growing.
- **Brand monitoring** — track interest in your brand against competitors on one chart.
- **Newsroom and social** — catch breaking trends within hours of them starting.
- **Seasonality planning** — pull five years of history to see when demand actually rises.

Running it on Apify adds scheduling, an API, integrations (Sheets, Slack, Zapier, S3), and run monitoring.

### How to use Google Trends Scraper

1. Pick **What to get** — start with Interest over time.
2. Enter your **Keywords**, up to five.
3. Set a **Time range** and, if you want, a **Country or region**.
4. Click **Start**.

Results appear in the Output tab as they arrive, and download as JSON, CSV, Excel, or XML.

### Input

| Field | Description |
| --- | --- |
| `mode` | Which of the five views to get. |
| `keywords` | Up to five terms. Google compares at most five at once. Not needed for Trending now. |
| `timeframe` | From the past hour through to 2004. |
| `geo` | `US`, `GB`, `EG`, or a state like `US-CA`. Empty means worldwide. |
| `search_property` | Web, image, news, Shopping, or YouTube search. |
| `category_id` | Narrow to one Google Trends category. 0 is all categories. |
| `trending_hours` | How recent a trend must be to appear. Trending now only. |

### Output

**Interest over time** — one row per date:

```json
{ "date": "2026-08-21T00:00:00", "bitcoin": 72, "ethereum": 10, "is_partial": true }
```

**Trending now** — one row per topic:

```json
{
  "geo": "US",
  "topic": "fever vs wings",
  "search_volume": 200000,
  "volume_growth_pct": 1000,
  "started_at": "2026-08-20T23:00:00+00:00",
  "hours_trending": 3.53,
  "is_active": true,
  "categories": ["Sports"],
  "related_keywords": ["indiana fever", "dallas wings", "caitlin clark stats"]
}
```

**Interest by region** — one row per place, highest interest first:

```json
{ "region": "Switzerland", "region_code": "CH", "bitcoin": 100 }
```

You can download the dataset in various formats such as JSON, HTML, CSV, or Excel.

#### Data fields

| Field | Description |
| --- | --- |
| `date` | The point in time, for interest over time. |
| *keyword columns* | Interest for each term you searched — see the note below on what the number means. |
| `is_partial` | True when the final period is still in progress and its figure may still move. |
| `region`, `region_code` | Place name and code, for interest by region. |
| `topic`, `search_volume`, `volume_growth_pct`, `started_at`, `hours_trending`, `is_active` | What is trending, how big, how fast, and whether it is still climbing. |
| `categories`, `related_keywords` | What a trending topic is about and what people search alongside it. |
| `keyword`, `kind`, `group`, `value`, `score` | Related queries and topics: `kind` is query or topic, `group` is top or rising. |
| `suggestion`, `topic_id` | Keyword suggestions. |

#### What the interest numbers mean

Google never publishes raw search counts for these charts. The values are **relative**, scaled 0–100 against the highest point in your own query. So 50 means half the interest of the peak in that same chart — not 50 searches, and not comparable to a number from a different run. Change the keywords, the timeframe, or the region and every number rescales. Trending now is the exception: it reports approximate search volumes.

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

Each run is a small number of requests, so cost is low whichever mode you use. Running many keyword sets on a schedule is the main thing that adds up.

### Tips

- **Compare in one run.** Put rival terms in one keyword list so they share a scale — separate runs cannot be compared to each other.
- **Rising beats top.** In related queries, the rising group is where new demand shows up; top is mostly what you already know.
- **Trending now moves fast.** Run it hourly if you are watching for breaking topics.
- **Narrow regions go quiet.** A small country plus a niche keyword often has too little volume for Google to report anything.

### FAQ and support

**Why did I get no data?** Google only reports terms with enough search volume. A very specific keyword, a small region, or a short timeframe can all fall below its threshold — it returns nothing rather than a low number.

**Why did related queries return nothing?** Google restricts that particular data far more tightly than the rest, and refuses most automated requests for it — including from rotating addresses. In testing it failed far more often than it succeeded, while the other four modes worked every time. Treat related queries as a bonus rather than something to build on; when it is refused the run says so in the log instead of silently returning an empty result.

**Can I compare more than five keywords?** Not in one chart — that is Google's limit. Run several searches, keeping one common term in each, and use it as a reference point to line them up.

**Is scraping Google Trends legal?** The data is published publicly and contains no personal information. You are responsible for how you use it, including Google's terms. Consult a lawyer if you are unsure.

Found a bug or want a field that is missing? Open an issue on the Actor's Issues tab.

### SEO Keywords

google trends scraper, google trends api, search interest over time, trending searches data, keyword trend analysis, related queries scraper, seasonal keyword research, market trend data, google trends by country, trending topics scraper

# Actor input Schema

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

Interest over time charts how search interest moves. Interest by region ranks countries or states. Trending now lists what is spiking right now. Keyword suggestions returns the terms Google recognises for a phrase. Related queries and topics shows what else people search for — but Google restricts that one heavily and refuses most requests for it, so expect it to come back empty more often than not.

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

Up to five terms to compare. Google charts a maximum of five at once. Not needed for Trending now.

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

How far back to look.

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

Two-letter country code such as US, GB, EG. Leave empty for worldwide. You can also target a state, e.g. US-CA for California.

## `search_property` (type: `string`):

Which Google search the interest is measured on.

## `category_id` (type: `integer`):

Narrow to one Google Trends category by its numeric ID. 0 means all categories.

## `trending_hours` (type: `integer`):

How recent a trend must be to appear. Only used by Trending now.

## `proxy_country` (type: `string`):

Comma-separated 2-letter codes. Google limits how many requests one address may make, so residential proxies are recommended.

## Actor input object example

```json
{
  "mode": "Interest over time",
  "keywords": [
    "bitcoin",
    "ethereum"
  ],
  "timeframe": "Past 12 months",
  "search_property": "Web search",
  "category_id": 0,
  "trending_hours": 24,
  "proxy_country": "US,GB,DE,NL,FR"
}
```

# Actor output Schema

## `dataset` (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 = {
    "keywords": [
        "bitcoin",
        "ethereum"
    ]
};

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

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

```

## MCP server setup

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