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

Google Trends API without browser or login: interest over time, by region & city, related queries (rising/breakout), compare up to 5 terms, Trending now with search volume & news. Fast, 100% HTTP, no start fee.

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

## Pricing

from $1.50 / 1,000 keyword or comparison 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 – Interest Over Time, Regions, Related Queries & Trending Now

A **Google Trends API** without a browser, login or API key. For any keyword, in any country or worldwide, you get **interest over time**, **interest by region, city and US metro area**, and **top and rising related searches** (with "Breakout" and +% growth). You can also **compare up to 5 keywords** on one chart, or pull Google's **Trending now** list with **search volume, % increase, start time, related searches and news articles**.

It calls Google Trends' own data endpoints directly over plain HTTP, so runs are **fast and cheap**. When Google rate-limits, the Actor slows down, **switches IP and retries on its own**. Each keyword is one clean result with summary numbers already worked out (**average, peak, latest value, % change, rising/falling**) and a **plain-English summary** that an LLM can read directly. **No start fee.**

### What you can use it for

- **SEO & content planning**: find rising queries and seasonal peaks before you write, and see which states and cities search for a topic most.
- **Market research & product validation**: compare brands, products or ideas ("notion vs obsidian vs evernote") over 5 years in any country.
- **Trend monitoring**: schedule a daily run on your keywords and alert when `trendDirection` turns `rising` or a rising query shows "Breakout".
- **News, social & newsletter teams**: pull what's trending right now in the US, UK, Malaysia or 120+ other countries, with the news stories behind each trend.
- **E-commerce & ads**: use Google Shopping or YouTube search interest, and US metro (DMA) data for local ad targeting.
- **AI agents & dashboards**: every result has a `summary` sentence and flat stats fields, ready for LLMs, Sheets or BI tools.

### How to scrape Google Trends

1. **Create a free Apify account** (no credit card needed to start) and open this Actor.
2. **Add terms.** Type search terms in **Search terms** (one result per term and country), or put up to five in **Compare terms** to compare them on the same chart.
3. **Choose where and when.** Pick **Countries / regions** (or leave worldwide), a *Time range* or a custom date range, and optionally a *Category* and *Search type* (web, images, news, shopping, YouTube).
4. **Pick the breakdowns.** Switch on *Interest by region*, *Interest by city / metro* and *Related queries* as needed. For what is trending right now, fill the **Trending now** fields instead.
5. **Click Start.** Results appear in the **Output** tab while it runs.
6. **Download or connect.** Export as JSON, CSV, Excel or HTML, or read the dataset through the API, Make, Zapier, n8n, Google Sheets or a webhook.
7. **Automate it.** Open **Schedules** and run daily to build your own history of interest over time or of the trending list.

**Tips**

- Related topics are currently empty for automated requests on Google's side, so they are off by default.
- Terms without enough data are returned empty and are not charged.
- Pasting a Google Trends link into *Google Trends URLs* reproduces exactly that chart.

### Three ways to use it

1. **Keywords**: add `searchTerms` and `geos`. You get one result per keyword per location.
2. **Compare**: turn on `compareTerms` and up to 5 keywords share one chart, so their values are relative to each other, exactly like the Compare button on Google Trends. Or paste a Google Trends URL into `startUrls`.
3. **Trending now**: add country codes to `trendingGeos` to get today's trending searches.

You can mix all three in one run.

### Output

#### Keyword (`type: "keyword"`)

