# Google Trends Scraper | Regions & Topics | from $2.5/1K (`thermostatic/google-trends-scraper`) Actor

Google Trends for any keyword list: interest over time, by region (down to city), related queries and topics, comparisons and Trending Now with news. Built-in proxies and quota retries, so runs don't fail. From $2.50 per 1,000 keywords with data, $3.00 with related topics. Empty keywords are free.

- **URL**: https://apify.com/thermostatic/google-trends-scraper.md
- **Developed by:** [Irving Ernesto Quezada Ramírez](https://apify.com/thermostatic) (community)
- **Categories:** SEO tools
- **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 reports

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 | Regions & Topics | from $2.5/1K

Get Google Trends data for any list of keywords: **interest over time,
interest by region (country, state, metro area, city), related queries and
related topics**, plus the **Trending Now** list with search volumes and
news. Runs finish, keywords come back with data or a clear reason, and
you only pay for keywords that returned data: **from $2.50 per 1,000
keywords; $3.00 per 1,000 with the default input, related topics
included.**

- **Every keyword gets an answer.** It either has data or says why not
  (for example "search volume too low"). Keywords without data are free.
- **No failed runs because of Google's rate limits.** A rotating proxy
  network is built in at no extra cost, and a refused request is retried
  on a fresh connection and IP, moving to a backup network if needed.
- **Everything trends.google.com shows, and more.** Compare keywords,
  locations or time periods; search topics instead of words; minute-by-minute
  data for the past hour; every value Google returns, including the raw
  responses if you want them.
- **More than 5 keywords on one scale.** Google compares at most 5
  terms at a time; this Actor can rescale 100+ keywords onto one shared
  0-100 scale.
- **Paste Google Trends links or a Google Sheet**, or type keywords.

### What you get

| Data | What it tells you |
|---|---|
| **Interest over time** | Search interest (0-100) per minute, 8 minutes, hour, day, week or month, depending on the time range, with averages, peaks and the latest value per keyword |
| **Interest by region** | Where people search most, by country, region/state, US metro area (DMA) or city, with coordinates for cities; optionally with Google's low-search-volume regions |
| **Region comparison** | Each keyword's share of searches in every region, and which keyword leads there |
| **Related queries** | Top and rising searches around your keyword, ranked, including "Breakout" terms (+5000% or more) |
| **Related topics** | Top and rising topics (brands, people, products...) with their Google topic IDs and types |
| **Location and period comparisons** | One keyword in up to 5 countries or regions, or over up to 5 periods (this year against last year, day by day), on one scale |
| **Trending now** | The top searches in a country or US state: search volume (e.g. "100K+"), growth %, start/end time, category, trend breakdown and news articles |
| **Catalog** | Every location code, category ID and Trending Now location Google Trends accepts, and topic IDs for your terms |
| **Year in Search** | Google's yearly top-search lists for any year and country Google published |

All keyword searches support **location** (worldwide, any country, region,
US metro), **time range** (past hour to 2004-present, or custom dates and
hours), **category** and **search type** (web, image, news, YouTube,
Shopping).

### Measured reliability

We benchmark the Actor on a fixed, varied keyword panel and publish the
numbers. Latest validation run, September 2026, default settings, every
request through our proxy network (a rotating datacenter pool with a
residential fallback pool; no request went out from the benchmark
machine's own connection). Google did not rate-limit this run: no request
was refused.

| Test | Result |
|---|---|
| 150 keywords, US, past 3 months, all 4 data types | **150 / 150 complete**, 0 failed, 0 partial, 58 s total |
| Varied panel: 44 keywords + 12 keywords normalized in 3 compare groups, across US / worldwide / UK news / Germany by city / US metro areas | **46 / 47 searches complete**, 0 failed, 0 partial; 1 UK news search had too little volume (a free "no data" item) |
| Low-volume controls (nonsense keywords) | 2 / 2 returned free "no data" items |
| Trending now, US, 50 trends with news | **50 / 50** with news articles |

Across the **199 keyword searches** of this run: 0 failures, 0 partial
results. Google does not always behave like that. In a run of the
previous build on a night when Google refused 113 requests, 148 of 150
keywords were complete and 2 came without related topics (HTTP 429 after
retries; such topics are now retried again later in the run); that run
also sent part of its traffic from the benchmark machine's own
connection, so we don't count it as a result of the proxy network. Rate
limits (HTTP 429) and the related-topics quota are retried automatically
(see the FAQ).

Speed, all four data types at the default concurrency: about **6.5
minutes per 1,000 keywords** when Google does not rate-limit (150 keywords
in 58 s), and up to about **22.5 minutes** in the heavily rate-limited run
above. That is about **0.05 to 0.19 compute units** per 1,000 keywords at
512 MB. Fewer data types are faster.

### Pricing

Pay per result. No monthly fee, and no charge for keywords without data.

| Event | You pay for | Free plan | Starter | Scale | Business |
|---|---|---|---|---|---|
| `keyword-report` | one keyword with data (interest over time, by region and/or related queries, whatever you asked for). In comparisons: each keyword, location or period that has data | $0.0025 | $0.0022 | $0.0019 | $0.0015 |
| `related-topics` | the related topics of one such keyword, when at least one topic was delivered | $0.0005 | $0.00045 | $0.0004 | $0.0003 |
| `trending-search` | one trending search (with news) | $0.0010 | $0.0009 | $0.0008 | $0.0006 |
| `catalog-item` | one catalog row (location, category, topic ID) or Year in Search entry | $0.0002 | $0.00018 | $0.00015 | $0.0001 |

That is **$2.50 per 1,000 keywords** on the free plan ($1.50 on Business),
**plus $0.50 per 1,000 keywords whose related topics you get** ($0.30 on
Business). The default input asks for all four data types, so keywords
with related topics come to **$3.00 per 1,000** ($1.80 on Business).
Results with status `no_data`, `error` or `skipped` are free,
and so is the anchor keyword repeated in normalized comparisons.

**Related topics are charged only when they were delivered.** Google
limits how often its related-topics data can be read; the Actor retries
it on other connections and again later in the run. When Google keeps
refusing despite the retries, a keyword can arrive without related topics:
its status is `partial`, `failedDataTypes` says why, and it is charged
the `keyword-report` only (its other data was delivered), not
`related-topics`. When Google answers that a keyword has no related topics
(common for niche keywords), `relatedTopics` is empty and the add-on is not
charged either. Don't need related topics? Leave `relatedTopics`
out of `dataTypes`: you pay the keyword report only, and the run is faster.

You can set a maximum charge per run in the run options: a result is only
delivered when the limit covers all of it (a comparison, or a keyword with
its topics, is never half paid), and the Actor stops cleanly when the limit
is reached; the run's status message then says so. A run that is moved to another server or
resurrected continues where it stopped and never charges twice for the
same result. One run takes up to 10,000 keywords. If fewer than 2% of a
run's keywords have data (checked every 500), the run stops and marks the
rest `skipped`: check the keywords, location and time range.

### Input examples

**Separate reports for a keyword list**, US, past 12 months:

```json
{
  "keywords": ["air fryer", "espresso machine", "standing desk"],
  "geo": "US",
  "timeRange": "today 12-m"
}
```

**Compare keywords head to head**, by US metro area, only the data you need:

```json
{
  "keywords": ["netflix", "hulu", "disney plus", "peacock", "max"],
  "compare": true,
  "geo": "US",
  "regionResolution": "DMA",
  "dataTypes": ["interestOverTime", "interestByRegion"]
}
```

**20 keywords on one scale** (groups of 5 linked by an anchor keyword):

```json
{
  "keywords": ["hulu", "netflix", "disney plus", "peacock", "paramount plus", "apple tv", "..."],
  "compare": true,
  "normalizeAcrossGroups": true,
  "anchorKeyword": "hulu",
  "timeRange": "today 5-y"
}
```

**One keyword in three countries**, or **this year against last year:**

```json
{ "keywords": ["pickleball"], "compareGeos": ["US", "GB", "AU"] }
```

```json
{ "keywords": ["black friday"], "geo": "US",
  "compareTimeRanges": ["2025-10-01 2025-12-31", "2024-10-01 2024-12-31"] }
```

**Topics instead of words** (counts every spelling and language), with
Google's raw responses:

```json
{ "keywords": ["coffee"], "resolveTopics": true, "includeRaw": true }
```

**Custom dates, news search, one category:**

```json
{
  "keywords": ["interest rates"],
  "geo": "GB",
  "customTimeRange": "2024-01-01 2024-12-31",
  "property": "news",
  "category": 7
}
```

**Copy links from trends.google.com, or read keywords from a Google Sheet**
(or any public CSV/TXT link):

```json
{
  "exploreUrls": ["https://trends.google.com/trends/explore?q=tea,coffee&geo=GB&date=today%205-y"],
  "keywordsFileUrl": "https://docs.google.com/spreadsheets/d/<your-sheet-id>/edit"
}
```

**Trending now** in California and the UK, past 48 hours, sports and
technology, biggest first:

```json
{
  "mode": "trending",
  "trendingGeo": "US-CA, GB",
  "trendingTimeWindow": "48",
  "trendingCategories": ["17", "18"],
  "trendingSort": "search-volume",
  "maxTrendingItems": 100
}
```

**Catalog** (location codes and category IDs to search with) and **Year in
Search:**

```json
{ "mode": "catalog", "catalogTypes": ["geos", "categories"], "autocompleteTerms": ["tesla"] }
```

```json
{ "mode": "yearInSearch", "yisYears": ["2025", "2024"], "yisGeos": ["US", "GLOBAL"] }
```

### Output example

One result per keyword (or per comparison). Lists are shortened here:

```json
{
  "keyword": "air fryer",
  "status": "ok",
  "error": null,
  "geo": "US",
  "timeRange": "today 12-m",
  "property": "web",
  "summary": [
    { "keyword": "air fryer", "average": 65.92, "peak": 100, "peakDate": "2026-04-12",
      "latest": 55, "latestDate": "2026-09-20", "latestIsPartial": true, "points": 53 }
  ],
  "interestOverTime": [
    { "keyword": "air fryer", "date": "2026-09-20", "formattedTime": "Sep 20 – 26, 2026",
      "value": 55, "formattedValue": "55", "hasData": true, "isPartial": true }
  ],
  "interestByRegion": [
    { "keyword": "air fryer", "geoCode": "US-WY", "geoName": "Wyoming", "value": 100, "hasData": true }
  ],
  "relatedQueries": [
    { "keyword": "air fryer", "type": "rising", "rank": 1, "query": "air fryer recall", "value": 14800,
      "formattedValue": "Breakout", "isBreakout": true }
  ],
  "relatedTopics": [
    { "keyword": "air fryer", "type": "top", "rank": 1, "topicId": "/g/12vzpn4zd", "title": "Air fryer",
      "topicType": "Topic", "value": 100, "formattedValue": "100" }
  ],
  "exploreUrl": "https://trends.google.com/trends/explore?q=air%20fryer&hl=en-US&geo=US",
  "resolution": { "interestOverTime": "WEEK", "interestByRegion": "REGION" },
  "failedDataTypes": {},
  "warnings": [],
  "fetchedAt": "2026-09-25T00:20:50Z"
}
```

In comparisons every row also names the compared `geo` or `timeRange`,
and `comparisonItems` lists what was compared.

A trending search:

```json
{
  "rank": 1,
  "googleRank": 1,
  "title": "falcons vs packers",
  "approxTraffic": "100K+",
  "searchVolume": 100000,
  "increasePercentage": 1000,
  "startedAt": "2026-09-24T20:50:00Z",
  "endedAt": null,
  "isActive": true,
  "categories": ["Sports"],
  "relatedQueries": ["thursday night football", "falcons", "packers vs falcons"],
  "articles": [
    { "title": "Falcons vs. Packers: Three must-know storylines…", "url": "https://www.nfl.com/news/…",
      "source": "NFL.com", "publishedAt": "2026-09-23T14:05:12Z", "imageUrl": "https://…" }
  ],
  "geo": "US",
  "timeWindowHours": 24
}
```

**Ready-made table views** in the Console: *Overview* (average, peak and
latest per keyword), *Interest over time*, *By region*, *Related queries*,
*Related topics*, *Trending now*, *Catalog* and *Year in Search*. Export
any of them as CSV, Excel or JSON, or read them through the API.

### FAQ

**Why don't runs fail?**
Google Trends answers bursts of requests with "429 Too Many Requests",
and most failed Trends runs come from that. This Actor sends each request
through a rotating proxy network. When Google refuses a request, it
switches to a fresh connection and IP, waits a moment and tries again,
moving to a backup network if needed. One stubborn keyword can't take the
run down: it comes back with `status: "error"` and a reason, and is free.
The Actor also watches the run timeout: about two minutes before it, no
new keyword starts, and keywords still running are stopped shortly after,
so the run still ends as *Succeeded* and keeps every result. The leftover
keywords, including any stopped half-way, are marked `skipped` and are
free; a resurrected run fetches them in full.

**What do the 0-100 numbers mean?**
They are Google's relative interest. 100 is the peak of the search (the
highest point in time, or the region with the highest share of searches),
50 means half as popular. They are not absolute search counts. Trending
now does give approximate volumes ("100K+").

**Compare mode or separate reports?**
Separate (the default): each keyword is scaled on its own, which is good
for spotting each keyword's own seasonality. Compare: up to 5 keywords
share one scale, so you can see which one is searched more. That is what
you see when you type several terms on trends.google.com. The price is per
keyword either way.

**How can more than 5 keywords share one scale?**
Turn on `normalizeAcrossGroups`. One *anchor* keyword is added to every
group of 5. The anchor's searches are the same in every group, so the
groups can be rescaled onto one common scale. The final values are 0-100
across all keywords. (One exception: if a run is resumed after a restart,
the groups it fetches again go onto the scale of the groups it had already
delivered, so all stay comparable; if Google's numbers changed in between,
their values can pass 100, and their `warnings` say so.) Pick an anchor with steady, medium-to-high
interest: a very dominant anchor pushes small keywords down to 0.
Each value keeps Google's original in-group number in `groupValue`, and
the repeated anchor is billed once.

**Terms or topics?**
A term ("jaguar") counts searches for those words; a topic (Jaguar, the
car maker) counts every search about it, in any language or spelling.
Turn on `resolveTopics` to search each keyword's best-matching topic, or
paste topic IDs (like `/m/02vqfm`) as keywords. Catalog mode's
`autocompleteTerms` lists the candidate topics for a term.

**Why did a keyword come back with "no\_data"?**
Google only shows data above a minimum search volume. Very niche
keywords, small regions and short time ranges often fall below it. These
results are free. Try a larger region, a longer time range or web search.

**What does "partial" mean?**
Some requested data types came back and at least one didn't; the
`failedDataTypes` field names it and says why. Most often it is related
topics: Google's related-topics quota runs out now and then, for seconds
(or minutes when many runs share the same network). The Actor retries a
refused request at once on another connection and a second network, holds
the keyword if that fails too (or if Google keeps rate-limiting it),
retries it while the run goes on and again at the end (for up to about 7
minutes) before saving it. In our latest benchmark (September 2026) every
keyword got its topics; an earlier 150-keyword run of the previous build,
which Google rate-limited heavily, left 2 of 150 without them. A keyword
without its topics is charged the keyword report only, not the
`related-topics` add-on, and so is a keyword Google has no related topics
for.

**Which region resolutions are available?**
Worldwide searches are broken down by country. A country can be broken
down by region or state and by city, and the US also by metro area (DMA).
A US state by metro area or city, other regions by city. If a resolution
isn't available for your location, the Actor uses Google's default and
adds a note in `warnings`.

**Where do I find location codes and category IDs?**
Run the Actor in Catalog mode: it lists every location code (down to US
metro areas), every category with its ID and path, and every location
that has a Trending Now list. A code Google doesn't know is caught before
any search runs and explained in a free result.

**Do I need a proxy?**
No. A rotating proxy network is built in and costs you nothing. You can
still add Apify Proxy or your own proxies in the input. Your own proxy
URLs replace the built-in network.

**What time zone are dates in?**
UTC. Every point has an ISO `date` and a Unix `timestamp`.

**Can I use it from my code, on a schedule, or with other apps?**
Yes. Run it through the Apify API, schedule it (for example a daily
Trending Now snapshot), or connect it to Make, Zapier, n8n, Google Sheets
or webhooks like any Apify Actor.

**Is scraping Google Trends allowed?**
The Actor reads publicly available, aggregated and anonymized Google
Trends data: the same numbers anyone sees on trends.google.com. It
collects no personal data. Make sure your use complies with the laws and
terms that apply to you.

***

Found a problem or missing a feature? Open an issue on the Actor's
*Issues* tab.

# Actor input Schema

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

Explore returns Google Trends data for your keywords. Trending now returns the list from trends.google.com/trending (search volume, growth, trend breakdown, news). Catalog lists the location codes, category IDs and topic IDs you can search with. Year in Search returns the ranked lists from trends.google.com/trends/yis.

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

Search terms, one per line. Google Trends topic IDs such as '/m/02vqfm' also work. Required in Explore mode unless you add explore URLs or a keywords file. Up to 10,000 per run (keywords file included).

## `compare` (type: `boolean`):

Off: each keyword gets its own report, scaled 0-100 on its own. On: keywords are compared on one relative scale in groups of up to 5 (Google's limit), like typing them side by side on trends.google.com. One result per group.

## `normalizeAcrossGroups` (type: `boolean`):

Compare mode with more than 5 keywords: repeats an anchor keyword in every group and rescales all groups onto one shared 0-100 scale, so keyword #3 and keyword #30 are directly comparable. Only interest over time is rescaled.

## `anchorKeyword` (type: `string`):

Keyword repeated in every group when putting more than 5 keywords on one scale. Default: your first keyword. Choose one with steady, mid-to-high interest; a very dominant anchor rounds small keywords to 0.

## `compareGeos` (type: `array`):

Compare each keyword across 2-5 locations on one scale, e.g. US, GB, DE (like 'coffee' in three countries on trends.google.com). One result per keyword. Replaces the Location field.

## `compareTimeRanges` (type: `array`):

Compare each keyword across 2-5 periods of the same length, e.g. '2025-01-01 2025-06-30' and '2024-01-01 2024-06-30'. Points are aligned by position (day 1 next to day 1). One result per keyword.

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

Country or region code: 'US', 'GB', 'DE', a state like 'US-CA', or a US metro like 'US-CA-807'. Leave empty for worldwide. Catalog mode lists every code.

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

Period to analyze. Past hour and 4 hours give one point per minute, past day every 8 minutes, past 7 days hourly, up to 90 days daily, 12 months and 5 years weekly, 2004-present monthly.

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

Overrides the time range: 'YYYY-MM-DD YYYY-MM-DD', e.g. '2024-01-01 2024-06-30' (daily up to about 9 months, then weekly, then monthly). Hourly: '2024-05-01T00 2024-05-03T12', up to 7 days.

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

Google Trends category ID; 0 = all categories. Examples: 7 Finance, 45 Health, 71 Food & Drink, 12 Business & Industrial, 5 Computers & Electronics. Catalog mode lists every ID.

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

Which Google search property to measure.

## `dataTypes` (type: `array`):

Pick only what you need; fewer data types make runs faster. Related topics add $0.50 per 1,000 keywords that have them (free plan); the other types do not change the price.

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

Breakdown for interest by region. Worldwide searches are by country only; a country by region (default), city, and metro area in the US; a US state by metro area (default) or city; other regions and metros by city. Unavailable combinations fall back to Google's default with a note in the result.

## `includeLowVolumeRegions` (type: `boolean`):

Ask Google for low-search-volume regions too (its 'Include low search volume regions' checkbox): many more countries and cities get a value. Regions still without data are listed with value 0.

## `resolveTopics` (type: `boolean`):

Looks up each keyword's best-matching Google topic (e.g. 'coffee' -> Coffee, beverage) and searches the topic, which also counts other spellings and languages. The topic ID and type are added to the result. Keywords that already are topic IDs are used as they are.

## `exploreUrls` (type: `array`):

Paste trends.google.com/trends/explore links: each becomes one result with the link's keywords, locations, time ranges, category and search type (links comparing locations or periods work too).

## `keywordsFileUrl` (type: `string`):

Link to a CSV or TXT file, or a Google Sheet shared as 'Anyone with the link can view'. Keywords are read from the first column (a 'keyword' header is skipped) and added to the list above. It must be on a public web address.

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

Where to read trending searches, e.g. 'US', 'GB', 'IN', or a state/region like 'US-CA'. Several, comma separated: 'US, GB, DE'. Catalog mode (trendingGeos) lists every supported location; there is no worldwide list.

## `trendingTimeWindow` (type: `string`):

Time window of the trending list.

## `trendingCategories` (type: `array`):

Only trends in these categories. Empty = all categories.

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

Skip trends whose search spike has already ended.

## `trendingSort` (type: `string`):

Order of the trending searches, as in the page's sort menu. Google's own position is kept in googleRank.

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

Stop after this many trending searches per location (in the chosen order). 0 = all of them (a big country has several hundred per day and over a thousand per week).

## `includeNews` (type: `boolean`):

Add the news articles Google shows for each trend (title, source, link, image, time).

## `maxNewsPerTrend` (type: `integer`):

Maximum number of news articles per trending search.

## `catalogTypes` (type: `array`):

Reference lists to download, one row each. Names follow the Language setting.

## `autocompleteTerms` (type: `array`):

Catalog mode: Google's topic suggestions (ID, title, type) for each term, as in the search box on trends.google.com. Use the IDs as keywords.

## `yisYears` (type: `array`):

Years to download, e.g. 2025, 2024. Default: last year. Google publishes a year's lists after it ends; some countries skip some years. At most 200 editions (years × countries) per run.

## `yisGeos` (type: `array`):

Country codes (e.g. US, GB, DE) or GLOBAL. Default: GLOBAL. Lists are in the country's language. At most 200 editions (years × countries) per run.

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

Interface language (hl) for names of regions, topics, categories and formatted dates, e.g. 'en-US', 'de', 'es-419', 'ja'.

## `includeRaw` (type: `boolean`):

Adds a 'raw' field with Google's unmodified responses (widgets, timelines, maps, related lists, trending entries) for anything the tidy fields leave out. Makes results much larger.

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

Optional. The Actor brings its own rotating proxy network at no extra cost to you. Add Apify Proxy or your own proxy URLs only if you need a specific exit; your own proxy URLs replace the built-in network.

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

Requests to Google in parallel. Leave empty for automatic (8 through the built-in proxy network, 5 through your proxy, 2 on a direct connection).

## Actor input object example

```json
{
  "mode": "explore",
  "keywords": [
    "coffee",
    "tea",
    "matcha"
  ],
  "compare": false,
  "normalizeAcrossGroups": false,
  "geo": "",
  "timeRange": "today 12-m",
  "category": 0,
  "property": "web",
  "dataTypes": [
    "interestOverTime",
    "interestByRegion",
    "relatedQueries",
    "relatedTopics"
  ],
  "regionResolution": "auto",
  "includeLowVolumeRegions": false,
  "resolveTopics": false,
  "trendingGeo": "US",
  "trendingTimeWindow": "24",
  "trendingActiveOnly": false,
  "trendingSort": "relevance",
  "maxTrendingItems": 50,
  "includeNews": true,
  "maxNewsPerTrend": 3,
  "language": "en-US",
  "includeRaw": false,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

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

Every item with all requested data types. Items with status no\_data, error or skipped explain why and are not charged.

## `overview` (type: `string`):

One row per keyword: average, peak and latest interest.

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

Trending mode: one row per trending search.

# 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": [
        "coffee",
        "tea",
        "matcha"
    ],
    "proxyConfiguration": {
        "useApifyProxy": false
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("thermostatic/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": [
        "coffee",
        "tea",
        "matcha",
    ],
    "proxyConfiguration": { "useApifyProxy": False },
}

# Run the Actor and wait for it to finish
run = client.actor("thermostatic/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": [
    "coffee",
    "tea",
    "matcha"
  ],
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}' |
apify call thermostatic/google-trends-scraper --silent --output-dataset

```

## MCP server setup

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