Google Trends Scraper - Reliable Interest, Regions & Trending
Pricing
$1.49 / 1,000 data rows
Google Trends Scraper - Reliable Interest, Regions & Trending
Google Trends without login: interest over time, interest by region, top and rising related queries, and the real-time Trending now list with search volume and news URLs. Compare up to 5 terms. Refused requests are retried and reported. Empty results, partial rows and duplicates are free.
Pricing
$1.49 / 1,000 data rows
Rating
0.0
(0)
Developer
Lantern Lab
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
6 days ago
Last modified
Categories
Share
Google Trends Scraper
Search interest from Google Trends, as data: the interest-over-time series, the breakdown by region, the top and rising related queries, and the real-time "Trending now" list with each trend's search volume, start time and news article URLs. Up to five terms compared in one chart. No Google login, no cookies of yours, no account. $1.49 per 1,000 rows, no start fee. See Pricing.
Input:
{"searchTerms": ["bitcoin", "ethereum"],"geo": "US","timeRange": "today 12-m","includeRegions": true,"includeRelated": true,"trendingNowGeo": "US"}
Output — one row per data point. Status rows and the run summary are free. Samples from a real run:
{"recordType": "interest_over_time","keyword": "bitcoin","geo": "US","timeRange": "today 12-m","category": 0,"date": "2026-10-11T00:00:00.000Z","formattedTime": "Oct 11 – 17, 2026","value": 15,"hasData": true,"isPartial": false,"comparisonIndex": 0,"comparisonTerms": ["bitcoin", "ethereum"],"sourceUrl": "https://trends.google.com/trends/explore?q=bitcoin&date=today+12-m&geo=US","partial": false,"partialReason": null,"collectedAt": "2026-10-24T18:05:11.204Z"}
{"recordType": "trending_now","title": "knicks vs celtics","geo": "US","searchVolume": 500000,"growthPercent": 1000,"startedAt": "2026-10-24T09:30:00.000Z","rank": 1,"relatedQueries": ["knicks vs celtics", "celtics vs knicks", "knicks game"],"newsUrls": ["https://www.example-sports-site.com/knicks-celtics-recap/"],"newsSource": "daily_trends_rss","listSource": "trending_now_list","trendingWindowHours": 24,"sourceId": "US:knicks vs celtics","partial": false,"partialReason": null,"collectedAt": "2026-10-24T18:05:13.880Z"}
Limits:
- Public data only. What the public Google Trends pages show: no login, no cookies you supply, no account, no personal data.
valueis Google's relative interest, 0–100 — Google Trends publishes no absolute search counts (the trending list is the one exception, where Google itself gives a rounded volume). - Every section gets a status row saying what happened. A keyword Google has no data for is an empty result; a section cut short by a limit, a refusal or an error is
partialwith the reason — the two are never confused. - Your limits stop collection and appear in the rows:
maxTrendingNow, themaxUpstreamRequestsrequest ceiling and the maximum charge per run (see Pricing).
What it does
- Interest over time — one row per time bucket per keyword, with Google's own bucket label and
isPartialon the bucket that is still running, so a half-finished week is never read as a drop. - Interest by region — one row per region, with Google's region code (
US-NY,RU-MOW), its name in your language and its value, 0–100 against that keyword's own strongest region. Ask for a country and you get its states or oblasts; ask for worldwide and you get countries. - Related queries — the top list for the period and the rising list, where
valueis the percentage increase andformattedValuecan readBreakout. - Trending now — the real-time list for one country: Google's rounded search volume, when the trend started rising, the queries grouped under it, and the URLs of the news articles Google shows with it.
- Comparison groups — up to five terms in one chart, with each term's own series and regional breakdown, each row labelled with its keyword, its position in the group (
comparisonIndex) and the group it was normalised against (comparisonTerms), because values from different groups are not comparable. - Stable by construction — a refused request is retried from a different exit IP, and the run summary reports exactly how often that happened (
blockedHits,retries,sessionRotations), so stability is measured, not claimed. - Honest about gaps — deduplicated within the run, so a point is written and charged once; a section Google answers with nothing says so; anything incomplete is
partialwith a reason. Partial rows are free, and so is a bucket or region Google reports no data for (hasData: false), which is what a term with no search volume inside a comparison group gets.
What it does not do
- No absolute search volumes for keywords: Google Trends does not publish them. The relative 0–100 series is what the platform offers.
- No Google Ads keyword-planner data, no competitor's own metric, no forecasting.
- No Google Trends subpages beyond the sections above (no YouTube/Shopping/Image property filters, no year-in-search pages).
- No scheduling or monitoring built in; use Apify schedules.
Input
| Field | Default | Meaning |
|---|---|---|
searchTerms | — | One to five terms, compared in one chart. Leave empty and set trendingNowGeo to collect only the trending list. |
geo | "" (worldwide) | Google Trends region: "", US, RU, DE, or a subregion such as US-NY, RU-MOW. |
timeRange | 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. |
category | 0 | Google Trends category number, 0 for all categories. |
includeRegions | true | Collect the breakdown by region. |
includeRelated | true | Collect the related queries (and related topics, which Google currently returns empty — see Limits). |
language | en-US | Response language, BCP-47. Decides the language of region names and trend titles. |
trendingNowGeo | "" | Two-letter country code for the real-time trending list, for example US, RU. Empty skips it. |
trendingNowHours | 24 | Trending window: 4, 24, 48 or 168 hours. |
maxTrendingNow | 100 | Upper bound on trending rows. |
maxUpstreamRequests | derived | Hard ceiling on requests to Google Trends for the whole run, retries included. Leave empty and the Actor works one out from your input. |
proxyConfiguration | Apify Proxy | The proxy the requests go through. The datacenter default is what this Actor is measured on. |
Output
recordType tells the rows apart. Every data row carries keyword, geo, timeRange, category, sourceUrl, partial, partialReason and collectedAt.
recordType | Key fields |
|---|---|
interest_over_time | date, timestamp, formattedTime, value (0–100), hasData, isPartial, comparisonIndex, comparisonTerms |
interest_by_region | geoCode, geoName, value, hasData, resolution (COUNTRY, REGION, DMA, CITY), comparisonIndex |
related_query | query, type (top / rising), value, formattedValue, rank |
related_topic | topic, topicMid, topicType, type, value, formattedValue, rank |
trending_now | title, searchVolume, growthPercent, startedAt, relatedQueries, newsUrls, news, newsSource, listSource, rank, sourceId |
One row per section read, recordType: "section_status", never charged:
| Field | Meaning |
|---|---|
section | interest_over_time, interest_by_region, related_queries, related_topics or trending_now. |
rowsReturned / rowsCharged | Rows this section wrote and charged. |
duplicatesSkipped | Rows the run had already collected. |
partial / partialReason | true with upstream_request_cap, charge_limit_reached, blocked, upstream_error, section_unavailable or not_collected when the section is incomplete. |
statusText | The same thing in a sentence, so the dataset explains itself. |
The last row is recordType: "RUN_SUMMARY" — rows collected and charged per record type, empty sections, partial sections by reason, requests sent per endpoint, refusals and retries, bytes moved, and why collection stopped. The same object is in the run's key-value store under RUN_SUMMARY.
Partial is not empty
rowsReturned: 0 with partial: false means Google Trends has no data for that keyword — a term with little search volume legitimately has none. partial: true means the section is incomplete and there may well be data. A run that collected nothing because a request was refused, failed or ran out of the run's own budget fails rather than reporting an empty success; a run whose keywords genuinely have no data succeeds with zero rows.
Limits and boundaries
- Only Google Trends' public data. No login, no cookies you supply, no account, no personal fields.
valueis relative interest within one chart, 0–100. Two runs with different terms, regions or windows are normalised differently, so their values are not comparable;comparisonTermsrecords the group each row belongs to.- Related topics: Google's public related-topics endpoint has been answering with an empty list for every term measured (2026-10-24), including entity ids. The section is collected and reported, and its status row says
rowsReturned: 0as an empty result rather than inventing rows. Related queries are returned normally. - The last bucket of a series is live:
isPartial: truemeans its value will still change. - The trending list's
searchVolumeis Google's own rounded figure.newsUrlscome from the public daily-trends feed, which carries the strongest ten to twenty trends of a country, while the real-time list carries hundreds: a trend the feed does not carry hasnewsSource: "not_in_daily_trends_feed"and an emptynewsUrls, never invented links.listSourcesays which of the two public lists a row came from; a feed-only row has the articles but no exactsearchVolumeor query breakdown, and those fields arenullrather than guessed. - A country Google keeps no trending list or daily-trends feed for (it answers HTTP 400) is reported as an empty result rather than as a failure, and is not retried.
startedAtis Google's own time for a trend;collectedAtis ours. They are separate fields and neither is derived from the other.
Pricing
Pay per event, no start fee:
| Event | Price | Charged for |
|---|---|---|
result | $0.00149 ($1.49 per 1,000) | Each data row that carries data. Section status rows, empty results, partial rows, rows Google reported hasData: false for and the run summary are free. |
Set a maximum charge for the run and the Actor stops before going over it.