```json
{
  "type": "keyword",
  "searchTerm": "bitcoin",
  "geo": "US",
  "geoName": "United States",
  "timeRange": "today 12-m",
  "timeRangeLabel": "past 12 months",
  "granularity": "week",
  "category": 0,
  "property": "web",
  "trendsUrl": "https://trends.google.com/trends/explore?date=today%2012-m&q=bitcoin&hl=en-US&geo=US",
  "average": 34.3,
  "peakValue": 100,
  "peakDate": "2026-02-01",
  "latestValue": 15,
  "latestDate": "2026-10-11",
  "changePercent": -45.7,
  "trendDirection": "falling",
  "hasData": true,
  "interestOverTime": [
    { "date": "2025-10-12", "label": "Oct 12 – 18, 2025", "value": 42, "isPartial": false },
    { "date": "2025-10-19", "label": "Oct 19 – 25, 2025", "value": 30, "isPartial": false }
  ],
  "interestByRegion": [
    { "name": "Wyoming", "geoCode": "US-WY", "value": 100 },
    { "name": "Nevada", "geoCode": "US-NV", "value": 48 }
  ],
  "interestByCity": [
    { "name": "Miami Beach", "lat": 25.790654, "lng": -80.1300455, "value": 93 }
  ],
  "interestByMetro": [
    { "name": "Cheyenne WY-Scottsbluff NE", "geoCode": "759", "value": 100 }
  ],
  "relatedQueriesTop": [
    { "query": "bitcoin price", "value": 100, "exploreUrl": "https://trends.google.com/trends/explore?q=bitcoin+price&date=today+12-m&geo=US" }
  ],
  "relatedQueriesRising": [
    { "query": "spcx stock", "value": 14500, "growth": "Breakout", "exploreUrl": "https://trends.google.com/trends/explore?q=spcx+stock&date=today+12-m&geo=US" },
    { "query": "sandisk stock", "value": 3750, "growth": "+3,750%", "exploreUrl": "https://trends.google.com/trends/explore?q=sandisk+stock&date=today+12-m&geo=US" }
  ],
  "summary": "Google search interest for \"bitcoin\" in United States (past 12 months, web search, scale 0-100). Average 34.3, peak 100 on 2026-02-01, latest 15 on 2026-10-11. Last quarter of the period vs first quarter: -45.7% (falling). Top regions: Wyoming 100, Nevada 48, Kansas 48, … Top related searches: bitcoin price, bitcoin today, … Rising related searches: spcx stock (Breakout), sandisk stock (+3,750%), …",
  "scrapedAt": "2026-10-14T10:50:54.370051+00:00"
}
```

Values are Google's 0–100 index: 100 is the busiest point in the period and location, not a search count. `changePercent` compares the average of the last quarter of the period with the first quarter. `trendDirection` is `rising` above +10%, `falling` below −10%, otherwise `stable`. The last point is often `isPartial: true` (the current week or day isn't finished yet) and is left out of the change.

#### Comparison (`type: "comparison"`)

Same fields, but `interestOverTime[].values`, `averages`, `termStats` and `interestByRegion[].values` are keyed by term, and `relatedQueries` holds top/rising lists per term:

```json
{
  "type": "comparison",
  "searchTerms": ["nasi lemak", "roti canai", "mee goreng"],
  "geo": "MY",
  "timeRange": "today 5-y",
  "averages": { "nasi lemak": 69.3, "roti canai": 18.8, "mee goreng": 10.3 },
  "termStats": {
    "nasi lemak": { "average": 69.3, "peakValue": 100, "peakDate": "2025-01-26", "latestValue": 64, "changePercent": 29.1, "trendDirection": "rising" }
  },
  "interestOverTime": [{ "date": "2021-10-10", "values": { "nasi lemak": 45, "roti canai": 14, "mee goreng": 12 }, "isPartial": false }],
  "interestByRegion": [{ "name": "Federal Territory of Kuala Lumpur", "geoCode": "MY-14", "values": { "nasi lemak": 79, "roti canai": 14, "mee goreng": 7 } }]
}
```

#### Trending now (`type: "trending"`)

