# Google Trends Scraper: Compare Unlimited Terms (`famed_bonobo/google-trends-scraper`) Actor

Google Trends data without a browser: interest over time, interest by region, related queries with Breakout growth and Trending now with news. Compare any number of terms on one 0-100 scale, not just five.

- **URL**: https://apify.com/famed_bonobo/google-trends-scraper.md
- **Developed by:** [Axel Zúñiga](https://apify.com/famed_bonobo) (community)
- **Categories:** SEO tools, Marketing, AI
- **Stats:** 2 total users, 1 monthly users, 87.5% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.28 / 1,000 keywords

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?

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](https://trends.google.com/trends/) data as clean, structured results: **interest over time**, **interest by region**, **related queries** with Breakout growth, the **Trending now** searches of any country with their news, and the **Google topic ids** behind your search terms. No browser, no login, no API key.

Its one feature no other Google Trends scraper has: **compare any number of terms on one 0-100 scale**. Google compares at most 5 terms at a time and rescales every comparison, so results from separate comparisons cannot be read against each other. This Actor chains the comparisons through an anchor term and puts all your terms on one scale. Checked against Google's own 5-term comparison, the values differ by 0.03 points on average.

### What you can use it for

- **Keyword and SEO research**: see which of your 200 keywords people search most, and when, on one scale.
- **Seasonality**: find the weeks and months a product, topic or brand peaks, with weekly data back to 2004.
- **Content ideas**: related queries show what people search along with a term, and Breakout queries show what is growing fastest.
- **Market sizing by region**: rank countries, states, cities or ad markets by interest in a term.
- **News and social monitoring**: schedule Trending now for your countries and get what people search, how fast it grows, in which category, with the news behind it.
- **Dashboards, models and AI agents**: feed Google's search interest into a spreadsheet, BI tool or forecast, as JSON, CSV or Excel.

### What data you get

| Mode | What you get |
|---|---|
| **Keywords** | For each term and region: the timeline (date, value 0-100, partial-period flag), a summary (average, peak, latest), the regions by interest with coordinates for cities, the top and rising related queries with growth and a Breakout flag, and the link to the same chart on Google Trends |
| **Trending now** | For each country: every trending search in Google's order, with the lower bound of its searches (`20K+`), growth in percent, when it started and whether it still trends, Google's categories, related searches and, if you ask, news articles with source, time and image |
| **Topic suggestions** | For a text such as `python`: the topics Google suggests (Python the language, the snake, books) with their Knowledge Graph ids, which make a search exact |

#### Period and detail

| Period | Points Google gives |
|---|---|
| Past hour, 4 hours, 24 hours, 7 days | every minute up to every hour |
| Past 30 and 90 days | daily |
| Past 12 months and 5 years | weekly |
| 2004 to now | monthly |
| A period of your choice | `2024-01-01 2024-06-30`, or hour by hour within 7 days |

You can also search Google Images, News, YouTube or Shopping instead of Web Search, narrow by Google's categories, and choose the language of Google's texts.

### How to use it

1. Pick **What to get**: Keywords, Trending now or Topic suggestions.
2. For Keywords, list your **search terms**, the **regions** (`US`, `GB`, a state such as `US-CA`, or empty for worldwide) and the **period**.
3. To compare terms, choose **Together** (up to 5 terms on one scale) or **Anchored** (any number of terms on one scale).
4. Run it and download the results as JSON, CSV, Excel or HTML, or read them through the Apify API.

#### Input example: compare 8 languages on one scale

```json
{
  "terms": ["python", "javascript", "java", "rust", "golang", "php", "ruby", "kotlin"],
  "geos": ["US"],
  "timeRange": "past5Years",
  "comparison": "anchored",
  "anchorTerm": "python"
}
```

#### Input example: what is trending in Costa Rica, with news

```json
{
  "mode": "trendingNow",
  "trendingGeos": ["CR"],
  "trendingHours": 24,
  "newsPerTrend": 3
}
```

### Output example

```json
{
  "term": "python",
  "geo": "US",
  "timeRange": "today 12-m",
  "comparison": "together",
  "comparedWith": ["javascript"],
  "granularity": "week",
  "timeline": [
    {"date": "2025-10-12", "timestamp": 1760227200, "value": 58, "hasData": true, "isPartial": false}
  ],
  "summary": {"average": 62.2, "peakValue": 100, "peakDate": "2026-06-14", "latestValue": 36},
  "regions": [{"geoCode": "US-WY", "geoName": "Wyoming", "value": 100, "latitude": null, "longitude": null}],
  "relatedQueries": {
    "top": [{"query": "what is python", "value": 100, "trendsUrl": "https://trends.google.com/trends/explore?q=what+is+python&date=today+12-m&geo=US"}],
    "rising": [{"query": "python swallowing deer india", "value": 8550, "isBreakout": true, "trendsUrl": "https://trends.google.com/trends/explore?q=python+swallowing+deer+india&date=today+12-m&geo=US"}]
  },
  "trendsUrl": "https://trends.google.com/trends/explore?q=python%2Cjavascript&date=today+12-m&geo=US"
}
```

Trending now rows look like this:

```json
{
  "rank": 1,
  "query": "posiciones de atlante fc contra club universidad nacional",
  "geo": "CR",
  "startedAt": "2026-10-17T05:20:00Z",
  "isActive": true,
  "searchVolume": 2000,
  "searchVolumeLabel": "2K+",
  "volumeGrowthPercent": 1000,
  "categories": [{"id": 17, "name": "Sports"}],
  "news": [{"title": "...", "source": "...", "url": "...", "publishedAt": "...", "imageUrl": "..."}]
}
```

### Result layouts

- **One result per term** (default): the timeline, regions and related queries together, one result per term and region.
- **One row per timeline point**: set the result layout to timeline rows to get `term, geo, date, value` rows that go straight into a spreadsheet or chart. You are charged the same.

### Pricing

You pay per result, with the Apify platform cost of the run included. A result is one term in one region (with its timeline, regions and related queries), one trending search, or one suggested topic. Volume discounts apply automatically with your Apify plan. See the pricing table above for the current prices.

### What to know

- **Values are relative.** Google Trends gives interest from 0 to 100, where 100 is the highest point of the highest term in the comparison. It does not give search counts. Trending now volumes are the lower bound Google shows, such as `20K+`.
- **Related topics are not offered.** Google returns an empty list of related topics to every automated session, so this Actor does not pretend to provide it. Related queries work, and Topic suggestions gives topic ids.
- **Anchored comparisons need an anchor with steady interest.** If the anchor term is almost never searched in the period, the comparison cannot be scaled and the Actor says so. When the anchor is faint in some group, the result is marked `isPrecise: false`.
- **Region levels depend on the search.** Google offers countries for a worldwide search and states for a country. Cities and ad markets work for a single country; when Google does not offer a level, regions are left out and the rest is still delivered.
- **Public data only.** Google Trends data is aggregate, anonymous search interest. The Actor collects no personal data.
- **Limits.** Up to 2,000 terms and 100 regions per run. Google limits how fast one address can ask, so the Actor paces itself: about 30 terms a minute with regions and related queries, more without them. For large jobs, split the terms over several runs or give the Actor proxy addresses to spread the requests over.

### Legal

This Actor collects publicly available aggregate data from Google Trends. You are responsible for using it in line with Google's terms and the laws that apply to you.

# Actor input Schema

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

Keywords gives the interest over time, the interest by region and the related queries of your search terms. Trending now lists what is trending on Google right now in a country, with search volume, growth, categories and news. Suggestions finds the Google topic (with its id) behind a text such as "python" the programming language or the snake.

## `terms` (type: `array`):

Keywords mode and Suggestions mode. Up to 2,000 searches per run. A text such as "python" matches every search that contains it; a topic id such as "/m/05z1\_" (find ids with Suggestions mode) is exact and counts searches in all languages.

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

Keywords mode. Country codes such as "US" or "GB", states such as "US-CA", or leave empty for worldwide. Each region is searched on its own, so 3 terms in 2 regions give 6 results.

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

The period to chart. Up to 7 days Google gives minute-by-minute points, up to 90 days daily, up to 5 years weekly, and for all data monthly.

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

Replaces the period above. Two dates like "2024-01-01 2024-06-30" (from 2004 to today), or, for hour-by-hour data in a window of up to 7 days, two hours like "2026-10-10T08 2026-10-12T20" (UTC).

## `comparison` (type: `string`):

Separate: each term is charted on its own, its highest point is 100. Together: up to 5 terms share one scale, so you see which is bigger. Anchored: any number of terms share one scale, by comparing them in groups through one anchor term.

## `anchorTerm` (type: `string`):

Anchored comparison only. A term with steady, high interest; every group of terms is compared through it. The first search term when empty.

## `searchType` (type: `string`):

Google Web Search, or one of its other searches.

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

Google Trends category id that narrows what the term means, such as 31 for Programming. 0 means all categories.

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

Add, for each term, the regions where it is searched most (states of a country, countries worldwide).

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

Auto lets Google choose: countries for a worldwide search, states for a country. Other levels work where Google offers them, for example cities or ad markets (DMA) in a country.

## `includeLowSearchVolumeRegions` (type: `boolean`):

Also list regions where the term is searched very little.

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

Add, for each term, the top searches and the rising searches (with their growth, or "Breakout" above 5,000 %) that people made along with it.

## `outputFormat` (type: `string`):

One result per term and region with its timeline inside, or one row per point of the timeline (easier for spreadsheets and charts; the price is the same).

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

Language of Google's names and texts, such as "en-US", "es" or "de". It does not change which searches are counted.

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

Trending now mode. Country codes such as "US", "GB" or "CR", or states such as "US-CA".

## `trendingHours` (type: `integer`):

How far back Google looks for searches that grew, from 1 to 191 hours. Its page offers 4, 24, 48 and 168 (7 days).

## `maxTrendsPerGeo` (type: `integer`):

The first trends of Google's list, which is ordered by search volume. 0 means all (often 200 to 500).

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

News articles Google shows with each trend (title, source, link, time, image). 0 for none.

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

Leave Apify Proxy off for most runs: the Actor then reaches Google Trends from the platform's own address, which Google answers. For very large runs, residential proxies add addresses to spread the requests over. Google Trends currently turns away datacenter proxies.

## Actor input object example

```json
{
  "mode": "keywords",
  "terms": [
    "python",
    "javascript"
  ],
  "geos": [
    "US"
  ],
  "timeRange": "past12Months",
  "comparison": "separate",
  "searchType": "web",
  "category": 0,
  "includeRegions": true,
  "regionResolution": "auto",
  "includeLowSearchVolumeRegions": false,
  "includeRelatedQueries": true,
  "outputFormat": "perKeyword",
  "language": "en-US",
  "trendingGeos": [
    "US"
  ],
  "trendingHours": 24,
  "maxTrendsPerGeo": 0,
  "newsPerTrend": 0,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `results` (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 = {
    "terms": [
        "python",
        "javascript"
    ],
    "geos": [
        "US"
    ],
    "customTimeRange": "",
    "language": "en-US",
    "trendingGeos": [
        "US"
    ],
    "proxyConfiguration": {
        "useApifyProxy": false
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("famed_bonobo/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 = {
    "terms": [
        "python",
        "javascript",
    ],
    "geos": ["US"],
    "customTimeRange": "",
    "language": "en-US",
    "trendingGeos": ["US"],
    "proxyConfiguration": { "useApifyProxy": False },
}

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

```

## MCP server setup

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