# Google Trends Scraper – Interest Over Time & Related Queries (`openharvest/google-trends-scraper`) Actor

Google Trends scraper without an API key: interest over time, interest by region (country, state, city, metro), related queries and topics (top and rising) and Trending now searches with volume. Compare up to 5 terms, any country, time range or category. Built-in 429 handling.

- **URL**: https://apify.com/openharvest/google-trends-scraper.md
- **Developed by:** [Enes Bulanık](https://apify.com/openharvest) (community)
- **Categories:** SEO tools, Marketing, AI
- **Stats:** 3 total users, 2 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$2.00 / 1,000 trend 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 & Related Queries

Google Trends scraper without an API key: interest over time, interest by region (country, state, city, metro), related queries and topics (top and rising) and Trending now searches with volume. Compare up to 5 terms, any country, time range or category. Built-in 429 handling.

**Price: $2 per 1,000 results.** A result is a whole report (e.g. a full 12-month timeline), not a single row. Failed or empty lookups are free.

### What data can you get?

| Report (`type`) | What you get |
|---|---|
| `interestOverTime` | The 0–100 interest timeline (minute, hourly, daily, weekly or monthly points depending on the time range) + **average, peak value & date, latest value**, partial-data flag |
| `interestByRegion` | 0–100 interest per country / state / city / metro, the **top region**, and – when comparing terms – each term's **% share** in every region |
| `relatedQueries` | **Top** and **rising** related searches with values, "Breakout" flags and Google Trends links |
| `relatedTopics` | Top and rising related topics (title, topic type, Knowledge Graph id) – see FAQ |
| `trendingNow` | What people search for **right now** in a country: search volume (e.g. 200K+), growth %, start/end time, active flag, categories, related searches ("trend breakdown") and news articles |

### Use cases

- **SEO & content planning** – find rising queries and seasonal peaks for your topics.
- **Market & product research** – compare brands, products or technologies side by side over 5 years.
- **E-commerce & demand forecasting** – feed weekly interest into forecasting models and see demand by region.
- **News and media monitoring** – pull the Trending now list every hour for newsrooms or alerts.
- **Finance & crypto research** – use search interest as an alternative-data signal.
- **AI agents & LLM apps** – let an agent answer "what is trending?" or "is X growing?" through MCP.

### How it handles Google's rate limits

Google Trends answers automated traffic with **HTTP 429 "Too Many Requests"** and can block an IP for hours. The Actor is built around that:

- **Retries** – every retry gets a fresh Google session (NID cookie) and, with Apify Proxy, a **new IP address**, with exponential backoff and jitter.
- **Residential fallback** – if Google keeps rate-limiting the datacenter proxy, the run switches to the RESIDENTIAL proxy group (if your plan includes it).
- **Token refresh** – if a chart request keeps failing, the Actor re-opens the Explore page for fresh widget tokens and tries again.
- **Pacing** – requests are sent one after another with a small gap, never in parallel bursts.
- **No failed runs on bad input** – an unknown or low-volume term produces a free `error` row (`NO_DATA`) and the run still finishes *Succeeded*.
- **Plain HTTP, no browser** – about 3–5 small requests per term.

### How to use it

1. Click **Try for free** or **Start**.
2. Enter **Search terms** (e.g. `chatgpt`, `gemini`). Up to 5 are compared on one chart, and longer lists are processed in groups of 5.
3. Choose **Location** (`US`, `GB`, `US-CA`… or empty = worldwide), **Time range** and **Data to collect**.
4. Optional: tick **Include Trending now searches**.
5. Click **Start**, then download the data as JSON, CSV, Excel or HTML, or connect it to Google Sheets, Make, Zapier, n8n or webhooks.

### Input

| Field | Type | Description |
|---|---|---|
| `searchTerms` | array of strings | Keywords. Empty = only Trending now. |
| `geo` | string | `US`, `GB`, `US-CA`, `US-NY-501`, or `""` for worldwide. Default `US`. |
| `timeRange` | enum | `past-hour`, `past-4-hours`, `past-day`, `past-7-days`, `past-30-days`, `past-90-days`, `past-12-months` (default), `past-5-years`, `all-time`, `custom`. |
| `startDate` / `endDate` | `YYYY-MM-DD` | Only for `custom`. |
| `outputs` | array | Any of `interestOverTime`, `interestByRegion`, `relatedQueries`, `relatedTopics`. Default: first three. |
| `compareTerms` | boolean | `true` (default): terms share one 0–100 scale (groups of 5). `false`: each term gets its own scale. |
| `trendingNow` | boolean | Also return Trending now searches. |
| `trendingGeo` | string | Country for Trending now (default: `geo`, or `US`). |
| `trendingHours` | enum | `4`, `24` (default), `48`, `168`. |
| `trendingActiveOnly` | boolean | Only trends that are still active. |
| `maxTrendingItems` | integer | Default 25, `0` = all (~500). |
| `property` | enum | `web` (default), `news`, `images`, `youtube`, `shopping`. |
| `category` | enum | Google Trends category, e.g. `7` = Finance, `20` = Sports. Default `0` (all). |
| `regionResolution` | enum | `auto`, `COUNTRY`, `REGION`, `CITY`, `DMA`. |
| `includeLowSearchVolumeRegions` | boolean | Include regions with low volume. |
| `outputFormat` | enum | `reports` (default) or `flat` – see below. |
| `language` | string | e.g. `en-US`, `de`, `tr`. |
| `proxyConfiguration` | object | Default: Apify Proxy (datacenter). Choose RESIDENTIAL for very large keyword lists. |

Example input:

```json
{
    "searchTerms": ["chatgpt", "gemini", "claude"],
    "geo": "US",
    "timeRange": "past-12-months",
    "outputs": ["interestOverTime", "interestByRegion", "relatedQueries"],
    "trendingNow": true,
    "maxTrendingItems": 25
}
```

### Output

#### Two output formats

- **`reports` (default, suited to APIs and AI agents):** one dataset item **per term per report**, with summary fields (average, peak, top region, top query…) plus the full data in an array (`timeline`, `regions`, `top`, `rising`).
- **`flat` (suited to Excel, Google Sheets, pivot tables):** one row **per data point** – one row per date, per region or per related query, with the same column names for every term. Price is identical: you pay per report, not per row.

Every item has a `type` (`interestOverTime`, `interestByRegion`, `relatedQueries`, `relatedTopics`, `trendingNow` or `error`) and the context fields `term`, `comparedWith`, `geo`, `timeRange`, `time`, `searchType`, `categoryId`, `exploreUrl` (opens the same chart in Google Trends) and `scrapedAt`. All dates are ISO 8601 in UTC.

Real sample output (input `["bitcoin", "ethereum"]`, US, past 12 months; arrays shortened):

**Interest over time** (`reports` format)

```json
{
    "type": "interestOverTime",
    "term": "bitcoin",
    "comparedWith": ["ethereum"],
    "geo": "US",
    "timeRange": "past-12-months",
    "time": "today 12-m",
    "searchType": "web",
    "categoryId": 0,
    "categoryName": "All categories",
    "exploreUrl": "https://trends.google.com/trends/explore?q=bitcoin%2Cethereum&date=today+12-m&geo=US&hl=en",
    "resolution": "WEEK",
    "pointCount": 53,
    "average": 34,
    "peakValue": 100,
    "peakDate": "2026-02-01T00:00:00.000Z",
    "latestValue": 17,
    "latestDate": "2026-10-04T00:00:00.000Z",
    "latestIsPartial": true,
    "timeline": [
        { "date": "2025-10-05T00:00:00.000Z", "formattedTime": "Oct 5 – 11, 2025", "value": 37, "isPartial": false },
        { "date": "2026-10-04T00:00:00.000Z", "formattedTime": "Oct 4 – 10, 2026", "value": 17, "isPartial": true }
    ],
    "scrapedAt": "2026-10-07T21:17:51.906Z"
}
```

**Interest by region** – `comparisonShare` = this term's share (%) of the compared terms in that region

```json
{
    "type": "interestByRegion",
    "term": "bitcoin",
    "comparedWith": ["ethereum"],
    "geo": "US",
    "regionResolution": "REGION",
    "regionCount": 51,
    "topRegion": "Wyoming",
    "topRegionCode": "US-WY",
    "regions": [
        { "geoCode": "US-WY", "geoName": "Wyoming", "value": 100, "comparisonShare": 82 },
        { "geoCode": "US-KS", "geoName": "Kansas", "value": 45, "comparisonShare": 86 }
    ]
}
```

**Related queries** – rising `value` is the % increase; `Breakout` means more than +5,000 %

```json
{
    "type": "relatedQueries",
    "term": "bitcoin",
    "topCount": 25,
    "risingCount": 25,
    "topItem": "bitcoin price",
    "topRisingItem": "spcx stock",
    "top": [
        { "query": "bitcoin price", "rank": 1, "value": 100, "formattedValue": "100", "isBreakout": false, "link": "https://trends.google.com/trends/explore?q=bitcoin+price&date=today+12-m&geo=US" }
    ],
    "rising": [
        { "query": "spcx stock", "rank": 1, "value": 12250, "formattedValue": "Breakout", "isBreakout": true, "link": "https://trends.google.com/trends/explore?q=spcx+stock&date=today+12-m&geo=US" }
    ]
}
```

**Trending now**

```json
{
    "type": "trendingNow",
    "rank": 1,
    "title": "hurricane isaias",
    "trendingGeo": "US",
    "timeWindowHours": 24,
    "searchVolume": 200000,
    "searchVolumeFormatted": "200K+",
    "increasePercentage": 900,
    "startedAt": "2026-10-06T20:40:00.000Z",
    "endedAt": null,
    "isActive": true,
    "categories": ["Climate"],
    "trendBreakdown": ["hurricane isaias", "hurricane", "hurricane in the gulf", "tropical storm isaias", "state of emergency"],
    "imageUrl": null,
    "newsArticles": [],
    "exploreUrl": "https://trends.google.com/trends/explore?q=hurricane+isaias&date=now+1-d&geo=US&hl=en"
}
```

`newsArticles` (`title`, `url`, `source`, `imageUrl`) is filled for the trends that appear in Google's Trending now RSS feed (roughly the 10 most recent ones).

**Flat rows** (`outputFormat: "flat"`) – the same data, one row per point:

```json
{ "type": "interestOverTime", "term": "bitcoin", "comparedWith": ["ethereum"], "geo": "US", "timeRange": "past-12-months", "resolution": "WEEK", "date": "2025-10-05T00:00:00.000Z", "formattedTime": "Oct 5 – 11, 2025", "value": 37, "isPartial": false }
{ "type": "interestByRegion", "term": "bitcoin", "geo": "US", "regionResolution": "REGION", "rank": 1, "geoCode": "US-WY", "geoName": "Wyoming", "value": 100, "comparisonShare": 82 }
{ "type": "relatedQueries", "term": "bitcoin", "geo": "US", "list": "top", "query": "bitcoin price", "rank": 1, "value": 100, "formattedValue": "100", "isBreakout": false }
```

**Error / no data (free)**

```json
{ "type": "error", "term": "zzqxv", "dataType": "interestOverTime", "errorCode": "NO_DATA", "error": "Not enough search volume for this term, region and time range (Google shows no data)." }
```

Possible `errorCode` values: `NO_DATA`, `NO_WIDGETS`, `RATE_LIMITED`, `IP_BLOCKED`, `UNSUPPORTED_GEO`, `TOKEN_OR_REQUEST`, `REQUEST_FAILED`.

The dataset has ready-made views in Apify Console: **Overview**, **Interest over time**, **Interest by region**, **Related queries & topics** and **Trending now**.

### Pricing

This Actor uses **pay-per-event** pricing. You pay only for results. Platform usage and proxies are included.

| Event | Price | What is one result? |
|---|---|---|
| `trend-result` | **$0.002** ($2 / 1,000) | One report for one term (`interestOverTime`, `interestByRegion`, `relatedQueries` or `relatedTopics`) **or** one Trending now search |
| Errors / no data | **Free** | Terms without data, failed requests, invalid input |

| Job | Results | Cost |
|---|---|---|
| 2 terms × 3 reports | 6 | **$0.012** |
| 1 term, all 4 reports | 4 | **$0.008** |
| 100 keywords, interest over time only | 100 | **$0.20** |
| 1,000 keywords × 3 reports | 3,000 | **$6.00** |
| Trending now, top 25 | 25 | **$0.05** |

Tip: set **Max cost per run** in the run options. The Actor stops cleanly when your budget is reached.

### Reliability, 429 errors and proxies

Google Trends limits how many requests one IP address can make. In our tests from a single IP **without a proxy**, about 1 in 20 chart requests got a transient HTTP 429 (all recovered automatically by the retry logic), but after roughly **80–100 requests within ~10 minutes** (≈ 25–30 terms) Google blocked the IP entirely with its "unusual traffic" page, and that block lasted **several hours**. For anything beyond a few terms, use a proxy that changes IPs. What this means for you:

- **Apify Proxy (default, datacenter):** every retry uses a different IP, so a single 429 costs a second or two instead of failing the run. Recommended for most jobs.
- **Automatic fallback:** if the datacenter proxy is rate-limited several times in a row, the Actor switches to **RESIDENTIAL** proxy automatically (if your plan allows it).
- **RESIDENTIAL proxy:** choose it in *Proxy configuration* for very large keyword lists (hundreds or thousands of terms) or if you still see many 429 warnings.
- **No proxy:** works for a handful of terms, but long lists will hit Google's IP block. If that happens the Actor stops early with a log message and free error rows instead of retrying for minutes.

A few `HTTP 429 ... retrying` warnings in the log are normal. The Actor retries them automatically.

### Use with AI agents (MCP)

Add the Actor as a tool in the [Apify MCP server](https://mcp.apify.com) (`https://mcp.apify.com?tools=openharvest/google-trends-scraper`), or let agents find it with `search-actors` ("google trends"). An agent can then answer questions such as *"Is interest in solar panels growing in Germany?"* or *"What is trending in the UK right now?"*. The default `reports` format is compact and self-describing (`average`, `peakDate`, `latestValue`, `topRegion`, `topItem`, `topRisingItem`), so agents rarely need the full arrays.

Example tool input an agent might send:

```json
{
    "searchTerms": ["solar panels", "heat pump"],
    "geo": "DE",
    "timeRange": "past-5-years",
    "outputs": ["interestOverTime", "relatedQueries"]
}
```

Trending-now only:

```json
{ "trendingNow": true, "trendingGeo": "GB", "maxTrendingItems": 10 }
```

### FAQ

**Do I need a Google account or API key?**
No. The Actor reads the same public data you see on trends.google.com, without login.

**What do the 0–100 values mean?**
Google Trends values are relative: 100 is the peak popularity of the term (or of the most popular compared term) in the chosen region and time range, 50 is half as popular. They are not absolute search counts. Trending now is different: it shows approximate absolute search volumes (e.g. `200K+`).

**Why do values change when I compare different terms?**
Compared terms share one scale. If you compare more than 5 terms they are split into groups of 5 and each group has its own scale. Set `compareTerms` to `false` to give every term its own 0–100 scale.

**Why are related topics sometimes empty?**
Google Trends often returns an empty related-topics list to automated requests (and always for low-volume terms). When that happens you get a free `NO_DATA` row and are not charged. Related **queries** are not affected.

**Why is the last data point marked `isPartial`?**
The current week/day/hour is still in progress, so Google marks it as partial.

**Why does a term have no data?**
Google only shows terms with enough search volume. Low-volume terms produce a free `NO_DATA` error row.

**Which countries support Trending now?**
All countries listed on trends.google.com/trending (US, GB, DE, IN, BR, JP, TR and ~120 more). Use a 2-letter code.

**Can I run it on a schedule?**
Yes. Use Apify Schedules, e.g. Trending now every hour or weekly interest for your keyword list, and send the results to Google Sheets, Slack or a webhook.

### Is it legal to scrape Google Trends?

Google Trends publishes **anonymised, aggregated** search statistics; this Actor collects only that public data and no personal information. You are responsible for using the data in line with applicable laws and Google's Terms of Service. The Actor is not affiliated with or endorsed by Google. If you are unsure about your use case, consult a lawyer.

### Related actors

Other actors by the same developer:

- *Keyword Suggestions – Google, YouTube & Amazon Autocomplete*: long-tail keyword ideas to check in Trends
- *Google News Scraper – Full Article Text & Real Publisher URLs*: the news behind a spike in interest
- *YouTube Transcript Scraper – Captions, Subtitles & Video Data*: what videos on a trending topic actually say
- *Telegram Channel Scraper – Posts, Messages & Views, No Login*: public Telegram posts, views and media

### Support & feedback

Found a bug or need another field? Open an issue in the **Issues** tab.

# Actor input Schema

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

Keywords to look up in Google Trends. Up to 5 terms are compared on the same 0-100 scale (like typing them into Trends side by side); longer lists are processed in groups of 5. Leave empty to get only Trending now searches.

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

Country or region code: <code>US</code>, <code>GB</code>, <code>DE</code>, a sub-region such as <code>US-CA</code>, a US metro such as <code>US-NY-501</code>, or leave empty for <b>worldwide</b>.

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

Period to analyse. Shorter ranges return finer data points: past hour = 1-minute points, past day = 8-minute points, past 7 days = hourly, up to 90 days = daily, 12 months / 5 years = weekly, all time (since 2004) = monthly. Choose <code>custom</code> to set start and end dates.

## `startDate` (type: `string`):

Only used when Time range = custom. Format YYYY-MM-DD, not earlier than 2004-01-01.

## `endDate` (type: `string`):

Only used when Time range = custom. Format YYYY-MM-DD. Defaults to today.

## `outputs` (type: `array`):

Which Google Trends reports to return for every search term. Each report for each term is one billable result.

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

On (default): terms are compared in groups of up to 5, so values are relative to each other (100 = the most popular term's peak). Off: every term is looked up on its own and gets its own 0-100 scale.

## `trendingNow` (type: `boolean`):

Also return the current Trending now list (what people are searching for right now) with search volume, growth %, start time, categories, related searches and news articles. Each trending search is one billable result.

## `trendingGeo` (type: `string`):

2-letter country code for Trending now, e.g. <code>US</code>, <code>GB</code>, <code>IN</code>, <code>DE</code>. Leave empty to use the Location above (or US when that is worldwide).

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

Show searches that started trending in the past 4 hours, 24 hours, 48 hours or 7 days.

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

Skip trends that have already ended.

## `maxTrendingItems` (type: `integer`):

Maximum number of Trending now searches to return (Google lists up to ~500 per country). 0 = all. You pay per trending search, so this also caps your cost.

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

Which Google search property to analyse - the same as the 'Web search' dropdown in Google Trends.

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

Restrict results to a Google Trends category (helps with ambiguous terms like 'apple' or 'jaguar').

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

Level of detail for Interest by region. Auto = countries for worldwide, sub-regions (states) for a country. City and Metro (DMA, US only) are also available.

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

Also list regions with little search volume (same as the checkbox in Google Trends).

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

<b>Reports</b> (default): one dataset item per term and report type, with summary fields (average, peak, top region, top query) and the full data in an array - best for APIs and AI agents. <b>Flat rows</b>: one row per data point (date, region or query) - best for Excel, Google Sheets and pivot tables. Pricing is the same: you pay per report, not per row.

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

Interface language for region names, topic titles and Trending now (e.g. <code>en-US</code>, <code>de</code>, <code>tr</code>).

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

Google Trends rate-limits (HTTP 429) aggressively. Apify Proxy (default, datacenter) gives every retry a new IP, which keeps runs reliable. For very large jobs or if you still see many 429 warnings, switch to the RESIDENTIAL proxy group.

## Actor input object example

```json
{
  "searchTerms": [
    "bitcoin",
    "ethereum",
    "solana"
  ],
  "geo": "US",
  "timeRange": "past-12-months",
  "startDate": "2024-01-01",
  "endDate": "2024-12-31",
  "outputs": [
    "interestOverTime",
    "relatedQueries"
  ],
  "compareTerms": true,
  "trendingNow": false,
  "trendingGeo": "GB",
  "trendingHours": "24",
  "trendingActiveOnly": false,
  "maxTrendingItems": 25,
  "property": "web",
  "category": "0",
  "regionResolution": "auto",
  "includeLowSearchVolumeRegions": false,
  "outputFormat": "reports",
  "language": "en-US",
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

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

All scraped items in the default dataset (JSON, CSV, Excel and more via the dataset export).

## `files` (type: `string`):

Records saved in the default key-value store, e.g. the run summary.

# 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",
        "gemini"
    ],
    "geo": "US",
    "outputs": [
        "interestOverTime",
        "interestByRegion",
        "relatedQueries"
    ],
    "maxTrendingItems": 25,
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("openharvest/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",
        "gemini",
    ],
    "geo": "US",
    "outputs": [
        "interestOverTime",
        "interestByRegion",
        "relatedQueries",
    ],
    "maxTrendingItems": 25,
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("openharvest/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",
    "gemini"
  ],
  "geo": "US",
  "outputs": [
    "interestOverTime",
    "interestByRegion",
    "relatedQueries"
  ],
  "maxTrendingItems": 25,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call openharvest/google-trends-scraper --silent --output-dataset

```

## MCP server setup

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