```json
{
  "type": "trending",
  "title": "galatasaray vs barcelona",
  "geo": "US",
  "geoName": "United States",
  "searchVolume": 200000,
  "searchVolumeLabel": "200K+",
  "increasePercent": 1000,
  "startedAt": "2026-10-13T16:50:00Z",
  "endedAt": null,
  "isActive": true,
  "categories": ["Sports"],
  "relatedSearches": ["galatasaray vs barcelona", "lamine yamal", "barca game", "where to watch galatasaray vs fc barcelona"],
  "news": [
    {
      "title": "Flick urges caution as Barcelona extend perfect start with Champions League win",
      "url": "https://www.espn.com/soccer/story/_/id/50177584/flick-barcelona-galatasaray-perfect-start-champions-league",
      "source": "ESPN",
      "publishedAt": "2026-10-13T23:09:00Z",
      "imageUrl": "https://encrypted-tbn0.gstatic.com/images?q=tbn:…"
    }
  ],
  "exploreUrl": "https://trends.google.com/trends/explore?q=galatasaray%20vs%20barcelona&date=now%201-d&geo=US",
  "timeWindowHours": 24
}
```

### Input

```json
{
  "searchTerms": ["chatgpt", "gemini", "claude"],
  "compareTerms": false,
  "geos": ["US", "GB", "MY"],
  "timeRange": "today 12-m",
  "category": "",
  "property": "",
  "includeRegions": true,
  "includeCities": true,
  "includeRelatedQueries": true,
  "trendingGeos": ["US"],
  "trendingHours": "24",
  "maxTrendingPerGeo": 50,
  "includeTrendingNews": true
}
```

| Field | Description |
|---|---|
| `searchTerms` | Keywords. Each one × each location = one result |
| `compareTerms` | Put up to 5 terms on one chart (one result per group) |
| `geos` | Country codes (`US`, `GB`, `DE`, `MY`…), sub-regions (`US-CA`, `GB-ENG`, `AU-NSW`) or empty for worldwide |
| `timeRange` | Past hour, 4 h, day, 7 days, 30 days, 90 days, 12 months, 5 years, or 2004–present |
| `customTimeRange` | Exact dates, e.g. `2024-01-01 2024-12-31` |
| `category` | Google Trends category, e.g. Finance, Shopping, Travel |
| `property` | Web, image, news, Google Shopping or YouTube search |
| `startUrls` | Google Trends explore URLs; their terms, location, dates, category and search type are used |
| `includeRegions` / `includeCities` / `includeRelatedQueries` | Choose which breakdowns to fetch. Cities also add US metro areas (DMA) for US locations |
| `trendingGeos` | Countries for Trending now |
| `trendingHours` | Trending window: 4, 24, 48 hours or 7 days |
| `trendingCategory` / `trendingActiveOnly` | Filter trending searches by category or keep only those still active |
| `maxTrendingPerGeo` | Keep the N biggest trends per country (0 = all, up to ~500) |
| `includeTrendingNews` / `newsPerTrend` | News articles per trending search (1–10) |
| `maxItems` | Hard cap on results (and on what you pay) |

### Pricing

Pay per result. **No start fee, no monthly rental**:

| Result | Price |
|---|---|
| Keyword or comparison (timeline + regions + cities + related queries, all in one result) | **$1.50 per 1,000** |
| Trending now search (with news articles) | **$0.50 per 1,000** |

Example: tracking 100 keywords in 3 countries every day costs about **$0.45 a day**. The top 50 trends in 5 countries cost **$0.13**. A keyword Google has no data for (too few searches) is returned with `hasData: false` and is **not charged**. Set **"Maximum cost per run"** to cap spending. The Actor stops cleanly at your limit.

### Use with AI (LangChain / LlamaIndex / CrewAI)

Every result has a `summary` sentence with the key numbers, so an LLM can reason about trends without parsing time series. With LangChain (`pip install langchain-apify`):

```python
from langchain_apify import ApifyWrapper
from langchain_core.documents import Document

apify = ApifyWrapper()  # reads APIFY_API_TOKEN
loader = apify.call_actor(
    actor_id="smoldesk/google-trends-scraper",
    run_input={"searchTerms": ["electric car", "heat pump"], "geos": ["US", "DE"], "trendingGeos": ["US"]},
    dataset_mapping_function=lambda r: Document(
        page_content=r.get("summary") or r.get("title", ""),
        metadata={k: r.get(k) for k in ("type", "searchTerm", "title", "geo", "trendDirection",
                                        "changePercent", "searchVolume", "trendsUrl")},
    ),
)
docs = loader.load()
```

