Google Trends Data (Unofficial): Over Time, Region, Queries
Pricing
Pay per usage
Google Trends Data (Unofficial): Over Time, Region, Queries
Google Trends data for a keyword list: interest over time, interest by region and related queries (top and rising), alone or in comparisons of up to 5. Paced, honest requests with back-off; every keyword gets a status row (ok, no data, rate limited). Not affiliated with Google.
Pricing
Pay per usage
Rating
0.0
(0)
Developer
Jack Valmadre
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
3 hours ago
Last modified
Share
Keyword Interest for Google Trends: Over Time, by Region, Related Queries
Give it a list of keywords. For each keyword you get one row with:
- Interest over time: Google Trends' 0-100 search-interest timeline for your time range, plus the average, the peak value and the peak date;
- Interest by region: 0-100 per country (worldwide) or per state/province (when you pick a country), or per city / US metro area if you ask;
- Related queries: the top related queries and the rising ones, with Google's "Breakout" label kept;
- a status:
ok,no_data,partial,rate_limited,error,not_attemptedorstopped_bot_check, and a plain-English message when it isn'tok.errormeans Google answered with something we could not read (an unexpected HTTP error, a network failure or a response format we could not read) after retries.
Every keyword you give gets a row, so you can see at a glance which ones need a rerun instead of finding them silently missing.
Input
| Field | What it does | Default |
|---|---|---|
keywords | One search term per line; each is looked up on its own (values relative to its own peak). Also accepted as searchTerms, queries, terms, keyword. | coffee, tea |
comparisons | Optional. One line per comparison, up to 5 keywords separated by commas (coffee, tea, matcha). Keywords in a comparison are scaled together, like the website's compare view, so their values can be compared with each other. Each keyword still gets its own row, with comparedWith listing the others. | none |
geo | Two-letter country code (US, GB, AU), optionally with a sub-region (US-CA); empty = worldwide. Also accepted as country. | worldwide |
timeframe | now 1-H, now 4-H, now 1-d, now 7-d, today 1-m, today 3-m, today 12-m, today 5-y, all, or two dates 2024-01-01 2024-12-31. | today 12-m |
category | Google Trends category number, 0 = all. | 0 |
searchType | web, images, news, shopping or youtube. | web |
includeInterestOverTime, includeInterestByRegion, includeRelatedQueries | Turn sections off to finish faster. | all on |
regionResolution | auto, COUNTRY, REGION, CITY, DMA. | auto |
pauseSeconds, maxRetries, maxMinutes | Pace (at least 3 s between requests), retries after HTTP 429, and a time budget. | 5 s, 4, until the run timeout |
Example (API / AI agents):
{"keywords": ["air fryer", "sourdough"], "comparisons": ["coffee, tea, matcha"], "geo": "US", "timeframe": "today 5-y"}
Invalid input (an unknown time range, a region name instead of a code, more than 5 keywords in a comparison) stops the run at once with a message saying what to change.
Output
One dataset row per keyword (views: Overview, Interest over time, Interest by region, Related queries), and a run summary in the key-value store record OUTPUT (status counts, duration, keywords per minute, requests and HTTP 429 responses). Example row from our test run of 2026-09-25 (worldwide, today 12-m; lists cut to their first item — the full row had 53 weekly points, 57 countries and 25 top and 25 rising queries):
{"keyword": "coffee","comparedWith": [],"status": "ok","message": null,"geo": "worldwide","timeframe": "today 12-m","category": 0,"searchType": "web","interestOverTime": [{"date": "2025-09-21", "label": "Sep 21 – 27, 2025", "value": 59, "isPartial": false}],"averageInterest": 75.6,"peakInterest": 100,"peakDate": "2026-05-10","interestByRegion": [{"geoCode": "SG", "geoName": "Singapore", "value": 100}],"regionResolution": "COUNTRY","relatedQueriesTop": [{"query": "coffee shop", "value": 100}],"relatedQueriesRising": [{"query": "how to remove coffee stain from carpet", "increasePercent": 9100, "formattedValue": "Breakout", "breakout": true}],"fetchedAt": "2026-09-25T16:10:54Z"}
The average and peak leave out the last point when Google marks it as partial (the current, incomplete week or day).
How it fetches, and what that means for speed
- It asks Google Trends' own web endpoints at a steady pace (by default one request every 5 seconds), from the run's own address, with a User-Agent that names this actor. It does not use proxies, rotate addresses or disguise itself as a browser.
- Each keyword on its own takes 4 requests with all three sections on (2 with only interest over time); a comparison of 5 takes 12 requests. So with the default pace one keyword takes about 20 seconds with all sections, about 10 seconds with interest over time only.
- When Google answers HTTP 429 (too many requests), the actor waits 30 s, 60 s, 120 s... and retries, up to
maxRetriestimes. If Google still refuses, that keyword gets arate_limitedrow (orpartialif some sections were fetched) and the run moves on. - If Google ever shows a captcha or "unusual traffic" page, the run stops there: remaining keywords get
not_attemptedrows. It never tries to get past such a page. - Measured in our own test runs on Apify (256 MB memory, default pace, all three sections, worldwide, last 12 months). These are single runs from one day, not a guarantee; Google's rate limits vary.
- 200-keyword run on 2026-09-25: all 198 real keywords
ok(the other 2 were deliberately made-up terms and came backno_data), 80 minutes in total, about 2.5 keywords per minute. Google answered HTTP 429 23 times in 824 requests; every one cleared after the back-off wait, so no keyword endedrate_limited. No captcha or bot page. Platform usage was US$0.069, about US$0.34 per 1,000 keywords. - The default input (coffee, tea) finished in under a minute in each of our smoke runs.
- 200-keyword run on 2026-09-25: all 198 real keywords
Limitations
- Google Trends values are relative (0-100) and sampled by Google; two fetches of the same keyword can differ slightly, as they do on the website.
- Very rare keywords return
no_data, as on the website. - Related topics and the daily "Trending now" list are not included yet.
- The endpoints are the ones the Trends website itself uses; Google can change them without notice. We run this actor daily to catch that: a run in which no keyword is
okand at least one row has statuserrorstill saves its rows, then ends as Failed. Runs where every keyword isno_data,rate_limited,not_attemptedorstopped_bot_checkend as Succeeded, since those are Google's answers, explained in each row's message.
Use with AI agents
Give keywords as a list of strings, and read status first: only ok and partial rows carry data. Values from separate keywords are not comparable with each other; put up to 5 keywords in one comparisons line when they need to be.
Pricing
No charge from us for now: you pay only Apify's platform usage of your run, which is small at the default 256 MB memory. We may add a per-keyword price in a later release; any price is shown on this page and by Apify before you start a run.
Support
Use the Issues tab on this page. Replies are written with AI assistance; the human owner of Madrasco can be reached on request.
Data source: Google Trends (https://www.google.com/trends). If you publish these figures, cite Google Trends as the source.
Built by Madrasco. Not affiliated with, endorsed by or sponsored by Google. Google Trends is a trademark of Google LLC. This actor returns aggregate, relative search-interest figures; it collects no personal data.