Google Trends Scraper: Interest, Regions, Related, Trending Now
Pricing
from $1.50 / 1,000 results
Google Trends Scraper: Interest, Regions, Related, Trending Now
Reliable Google Trends API alternative. Compare up to 5 keywords per comparison and many comparisons per run: interest over time, interest by country, region or city, related queries and Trending now by country. Built-in 429 handling.
A reliable Google Trends API alternative. Give it keywords, get clean JSON (or flat spreadsheet rows) with:
| Data | Output type | What it is |
|---|---|---|
| Interest over time | interest_over_time | 0-100 timeline per term, with isPartial for the unfinished last period |
| Interest by region | interest_by_region | 0-100 per country, region/state, city or US metro (DMA) |
| Related queries | related_queries | Top and rising queries per term ("Breakout" included) |
| Related topics (beta) | related_topics | Top and rising topics per term (topic name, type and Knowledge Graph ID). Often empty, see Limits |
| Trending now | trending_now | What is spiking in Google Search right now, per country: search volume, % increase, start time, category, related searches |
Built for reliability first:
- Rate limit (HTTP 429) handling: each request retries up to 10 times. Every retry gets a new session (new proxy IP and new Google cookies) and waits with exponential backoff plus jitter.
- Cookie bootstrap: every session first visits Google Trends like a browser to get the
NIDcookie before calling the API. - Partial results instead of failed runs: if one comparison fails, the others are still saved, and the run summary tells you exactly what failed.
- Many comparisons per run: compare up to 5 terms on the same scale, and add as many comparison lines as you need.
Input
Each line of Search terms is one Google Trends comparison. Put up to 5 terms on a line, separated by commas, to compare them on the same 0-100 scale (exactly like the Compare button on trends.google.com).
Example 1: compare three keywords in the US over 12 months (the default)
{"searchTerms": ["coffee, tea, matcha"],"geo": "US","timeframe": "today 12-m"}
Example 2: everything for several keywords, worldwide, by country
{"searchTerms": ["chatgpt", "gemini", "claude ai"],"geo": "","timeframe": "today 5-y","includeInterestByRegion": true,"regionResolution": "COUNTRY","includeRelatedQueries": true,"includeRelatedTopics": true}
Example 3: YouTube search interest in South Korea, past 7 days, one row per hour for Google Sheets
{"searchTerms": ["아이폰, 갤럭시"],"geo": "KR","timeframe": "now 7-d","gprop": "youtube","outputFormat": "row-per-point","language": "ko","timezoneOffset": -540}
Example 4: custom date range
{ "searchTerms": ["taylor swift"], "geo": "", "timeframe": "custom", "customTimeRange": "2024-01-01 2024-12-31" }
Example 5: Trending now in several countries (no keywords needed)
{ "searchTerms": [], "trendingNowCountries": ["US", "GB", "KR", "JP", "IN"], "trendingNowHours": "24", "maxTrendingPerCountry": 50 }
All input fields
| Field | Default | Notes |
|---|---|---|
searchTerms | ["coffee, tea"] | One comparison per line, up to 5 comma-separated terms per line. |
geo | US | Country (US, GB, KR, JP, DE ...) or subregion (US-CA, GB-ENG). Empty = worldwide. |
timeframe | today 12-m | 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 (2004 to now), custom. |
customTimeRange | With custom: YYYY-MM-DD YYYY-MM-DD or hourly YYYY-MM-DDTHH YYYY-MM-DDTHH. | |
category | 0 | Google Trends category ID (0 = all). |
gprop | web | web, images, news, youtube, froogle (Google Shopping). |
includeInterestOverTime | true | |
includeInterestByRegion | false | |
regionResolution | auto | COUNTRY, REGION, CITY, DMA. Auto: worldwide gives countries, a country gives regions, a region gives cities. |
includeLowVolumeRegions | false | |
includeRelatedQueries / includeRelatedTopics | false | Top and rising lists per term. |
trendingNowCountries | [] | Country codes for Trending now. |
trendingNowHours | "24" | "4", "24", "48" or "168". |
maxTrendingPerCountry | 0 | 0 = all. |
outputFormat | item-per-term | See below. |
language | en-US | Language for dates, topic names and Trending now. |
timezoneOffset | 0 | Minutes behind UTC (Google's tz). 0 = UTC, 300 = New York, -540 = Seoul. |
maxRetries | 10 | Retries per request on 429 or network errors. |
proxyConfiguration | Apify Proxy (datacenter) | Residential proxy also works but is rarely needed. |
Output
Every item repeats the input it came from (comparison, terms, geo, timeframe, category, gprop), so you can mix many comparisons in one dataset and still filter easily.
outputFormat: "item-per-term" (default, compact)
One item per term and data type. Timelines and region lists are arrays.
{"type": "interest_over_time","term": "coffee","comparison": "coffee vs tea vs matcha","terms": ["coffee", "tea", "matcha"],"geo": "US","timeframe": "today 12-m","category": 0,"gprop": "web","resolvedTimeRange": "2025-10-02 2026-10-02","resolution": "WEEK","average": 76,"peakValue": 100,"latestValue": 70,"timeline": [{ "date": "2026-09-20", "timestamp": 1789862400, "formattedTime": "Sep 20 – 26, 2026", "value": 76, "isPartial": false },{ "date": "2026-09-27", "timestamp": 1790467200, "formattedTime": "Sep 27 – Oct 3, 2026", "value": 70, "isPartial": true }],"scrapedAt": "2026-10-02T11:58:23.507Z"}
{"type": "related_queries","term": "coffee","comparison": "coffee vs tea vs matcha","geo": "US","timeframe": "today 12-m","top": [ { "rank": 1, "query": "coffee near me", "value": 100, "formattedValue": "100", "link": "https://trends.google.com/trends/explore?q=coffee+near+me&date=today+12-m&geo=US" } ],"rising": [ { "rank": 1, "query": "sports scores today", "value": 5350, "formattedValue": "Breakout", "link": "..." } ]}
{"type": "interest_by_region","term": "coffee","geo": "US","resolution": "REGION","regions": [ { "geoCode": "US-WY", "geoName": "Wyoming", "value": 100, "hasData": true } ]}
{"type": "trending_now","geo": "KR","hours": 24,"rank": 1,"title": "한국 대 베네수엘라","searchVolume": 200000,"increasePercentage": 1000,"startedAt": "2026-10-02T10:00:00.000Z","endedAt": null,"active": true,"categories": ["Sports"],"relatedQueries": ["한국 대 베네수엘라", "베네수엘라 축구 국가대표팀", "..."],"exploreUrl": "https://trends.google.com/trends/explore?q=...&geo=KR&date=now%201-d","source": "trending-now"}
outputFormat: "row-per-point" (flat, for Google Sheets and Excel)
- Interest over time: one row per date per comparison, with one column per term in
values(values.coffee,values.teain CSV). - Interest by region: one row per region per comparison, with one column per term.
- Related queries and topics: one row per query or topic, with
list=toporrisingandrank.
{ "type": "interest_over_time", "comparison": "coffee vs tea", "geo": "US", "timeframe": "today 12-m", "date": "2026-09-20", "isPartial": false, "values": { "coffee": 73, "tea": 32 } }
Row-per-point produces many more results (for example 52 weekly rows instead of 2 items for a 2-term, 12-month comparison), so it costs more. Use it when you want the data straight in a spreadsheet.
A run summary (items, errors and HTTP statistics per comparison) is saved to the key-value store as RUN_SUMMARY.
Pricing
Pay per result: you pay only for items saved to the dataset. No monthly fee, and Apify platform usage and proxy are included.
Typical costs with the default item-per-term format:
| Job | Results |
|---|---|
| 1 comparison of 2 terms, interest over time | 2 |
| Same + interest by region + related queries | 6 |
| Trending now, 1 country, all trends (24 h) | 50 to 500 |
Limits and notes
- Values are relative (0-100) within each comparison, exactly as on Google Trends. Terms on different lines are not on the same scale.
- Google Trends allows at most 5 terms per comparison. All terms in a comparison use the same location and time range.
- Google rate-limits automated traffic. The actor handles this with session rotation and backoff, so runs with many comparisons take longer (about 1 to 3 seconds per request, plus waiting time when Google slows us down).
- Related topics (beta): Google currently hides related topics from most automated clients (the API answers with an empty list). The actor retries once with a fresh session; if Google still returns nothing, no item is saved, so you are not charged, and the run summary notes it. Related queries are not affected.
- Very small search volumes return all zeros (Google's own behaviour).
- Trending now uses the same data as trends.google.com/trending. If that endpoint is unavailable the actor falls back to the public Trending now RSS feed (fewer fields, about 10 to 25 trends).
- The data is aggregated and anonymous. No personal data is collected.
Use cases
- SEO and content planning: find rising queries and seasonal peaks before you write.
- Market and product research: compare brands, products or features over time and by country.
- E-commerce: spot seasonality and trending products (use
gprop: frooglefor Google Shopping). - AI agents and MCP clients: one call returns structured trend data with the input echoed in every item.
- Newsrooms and social media teams: schedule Trending now every hour for the countries you cover.
Support
Missing a field or a Google Trends feature? Open an issue on the Issues tab.