Already have a run? Use `ApifyDatasetLoader(dataset_id="<run's dataset ID>", dataset_mapping_function=...)`. **LlamaIndex**: `ApifyActor` from `llama-index-readers-apify`. **CrewAI / Claude / MCP clients**: add the Actor as a tool through the Apify MCP server: `https://mcp.apify.com?actors=smoldesk/google-trends-scraper`.

### Tips

- **Values are relative.** Two separate keyword results can't be compared by their numbers. Turn on `compareTerms` to put them on the same scale.
- **Finer data**: past 7 days gives hourly points, past day 8-minute points, past 30/90 days daily points.
- **Ambiguous words** ("jaguar", "apple"): set a `category`.
- **Big lists**: hundreds of keywords are fine. The Actor paces itself to Google's limits, so expect roughly 20–30 keywords a minute (60 keywords with cities took 2 minutes in our tests). If Google throttles, it slows down instead of failing.
- **Monitoring**: schedule daily, then filter on `trendDirection` or on `growth: "Breakout"` in `relatedQueriesRising`.

### FAQ

**Is there an official Google Trends API?** Google announced an alpha Trends API in 2025 for a small group of approved testers only. This Actor gives you the same data as a ready-made API today: call it from Python, JavaScript, Make, Zapier, n8n or plain HTTP and get JSON, CSV or Excel back.

**Is this a pytrends alternative?** Yes. pytrends is no longer maintained and gets HTTP 429 errors quickly. This Actor handles rate limits, IP rotation and retries for you, and needs no Python setup.

**Do I need a Google account or proxies?** No. No login is needed. Apify datacenter proxy (on by default) is enough. Residential proxies are not needed.

**Why are related topics empty?** Since September 2026 Google returns an empty related-topics list to almost all automated requests, from any IP. Related queries (top and rising) are not affected and are included by default. You can still turn on `includeRelatedTopics` in case Google brings topics back.

**Why do some cities have no data?** Google only shows cities with enough searches, so niche keywords may have few or no cities. Regions and US metro areas usually have full coverage.

**Is it legal?** The Actor only reads public, aggregated, anonymised Google Trends data that anyone can see without logging in. No personal data is collected.

### Feedback

Found a bug or missing a field? Open an issue in the **Issues** tab. If the Actor saved you time, a short review on this page helps other people find it.

### More Actors from Smoldesk Studios

