Google Trends Scraper: Interest Over Time, Regions, Queries avatar

Google Trends Scraper: Interest Over Time, Regions, Queries

Pricing

from $1.50 / 1,000 search terms

Go to Apify Store
Google Trends Scraper: Interest Over Time, Regions, Queries

Google Trends Scraper: Interest Over Time, Regions, Queries

Google Trends scraper at $1.50 per 1,000 search terms: interest over time, interest by region (incl. US metro areas), related queries and Trending Now searches, all in one result per term. HTTP-only, no browser, validated output that fails loudly instead of returning empty data.

Pricing

from $1.50 / 1,000 search terms

Rating

0.0

(0)

Developer

Brindlewave Data

Brindlewave Data

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a month ago

Last modified

Security

Limited permissions

Share

Google Trends Scraper (Reliable, No Browser)

Get Google Trends data for any keyword: interest over time, interest by region, related queries (top and rising, plus optional related topics), plus today's Trending Now searches for any country. Export to JSON, CSV or Excel, call it from the API, or schedule it.

Built to be boring and dependable:

  • HTTP only, no headless browser. Small memory (256 MB is plenty) and fast runs.
  • Validated output. Every row is checked field by field before it is saved (dates, 0-100 scores, names, links). Bad rows are dropped and counted, never silently saved.
  • Fails loudly. If Google refuses all requests, or the output fails validation, the run is marked as failed with a clear reason instead of "succeeding" with an empty dataset.
  • Handles rate limits. On HTTP 429 the actor backs off and continues on a fresh proxy session. It never tries to solve CAPTCHAs.
  • No start fee.

What you get

One row per search term, with everything Google Trends shows on the explore page:

FieldDescription
searchTermThe keyword (or topic ID like /m/0dl567)
geo, timeRange, category, searchPropertyThe settings used
hasDatafalse when Google does not have enough search volume for the term
interestOverTimeArray of { date, formattedTime, value (0-100), hasData, isPartial }
averageInterest, peakDate, peakValue, pointsWithDataQuick summary of the timeline
interestByRegionArray of { geoCode, geoName, value (0-100), formattedValue }, sorted by value
relatedQueries{ top: [...], rising: [...] } with query, value, formattedValue (e.g. +250% or Breakout), link
relatedTopicsOptional. { top: [...], rising: [...] } with title, type, mid, value, formattedValue, link
comparedWithOther terms in the same comparison (when "Compare terms" is on)
warningsNotes such as "not enough search volume"
trendsUrlLink to the same view on trends.google.com

If you add countries under Trending now, you also get one row per trending search (recordType: "trendingSearch") with trendingTitle, approxTraffic (e.g. 2000+), approxTrafficNumber, publishedAt, pictureUrl and newsArticles (title, url, source).

Example row

From a real run on 2026-10-08 (chatgpt, US, past 90 days). Arrays are shortened here; the real row had 93 timeline points, 51 regions and 34 related queries.

{
"recordType": "searchTerm",
"searchTerm": "chatgpt",
"geo": "US",
"timeRange": "today 3-m",
"hasData": true,
"interestOverTimeCount": 93,
"averageInterest": 65,
"peakDate": "2026-09-03T00:00:00.000Z",
"peakValue": 100,
"topRegion": "California",
"topRelatedQuery": "chatgpt ai",
"interestOverTime": [
{ "date": "2026-10-07T00:00:00.000Z", "formattedTime": "Oct 7, 2026", "value": 79, "hasData": true, "isPartial": false },
{ "date": "2026-10-08T00:00:00.000Z", "formattedTime": "Oct 8, 2026", "value": 73, "hasData": true, "isPartial": true }
],
"interestByRegion": [
{ "geoCode": "US-CA", "geoName": "California", "value": 100, "formattedValue": "100" },
{ "geoCode": "US-GA", "geoName": "Georgia", "value": 92, "formattedValue": "92" }
],
"relatedQueries": {
"top": [{ "query": "chatgpt ai", "value": 100, "formattedValue": "100", "link": "https://trends.google.com/trends/explore?q=chatgpt+ai&date=today+3-m&geo=US" }],
"rising": [{ "query": "sam altman chatgpt water usage", "value": 8750, "formattedValue": "Breakout", "link": "https://trends.google.com/trends/explore?q=sam+altman+chatgpt+water+usage&date=today+3-m&geo=US" }]
},
"trendsUrl": "https://trends.google.com/trends/explore?q=chatgpt&geo=US&date=today%203-m&hl=en-US",
"scrapedAt": "2026-10-08T01:33:18.023Z"
}

Input

{
"searchTerms": ["chatgpt", "gemini"],
"compareTerms": false,
"geo": "US",
"timeRange": "today 12-m",
"dataTypes": ["interestOverTime", "interestByRegion", "relatedQueries"],
"trendingGeos": ["US"]
}
  • searchTerms: keywords or Google topic IDs. Each term is one result row.
  • dataTypes: interest over time, interest by region and related queries are on by default. Related topics is optional: in our test runs Google returned an empty related-topics list for every term, so it is off by default to save time. When the list is empty, the row says so in warnings.
  • compareTerms: when on, terms are compared in groups of up to 5, exactly like typing them together on Google Trends, so values are relative across the group.
  • geo: US, GB, US-CA, ... or empty for Worldwide.
  • timeRange / customTimeRange: preset (past hour to 2004-present) or 2025-01-01 2025-06-30.
  • category, searchProperty: same filters as on the website (Web, Images, News, Shopping, YouTube).
  • regionResolution: AUTO, COUNTRY, REGION, DMA (US metro areas) or CITY.
  • trendingGeos: countries for the Trending Now feed.
  • proxyConfiguration: Apify Proxy is on by default.

Run status

Each run writes a STATUS record to its key-value store: number of rows, terms with data, invalid rows dropped, failed terms with the error, requests made and rate limits met. The run fails if no rows were produced, if more than 20% of rows failed validation, or if more than 20% of requested terms failed after retries. Partial results stay in the dataset either way.

Tips

  • Google Trends values are relative (0-100) within one request. Use compareTerms when you need terms on the same scale.
  • Terms with very little search volume return hasData: false and a warning. This is Google's answer, not an error.
  • For long keyword lists, schedule the actor and keep the default proxy.

Limits

  • Google Trends data is sampled and scaled by Google; it does not give absolute search volumes.
  • Google may rate-limit heavy use. The actor retries with backoff and new proxy sessions, then reports the failure clearly.

The actor reads public Google Trends pages that anyone can open without logging in. It collects aggregated search interest, not personal data. Make sure your use complies with Google's terms and your local laws.

Feedback

Found a bug or need a field? Open an issue on the Issues tab and we will look at it quickly.

Pricing

Pay per result: $1.50 per 1,000 rows (one row per search term, plus one per trending search if you ask for them), plus $0.00005 per run start. No monthly rental.

FAQ

Google offers only limited alpha access. This Actor is a practical Google Trends API alternative: send keywords, get interest over time, interest by region, related queries and Trending Now as JSON or CSV.

Why does pytrends keep returning 429 errors?

Google Trends rate limits unofficial clients hard. This Actor paces and retries requests and validates every row, so a run fails loudly instead of returning empty data.

Can I compare several keywords?

Yes. Turn on compareTerms to get up to 5 terms on the same 0 to 100 scale, like the Google Trends compare view.

Yes. Set geo (for example US, US-CA or GB) and interest by region returns sub-regions and US metro areas where Google provides them.