Google Trends Scraper avatar

Google Trends Scraper

Pricing

Pay per event

Go to Apify Store
Google Trends Scraper

Google Trends Scraper

Get Google Trends data without 429 errors: interest over time, interest by region, related queries and topics, plus today's trending searches with volume. No login, no API key, no personal data. Charged per dataset delivered, never for a query Google refused.

Pricing

Pay per event

Rating

0.0

(0)

Developer

Matheus Gaspar

Matheus Gaspar

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

8 days ago

Last modified

Share

Google Trends Scraper — no 429 errors

Get Google Trends data without the scrape breaking halfway through. Returns interest over time, interest by region, related queries, plus today's trending searches — all as structured JSON, ready for a spreadsheet, a database, or a data pipeline.

Google Trends has no official API and rate-limits aggressively by IP address. That is why most scrapers fail: they call the internal API directly and get 429 Too Many Requests on the very first request. This Actor fixes the cause, not the symptom.

The error is not about volume. It is about session. Google requires a cookie that is only issued when you load the Explore page. Without it, every request is refused — including the first one of the day.

You can reproduce it in two calls. Hitting the API directly from a clean IP:

GET /trends/api/explore -> HTTP 429 (on the very first request)

Loading the Explore page first — which also answers 429, but sets the cookie:

GET /trends/explore -> HTTP 429 + Set-Cookie
GET /trends/api/explore -> HTTP 200 ✓
GET /widgetdata/multiline -> HTTP 200 ✓

That is exactly what this Actor does before any query. Combined with rotating residential proxies and exponential backoff with a fresh session, the rate limit becomes latency instead of failure.

Measured on a real platform run — two compared keywords across three datasets plus today's trending searches: 6 requests, 0 blocks, 0 retries, returning 93 time-series points, 27 regions and 10 rising terms. Every run logs these counters, so you can audit the claim instead of trusting it.

On top of that:

  • No personal data. Google Trends publishes aggregated search interest. There are no profiles, names, emails or personal identifiers — which keeps GDPR and LGPD compliance simple.
  • You only pay for what comes out. Charging is per dataset delivered. A query that fails produces no billable event.
  • Five keywords per query, exactly like Google Trends itself, with values that are comparable to each other.

What you can use it for

  • Keyword research and SEO — find whether a term is growing or dying before you commit to content, and catch rising queries while the competition is still low.
  • Demand forecasting — read seasonality over 5 years to plan inventory, staffing or ad budget.
  • Market entry — compare the same product across countries and regions to decide where to launch first.
  • Content and news — pull today's trending searches with approximate volume and publish while the topic is hot.
  • Brand tracking — measure your name against competitors on one normalized scale.
  1. Click Try for free.
  2. Enter up to 5 keywords, then pick the country and the time range.
  3. Select which datasets you want: time series, regions, related queries.
  4. Click Start and download the result as JSON, CSV, Excel or HTML.

To automate it, schedule runs or call the Actor from the Apify API and receive the JSON directly in your system.

Input

FieldTypeDescription
keywordsarrayUp to 5 terms, compared against each other. Leave empty only if includeTrendingNow is on.
geostringISO code such as BR, US, GB, or a region like US-CA. Empty means worldwide.
timeframestringFrom now 1-H up to all (since 2004).
dataTypesarrayWhich datasets to fetch. Each one is a billable event.
includeTrendingNowbooleanAdds the searches trending right now, with approximate volume.
categoryintegerGoogle Trends category ID. 0 means all categories.
languagestringLanguage of the returned labels. Defaults to en-US.

Example:

{
"keywords": ["bitcoin", "ethereum"],
"geo": "US",
"timeframe": "today 3-m",
"dataTypes": ["interestOverTime", "interestByRegion", "relatedQueries"],
"includeTrendingNow": true
}

Output

{
"keywords": ["bitcoin", "ethereum"],
"geo": "US",
"timeframe": "today 3-m",
"interestOverTime": [{ "date": "Aug 24", "timestamp": 1787616000000, "values": [56, 4], "isPartial": false }],
"interestByRegion": [{ "region": "California", "code": "US-CA", "values": [96, 4] }],
"relatedQueries": {
"top": [{ "query": "bitcoin price", "value": 100, "formattedValue": "100" }],
"rising": [{ "query": "how to buy bitcoin safely", "value": 1100, "formattedValue": "+1,100%" }]
}
}

You can download the dataset in JSON, HTML, CSV or Excel.

FieldWhat it is
interestOverTime[].valuesRelative interest (0–100) per keyword, in the order you supplied them.
interestOverTime[].isPartialtrue when the period is still open and the value can still change.
interestByRegion[].valuesRelative interest per region, normalized within the selected scope.
relatedQueries.topMost searched related queries for the period.
relatedQueries.risingFastest-growing related queries. Breakout means growth above 5,000%.
trending[].titleSearch term trending right now.
trending[].approxTrafficApproximate search volume band, e.g. 2000+.
trending[].relatedNewsHeadlines Google associates with the trending term.

$0.0015 per dataset — $1.50 per 1,000. A default query asks for three datasets, so it costs $0.0045, or $4.50 per 1,000 queries.

Charging is per dataset delivered, not per run time. That matters more than it sounds: when Google is slow and the Actor has to wait and retry, the Actor pays for the wait, not you.

What you requestEventsCost
Time series only1$0.0015
Time series + regions + related queries (default)3$0.0045
Trending searches1$0.0015

Queries that Google refuses, even after the retries, produce no billable event. The number of compared keywords does not change the price either: comparing 5 keywords costs the same as querying 1, because it is the same request.

Tips

  • Use short ranges (now 7-d, today 1-m) to detect movement, and long ranges (today 5-y) for seasonality.
  • Comparing terms only makes sense inside one query: values are normalized against each other, not across separate runs.
  • If you need many keywords, prefer several small runs over one giant one — results arrive sooner and the cost is identical.
  • Keep the residential proxy enabled. It is what sustains the success rate.

FAQ

Is scraping Google Trends legal? This Actor reads only publicly displayed, aggregated Google Trends data, with no personal identifiers of any kind. You are still responsible for respecting Google's terms of service and the laws that apply to your use case.

Why do the numbers only go up to 100? That is how Google Trends works. Values are relative to the peak of the selected range, not absolute search counts.

Can I compare more than 5 keywords? Not in a single query — that is Google's own limit. Run several queries and stitch the results using one shared anchor term: its value in both runs gives you the conversion factor between the two scales.

Why does the last row of the series keep changing? Periods still in progress come back with isPartial: true. Google recalculates that point until the interval closes, so if you store history, drop or overwrite partial rows.

Why is there no "related topics" dataset? Google Trends shows related topics in its own web interface, but the API path returns an empty list for every query tested — 9 out of 9, across different terms, countries and categories, while related queries returned data in all of them. Rather than sell a field that always comes back empty, it was removed. If Google restores it, it comes back.

Does the Actor need a Google account? No. There is no login, no API key, and no personal data is collected — Google Trends publishes aggregated search interest only.

I found a problem. Open a ticket on the Issues tab of this Actor. I answer there.