- [Weibo Scraper](https://apify.com/smoldesk/weibo-scraper): keyword and hashtag search, posts, comments, profiles and the hot-search board from China's biggest microblog, no login
- [Google Hotels Scraper](https://apify.com/smoldesk/google-hotels-scraper): hotel prices for your dates in any currency, ratings, review aspects and booking-site prices, worldwide
- [Bilibili Scraper](https://apify.com/smoldesk/bilibili-scraper): videos, danmaku, comments and creator stats from China's YouTube (哔哩哔哩)
- [Career Site Jobs Scraper](https://apify.com/smoldesk/career-site-jobs-scraper): jobs from 13,000+ company career pages (Greenhouse, Lever, Ashby, Workday…)
- [SEEK, JobStreet & JobsDB Scraper](https://apify.com/smoldesk/seek-jobs-scraper): jobs and salaries in 8 APAC countries
- [Shopify Store Analyzer](https://apify.com/smoldesk/shopify-store-analyzer): products, prices, apps and theme of any Shopify store
- [Substack Scraper](https://apify.com/smoldesk/substack-scraper): newsletters, subscriber counts and posts
- [Telegram Channel Scraper](https://apify.com/smoldesk/telegram-channel-scraper): public channel posts, views and media without an API key

# Actor input Schema

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

Keywords to look up on Google Trends, e.g. 'chatgpt' or 'nasi lemak'. Each term × each country becomes one result with interest over time, interest by region/city and related queries. Turn on 'Compare terms' to put up to 5 terms on one chart instead.

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

Compare the search terms against each other (groups of up to 5, like the Google Trends 'Compare' button). Values are then relative to the highest point of all terms in the group. One result per group per country.

## `geos` (type: `array`):

Two-letter country codes (US, GB, MY, DE…) or sub-regions (US-CA, GB-ENG, AU-NSW). Leave empty or type 'worldwide' for worldwide data. Every term is looked up in every location.

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

Period to look at. Shorter ranges give finer data points (minute / hour), longer ones daily, weekly or monthly points.

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

Optional exact dates, overrides Time range. Format 'YYYY-MM-DD YYYY-MM-DD', e.g. '2024-01-01 2024-12-31'. Ranges over ~9 months give weekly points, over ~5 years monthly.

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

Limit to searches in one Google Trends category (helps with ambiguous words like 'jaguar' or 'apple').

## `property` (type: `string`):

Which Google search to measure: web search, image search, news search, Google Shopping or YouTube search.

## `startUrls` (type: `array`):

Optional: paste Google Trends explore URLs (trends.google.com/trends/explore?...). Their own terms, country, dates, category and search type are used. Several comma-separated terms in one URL become a comparison.

## `includeRegions` (type: `boolean`):

Add interest by sub-region (states/provinces), or by country when the location is worldwide.

## `includeCities` (type: `boolean`):

Add interest by city with coordinates (Google only shows cities with enough searches, so small or niche terms may have few or none). For US locations also adds interest by metro area (DMA, e.g. 'New York NY'). Not available for comparisons.

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

Add the top and rising related searches (with 'Breakout' / +% growth).

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

Add top and rising related topics when Google provides them. Since September 2026 Google returns this list empty for most automated requests, so expect it to be empty; related queries are unaffected.

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

Country codes for Google's 'Trending now' list (e.g. US, GB, MY, IN). Each trending search becomes one result with search volume, % increase, start time, related searches and news articles. Leave empty to skip.

## `trendingHours` (type: `string`):

How far back Trending now looks.

## `trendingCategory` (type: `string`):

Only keep trending searches in this category.

## `trendingActiveOnly` (type: `boolean`):

Skip trends that have already ended.

## `maxTrendingPerGeo` (type: `integer`):

Keep only the biggest N trending searches (by search volume) per country. 0 = all (up to ~500 for the US in 24 h).

## `includeTrendingNews` (type: `boolean`):

Add the news articles Google links to each trending search (title, URL, source, time, image).

## `newsPerTrend` (type: `integer`):

How many news articles to add per trending search (1–10).

## `maxItems` (type: `integer`):

Stop after this many results in total (0 = no limit). You are never charged for more than this.

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

Interface language for names of regions, topics and dates, e.g. en-US, de, fr, ms.

## `maxConcurrency` (type: `integer`):

How many terms to fetch at the same time. Higher is faster but Google may slow you down; the Actor backs off and retries automatically.

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

Apify datacenter proxy (default) lets the Actor switch IP whenever Google rate-limits a request, so big runs finish fast. Residential proxies are not needed. If you turn it off the Actor backs off and falls back to datacenter proxies on its own.

## Actor input object example

```json
{
  "searchTerms": [
    "chatgpt",
    "claude"
  ],
  "compareTerms": false,
  "geos": [
    "US"
  ],
  "timeRange": "today 12-m",
  "category": "",
  "property": "",
  "includeRegions": true,
  "includeCities": false,
  "includeRelatedQueries": true,
  "includeRelatedTopics": false,
  "trendingGeos": [],
  "trendingHours": "24",
  "trendingCategory": "",
  "trendingActiveOnly": false,
  "maxTrendingPerGeo": 50,
  "includeTrendingNews": true,
  "newsPerTrend": 3,
  "maxItems": 0,
  "language": "en-US",
  "maxConcurrency": 3,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

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

One result per search term and location (type = keyword).

## `comparisons` (type: `string`):

Compared terms (type = comparison).

## `trending` (type: `string`):

Trending searches (type = trending).

# 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": [
        "chatgpt",
        "claude"
    ],
    "geos": [
        "US"
    ],
    "trendingGeos": [],
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

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

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

```

## MCP server setup

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