Google Trends Scraper (Batch, Reliable) avatar

Google Trends Scraper (Batch, Reliable)

Pricing

Pay per usage

Go to Apify Store
Google Trends Scraper (Batch, Reliable)

Google Trends Scraper (Batch, Reliable)

Private probe that reads Google Trends interest over time and related queries for a small batch of keywords.

Pricing

Pay per usage

Rating

0.0

(0)

Developer

Ross AI

Ross AI

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

5 days ago

Last modified

Share

This trends scraper collects Google Trends for a list of keywords in one run. Google does not offer a public Google Trends API for this data, so the actor calls the same JSON endpoints the Trends site uses. There is no API key to paste in.

It is built for keyword research: interest over time, interest by region, and related queries and topics (top and rising). Download the dataset as a CSV when you want the batch in a spreadsheet.

Google compares at most five keywords in one chart. Send a longer list and the actor chunks it into groups of five. If you need the 0–100 scores to be comparable across the whole list, switch to anchor mode and pin every group to one keyword.

A keyword that Google blocks is saved as its own error row. The rest of the batch still finishes.

Input

Five terms, past 12 months, United States, web search:

{
"keywords": ["coffee", "tea", "matcha", "espresso", "cold brew"],
"geo": "US",
"timeframe": "today 12-m",
"category": 0,
"gprop": "web",
"comparisonMode": "chunk"
}

Same list, scored against one anchor so a 40 in the second group means the same thing as a 40 in the first:

{
"keywords": ["tea", "matcha", "espresso", "cold brew", "oolong", "chai"],
"geo": "US",
"timeframe": "today 12-m",
"comparisonMode": "anchor",
"anchorKeyword": "coffee"
}
FieldDefaultWhat it does
keywordsrequired1 to 100 search terms. Exact duplicates are dropped.
geoemptyCountry or region code such as US, GB, or US-CA. Empty is worldwide.
timeframetoday 12-mAlso today 3-m, today 5-y, now 7-d, now 1-d, or 2024-01-01 2024-12-31.
category0Google category id. 0 is all categories. 5 Computers & Electronics, 7 Finance, 18 Shopping, 45 Health, 71 Food & Drink.
gpropwebweb, news, youtube, images, or froogle (Shopping).
comparisonModechunkchunk splits the list into groups of five. anchor keeps one keyword in every group.
anchorKeywordemptyRequired in anchor mode. Saved once, as the reference series.

The form prefills coffee, tea, matcha, espresso, and cold brew so a first run stays small.

What the numbers mean

Interest values are Google's 0–100 index, not search volume. Inside one request, 100 is the peak of the most popular term in that request.

In chunk mode, each group of five has its own scale. A 100 in group two is not "twice" a 50 in group one.

In anchor mode the anchor is the first term in every request. Every other score is relative to that same term, including across chunks. The anchor is written once, with isAnchor: true.

Interest by region uses the map Google returns for that geo. A country code such as US comes back as states. An empty geo comes back as countries.

Output

One dataset row per keyword. Open the run dataset and choose Export → CSV. Nested lists are JSON in a single cell, which is the whole series rather than one spreadsheet row per day.

Trimmed from a real US web-search run on 20 Oct 2026 (today 12-m, chunk mode). Coffee was in a group with tea, matcha, espresso, and cold brew, so the interest score is chunk-relative. Lists are cut to a few rows.

{
"keyword": "coffee",
"geo": "US",
"timeframe": "today 12-m",
"category": 0,
"gprop": "web",
"comparison": "chunk",
"chunkIndex": 0,
"anchorKeyword": null,
"isAnchor": false,
"scale": "chunk-relative",
"status": "ok",
"error": null,
"interestPoints": 53,
"interestOverTime": [
{ "timestamp": 1760832000, "date": "Oct 19–25, 2025", "value": 65, "partial": false }
],
"interestByRegion": [
{ "geoCode": "US-WY", "geoName": "Wyoming", "value": 100 },
{ "geoCode": "US-CA", "geoName": "California", "value": 36 }
],
"regionCount": 51,
"relatedQueries": {
"top": [
{ "query": "coffee near me", "value": "100", "extractedValue": 100 },
{ "query": "coffee shop", "value": "87", "extractedValue": 87 }
],
"rising": [
{ "query": "sports scores today", "value": "Breakout", "extractedValue": 5900 }
]
},
"relatedQueryTopCount": 25,
"relatedQueryRisingCount": 25,
"relatedTopics": { "top": [], "rising": [] },
"relatedTopicTopCount": 0,
"relatedTopicRisingCount": 0
}

status is ok when interest over time, interest by region, and related queries were all parsed. Empty lists are still ok when Google returned an empty list, which is common for a term with little data. partial means at least the time series (or one of the other widgets) came back and another widget did not. blocked means HTTP 429 or a challenge page after retries and a new proxy session. error means the request failed for another reason. blocked and error rows have empty lists and a short error string.

The key-value record SUMMARY counts those statuses, the number of chunks, HTTP 429s, and how many proxy sessions were used.

Related topic objects look like { "title": "Coffee", "type": "Drink", "mid": "/m/02mjmr", "value": "100", "extractedValue": 100 }. Rising values use Google's label, such as +250% or Breakout.

Retries and proxy

Each Google call is tried up to three times with exponential backoff. If a chunk is still blocked, the actor opens a new datacenter proxy session and retries the chunk, up to three sessions. It uses Apify's included datacenter group only. It does not select residential, SERP, or unblocker proxies.

Requests are paced by about a second per widget so a 25-keyword run stays on one or two sessions. That is a reliability choice, not a way to hide from Google. If Google starts returning 429s, the failed keywords are rows and the run still completes.

FAQ

No. There is no public Google Trends API for interest over time or related queries. This actor reads the endpoints the Trends website uses after you open an explore chart. You do not create a Google Cloud key.

Why do two groups both contain a value of 100?

Chunk mode scales each group of five on its own. Use comparisonMode: "anchor" and set anchorKeyword when you need one scale for the whole list.

Not by itself. Google often omits the related-topics widget for scripted clients, and still returns related queries. On a 25-keyword US run on 20 Oct 2026, every keyword was ok and every topics list was empty because that widget was not in the response. Use related queries for keyword research when topics are blank.

One keyword says blocked and the others are fine.

That is intentional. The actor retries, rotates the proxy session, and then writes a blocked row for the keywords in that chunk. It does not fail the run. Rerun those terms later, or send a shorter list. A 25-keyword US run on 20 Oct 2026 finished 25/25 ok in 223 seconds, with 61 requests, one datacenter session, and zero HTTP 429s. Residential proxies were not required, and this actor does not use them.

How do I export a CSV?

Open the run dataset, then Export, then CSV. You get one row per keyword. interestOverTime, interestByRegion, relatedQueries, and relatedTopics are JSON text in their cells.

What does a run cost?

The actor does not add a per-result fee. Apify bills the compute for the run. The default memory is 256 MB. A batch of about 25 keywords has been a fraction of a cent of compute. There is no start fee.

Which timeframe and property strings are accepted?

Timeframes follow Google's own tokens: now 1-H, now 4-H, now 1-d, now 7-d, today 1-m, today 3-m, today 12-m, today 5-y, or two dates YYYY-MM-DD YYYY-MM-DD. gprop is web, news, youtube, images, or froogle.