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

Extract Google Trends data: daily trending searches, keyword interest over time, related queries and topics, regional interest. 150+ countries, category filters, Google property selection (Web, YouTube, News, Images, Shopping). From $1 per 1,000 trending results.

- **URL**: https://apify.com/sourabhbgp/google-trends-scraper.md
- **Developed by:** [Sourabh Kumar](https://apify.com/sourabhbgp) (community)
- **Categories:** SEO tools, Lead generation
- **Stats:** 73 total users, 9 monthly users, 100.0% runs succeeded, 1 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.00 / 1,000 trending 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?

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 has no official export API. This actor turns its public data into a clean, affordable pipeline: daily trending searches by country, or deep keyword interest analysis with related queries, topics, and regional breakdowns. **From $1 per 1,000 results, no per-run fee, 16 languages, 150+ countries.**

### ⚡ Why this Google Trends scraper?

- 💰 **From $1 per 1,000 results**: $1/1K for trending searches, $2/1K for keyword exploration. Pay only for what you get; empty runs cost nothing.
- 🔎 **Two modes in one actor**: daily trending + deep keyword exploration. No need to wire up two scrapers.
- 🌍 **150+ countries** via ISO codes, or worldwide.
- 🌐 **16 languages**: en, pt, es, fr, de, it, ja, ko, zh, ru, hi, ar variants — broader locale coverage than any other Google Trends actor on the store.
- 📅 **Historical backfill**: `daysBack` (1–90) plus `date` pulls trending snapshots for any past day or week.
- 📊 **Rich explore data**: interest over time, interest by region, related topics, related queries (top + rising) — bundled in a single record per keyword.
- 🚀 **Trending mode is pure HTTP** — RSS feed, no browser, no Playwright cold-start.
- 🛡️ **Resilient by default**: invalid input auto-fixes to safe defaults with a warning. Zero-result runs SUCCEED — you're not charged.
- 🧠 **512 MB default memory tier** (peaks ~300 MB on explore, ~160 MB on trending). Lower memory = lower compute cost per run.

I'd rather ship an actor that returns 0 results with a clear warning than one that fails the run and leaves you debugging logs.

### 🆚 Why not just use the official API?

There isn't one. Google Trends has no official export API, no API key, no client library. Your options are: scrape Google Trends, license a third-party panel (expensive, often gated), or estimate from another source.

| Concern | Other Google Trends actors | This actor |
|---|---|---|
| Trending + explore in one actor | Often split across 2–3 separate scrapers | One actor, both modes |
| Multi-language responses | Most are en-US only | 16 locales |
| Historical backfill | Same-day only | 90 days back via `daysBack` |
| MCP-friendly inputs | Free-text fields, easy to typo | Enum dropdowns on every multi-choice input |
| Per-run start fee | $0.005–$0.01 common | None |
| Price per 1K results | $4 to $10 | $1 (trending), $2 (explore) |

I won't name competitors. Compare for yourself on the [Apify Store](https://apify.com/store?search=google%20trends).

### 📊 What data can you extract?

<table>
  <tr>
    <td>🔥 Trending query</td>
    <td>📈 Approx. traffic</td>
    <td>📰 Related news</td>
    <td>📅 Snapshot date</td>
  </tr>
  <tr>
    <td>🔎 Keyword</td>
    <td>📉 Interest over time</td>
    <td>🌍 Interest by region</td>
    <td>🏷️ Related topics</td>
  </tr>
  <tr>
    <td>🔗 Related queries (top)</td>
    <td>🚀 Related queries (rising)</td>
    <td>🌐 Trends URL</td>
    <td>🗣️ Locale code</td>
  </tr>
</table>

#### 🔥 Trending mode fields

`query`, `geo`, `language`, `date`, `approxTraffic`, `trafficValue`, `timestamp`, `relatedNews[]` — one record per trending search.

#### 🔬 Explore mode fields

`keyword`, `geo`, `timeRange`, `category`, `googleProperty`, `trendsUrl`, `interestOverTime[]`, `interestByRegion[]`, `relatedTopics{top,rising}`, `relatedQueries{top,rising}` — one record per keyword.

### 🌍 Global & multi-language support

#### Native script support

Set `language` to localize labels, region names, and related queries. The actor returns native script as-is — Hangul, Kanji, Hiragana, Katakana, Cyrillic, Arabic (RTL), Devanagari.

#### 16 supported locales

`en-US`, `en-GB`, `pt-BR`, `pt-PT`, `es-ES`, `es-MX`, `fr-FR`, `de-DE`, `it-IT`, `ja-JP`, `ko-KR`, `zh-CN`, `zh-TW`, `ru-RU`, `hi-IN`, `ar-SA`.

#### Search in any language (explore mode)

```json
{ "mode": "explore", "keywords": "비트코인",          "geo": "KR", "language": "ko-KR" }
{ "mode": "explore", "keywords": "ビットコイン",       "geo": "JP", "language": "ja-JP" }
{ "mode": "explore", "keywords": "بيتكوين",            "geo": "SA", "language": "ar-SA" }
{ "mode": "explore", "keywords": "बिटकॉइन",            "geo": "IN", "language": "hi-IN" }
{ "mode": "explore", "keywords": "比特币",            "geo": "CN", "language": "zh-CN" }
```

#### A note on country/language pairs in trending mode

Google's trending RSS doesn't localize for every country/language combination. `geo=KR, language=ko-KR` and `geo=SA, language=ar-SA` return empty feeds because Google doesn't publish a localized trending feed for those pairs. If you get 0 trending results, retry with `language=en-US` or a different `geo`. The actor logs a warning and the run still SUCCEEDs.

### 🚀 How to scrape Google Trends: step by step

1. [Create a free Apify account](https://console.apify.com/sign-up). 30 seconds, no card needed.
2. Open [Google Trends Scraper](https://console.apify.com/actors/xeDvp8Y8h5CF6a7y2?addFromActorId=xeDvp8Y8h5CF6a7y2) in the Apify Console.
3. Pick a mode (`trending` or `explore`), set `geo`, and (for explore) paste comma-separated keywords.
4. Click **Start**. Trending runs finish in seconds. Explore runs cold-start a browser, then are quick — typical 13–20 seconds for 1–10 keywords.
5. Export as JSON, CSV, or Excel. Or fetch the dataset via the [Apify API](https://docs.apify.com/api/v2).

### 💲 How much does Google Trends Scraper cost?

Pay-per-result pricing, priced per mode. You only pay for results you receive:

- **Trending searches: $1.00 per 1,000 results** ($0.001 per record).
- **Keyword exploration: $2.00 per 1,000 results** ($0.002 per record).
- **Free plan yield: ~5,000 trending or ~2,500 explore results/month** ($5 monthly credits).
- **Starter plan yield: ~29,000 trending or ~14,500 explore results/month** ($29/month).
- **No per-run start fee.** Empty runs and runs that error out cost nothing.

| What you extract | Results | Cost |
|---|---|---|
| Today's trending in US | 10 | $0.01 |
| Trending across 5 countries | 50 | $0.05 |
| 100 keywords explored | 100 | $0.20 |
| 7-day trending backfill, 1 country | ~70 | ~$0.07 |
| 30-day trending backfill, 1 country | ~300 | ~$0.30 |

### 📥 Input

```json
{
    "mode": "trending",
    "geo": "US",
    "language": "en-US",
    "timezone": "America/New_York",
    "daysBack": 1,
    "maxResults": 10
}
```

Explore mode:

```json
{
    "mode": "explore",
    "keywords": "bitcoin, ethereum, solana",
    "geo": "US",
    "timeRange": "today 12-m",
    "category": "0",
    "googleProperty": "",
    "language": "en-US"
}
```

| Field | Type | Default | Notes |
|---|---|---|---|
| `mode` | enum | `trending` | `trending` or `explore`. |
| `keywords` | string | — | Comma-separated, max 100. Explore only. |
| `geo` | string | `US` | ISO 2-letter code. Empty = worldwide. |
| `timeRange` | enum | `today 12-m` | 8 options from past hour to past 5 years. Explore only. |
| `category` | enum | `0` (All) | 25 categories (Finance, News, Health, etc.). Explore only. |
| `googleProperty` | enum | `""` (Web) | Web, Images, News, YouTube, Shopping. Explore only. |
| `maxResults` | integer | `10` | 1–50. Caps trending items per day. Trending only. |
| `language` | enum | `en-US` | 16 locales. Both modes. |
| `daysBack` | integer | `1` | 1–90. Trending only. |
| `date` | string | (today) | YYYY-MM-DD end date for `daysBack` window. Trending only. |
| `timezone` | enum | `UTC` | IANA zone. Determines which "today" Google returns. Trending only. |

#### Time range values (explore mode)

`now 1-H` · `now 4-H` · `now 1-d` · `now 7-d` · `today 1-m` · `today 3-m` · `today 12-m` · `today 5-y`

### 📤 Output

#### Trending mode

```json
{
    "query": "Super Bowl halftime show",
    "geo": "US",
    "language": "en-US",
    "date": "2026-03-24",
    "approxTraffic": "500K+",
    "trafficValue": 500000,
    "timestamp": "2026-03-24T12:00:00Z",
    "relatedNews": [
        {
            "title": "Halftime show performer announced for Super Bowl LX",
            "url": "https://example.com/news/halftime-show",
            "source": "ESPN",
            "picture": "https://example.com/img/halftime.jpg"
        }
    ]
}
```

#### Explore mode

```json
{
    "keyword": "bitcoin",
    "geo": "US",
    "timeRange": "today 12-m",
    "category": "All categories",
    "googleProperty": "Web Search",
    "trendsUrl": "https://trends.google.com/trends/explore?q=bitcoin&date=today+12-m&geo=US",
    "interestOverTime": [
        { "date": "1711238400", "value": 72, "formattedDate": "Mar 23, 2026" },
        { "date": "1711152000", "value": 68, "formattedDate": "Mar 22, 2026" }
    ],
    "interestByRegion": [
        { "region": "California", "regionCode": "US-CA", "value": 100 },
        { "region": "New York", "regionCode": "US-NY", "value": 87 }
    ],
    "relatedTopics": {
        "top": [
            { "topic": "Cryptocurrency", "type": "Topic", "value": 100, "growth": null }
        ],
        "rising": [
            { "topic": "Bitcoin ETF", "type": "Financial instrument", "value": 3200, "growth": "+3,200%" }
        ]
    },
    "relatedQueries": {
        "top": [
            { "query": "bitcoin price", "value": 100, "growth": null }
        ],
        "rising": [
            { "query": "bitcoin halving 2026", "value": 850, "growth": "+850%" }
        ]
    }
}
```

Download as JSON, CSV, or Excel — or fetch via the Apify API.

### 🔀 Field availability by mode

| Field | Trending | Explore |
|---|:---:|:---:|
| `query` | ✅ | — |
| `keyword` | — | ✅ |
| `geo` | ✅ | ✅ |
| `language` | ✅ | — |
| `date` | ✅ | — |
| `approxTraffic` / `trafficValue` | ✅ | — |
| `relatedNews[]` | ✅ | — |
| `timeRange` / `category` / `googleProperty` | — | ✅ |
| `trendsUrl` | — | ✅ |
| `interestOverTime[]` | — | ✅ |
| `interestByRegion[]` | — | ✅ |
| `relatedTopics{top,rising}` | — | ✅ |
| `relatedQueries{top,rising}` | — | ✅ |

### 🎯 Use cases

- 📈 **SEO research**: surface rising queries before competitors and time content to peak interest.
- 🏪 **Demand forecasting**: read seasonal patterns for any product category.
- 📝 **Content strategy**: target rising related queries for blog posts, videos, and ad campaigns.
- 📡 **Trend monitoring**: schedule daily trending scrapes, catch viral topics within hours.
- 🔍 **Brand intelligence**: track your brand's search interest against competitors over time.
- 🌍 **Geo prioritization**: see where interest is highest before spending ad budget.
- 📰 **Journalism & research**: track public interest in news events, elections, and policy.

### 💡 Tips

- **Trending mode is fastest** — pure HTTP, no browser. Ideal for high-frequency scheduled runs.
- **Compare keywords in one run**: explore mode accepts comma-separated keywords; one record per keyword.
- **Rising > Top** for SEO: `relatedQueries.rising` shows breakout queries with huge % growth — usually the most actionable.
- **Historical depth**: pair `date` and `daysBack` to backfill any past period. `date=2026-01-07, daysBack=7` returns the week ending Jan 7. `maxResults` caps each day independently, not the total.
- **Set `timezone`** to your local IANA zone so "today" matches your business day.
- **Trending RSS caps at ~10 items/day/country.** Higher `maxResults` won't return more — use `daysBack` for depth instead.

### ❓ FAQ

#### How much does Google Trends Scraper cost?

Google Trends Scraper uses pay-per-result pricing, priced per mode. Trending searches are **$1.00 for 1,000 results**. Keyword exploration is **$2.00 for 1,000 results**. The Apify Free plan gives you $5 in monthly credits, enough for around 5,000 trending results or 2,500 explore results. If you run regularly, the $29/month Starter plan covers about 29,000 trending or 14,500 explore results.

No subscription lock-in. Pause whenever.

#### Is it legal to scrape Google Trends?

Scraping public data is generally allowed in the US and most of the EU, as long as you don't collect personal data covered by GDPR or CCPA without a lawful basis. Google Trends data is aggregated, anonymized, and publicly accessible — but how you use the output is on you.

Apify's full breakdown: [Is web scraping legal?](https://blog.apify.com/is-web-scraping-legal/).

#### Can I integrate Google Trends Scraper with other tools?

Push results into **Make, Zapier, Slack, Airbyte, GitHub, Google Sheets, Google Drive**, and more. Apify treats every actor as a webhook source, so anything that consumes webhooks or pulls from an API works.

Full list: [Apify integrations](https://docs.apify.com/platform/integrations).

#### Can I use Google Trends Scraper with the Apify API?

Yes. Every run is available via the Apify REST API:

```bash
curl -X POST "https://api.apify.com/v2/acts/sourabhbgp~google-trends-scraper/runs?token=APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"mode": "trending", "geo": "US", "maxResults": 10}'
```

Docs: [Apify API reference](https://docs.apify.com/api/v2).

#### Can I use Google Trends Scraper through an MCP server?

Yes. Apify ships an MCP server that exposes every actor as a tool, so Claude Desktop, Cursor, and any other MCP-capable client can call it directly. Every input is enum-validated where applicable (mode, language, timezone, category, time range, Google property), so MCP clients get a discoverable schema with no guessing.

Setup: [Apify MCP docs](https://docs.apify.com/platform/integrations/mcp).

### 💬 Your feedback

Bug, missing field, or odd behavior? Drop a note in the [Issues tab](https://console.apify.com/actors/xeDvp8Y8h5CF6a7y2/issues). Reports go to a human and fixes usually ship the same week.

# Actor input Schema

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

'trending' = daily trending searches by country. 'explore' = keyword interest over time, related queries/topics, and regional interest.

## `keywords` (type: `string`):

Comma-separated keywords to analyze. Used in 'explore' mode. Example: 'bitcoin, ethereum, solana'. Max 100 keywords.

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

ISO 2-letter country code (e.g., US, GB, DE, JP). Leave empty for worldwide. If you omit this field entirely, the search runs worldwide rather than the US shown in the form.

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

Time range for explore mode data.

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

Filter explore results by category.

## `googleProperty` (type: `string`):

Filter by Google property.

## `maxResults` (type: `integer`):

Maximum trending items per day. Google's RSS feed returns up to ~10 items per day, so values above 10 have no effect. With daysBack > 1, this caps each day independently (not total). Used in 'trending' mode only.

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

Locale code passed to Google Trends as 'hl'. Affects label/region/related-query language. Used in both modes.

## `timezone` (type: `string`):

IANA timezone name. Determines which 'today' Google returns for trending. Used in trending mode.

## `daysBack` (type: `integer`):

Number of days of trending data to fetch (ending on 'date'). 1 = current day only. Used in trending mode.

## `date` (type: `string`):

End date of the daysBack window. Defaults to today in the chosen timezone. Format: YYYY-MM-DD. Used in trending mode.

## `trendingConcurrency` (type: `integer`):

Parallel HTTP fetches in trending mode. Higher = faster + cheaper compute. Default 8, max 15.

## `exploreConcurrency` (type: `integer`):

Parallel Playwright pages in explore mode. Higher = faster but risk of rate limits. Default 3, max 5.

## Actor input object example

```json
{
  "mode": "trending",
  "keywords": "web scraping",
  "geo": "US",
  "timeRange": "today 12-m",
  "category": "0",
  "googleProperty": "",
  "maxResults": 10,
  "language": "en-US",
  "timezone": "UTC",
  "daysBack": 1,
  "trendingConcurrency": 8,
  "exploreConcurrency": 3
}
```

# Actor output Schema

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

Trending searches or keyword interest data.

# 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 = {
    "mode": "trending",
    "keywords": "web scraping",
    "geo": "US",
    "timeRange": "today 12-m",
    "category": "0",
    "googleProperty": "",
    "maxResults": 10,
    "language": "en-US",
    "timezone": "UTC",
    "daysBack": 1,
    "trendingConcurrency": 8,
    "exploreConcurrency": 3
};

// Run the Actor and wait for it to finish
const run = await client.actor("sourabhbgp/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 = {
    "mode": "trending",
    "keywords": "web scraping",
    "geo": "US",
    "timeRange": "today 12-m",
    "category": "0",
    "googleProperty": "",
    "maxResults": 10,
    "language": "en-US",
    "timezone": "UTC",
    "daysBack": 1,
    "trendingConcurrency": 8,
    "exploreConcurrency": 3,
}

# Run the Actor and wait for it to finish
run = client.actor("sourabhbgp/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 '{
  "mode": "trending",
  "keywords": "web scraping",
  "geo": "US",
  "timeRange": "today 12-m",
  "category": "0",
  "googleProperty": "",
  "maxResults": 10,
  "language": "en-US",
  "timezone": "UTC",
  "daysBack": 1,
  "trendingConcurrency": 8,
  "exploreConcurrency": 3
}' |
apify call sourabhbgp/google-trends-scraper --silent --output-dataset

```

## MCP server setup

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