Google Trends Scraper - Reliable Interest, Regions & Trending avatar

Google Trends Scraper - Reliable Interest, Regions & Trending

Pricing

$1.49 / 1,000 data rows

Go to Apify Store
Google Trends Scraper - Reliable Interest, Regions & Trending

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

Lantern Lab

Maintained by Community

Actor 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. value is 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 partial with the reason — the two are never confused.
  • Your limits stop collection and appear in the rows: maxTrendingNow, the maxUpstreamRequests request 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 isPartial on 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 value is the percentage increase and formattedValue can read Breakout.
  • 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 partial with 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

FieldDefaultMeaning
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.
timeRangetoday 12-mnow 1-H, now 4-H, now 1-d, now 7-d, today 1-m, today 3-m, today 12-m, today 5-y, all.
category0Google Trends category number, 0 for all categories.
includeRegionstrueCollect the breakdown by region.
includeRelatedtrueCollect the related queries (and related topics, which Google currently returns empty — see Limits).
languageen-USResponse 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.
trendingNowHours24Trending window: 4, 24, 48 or 168 hours.
maxTrendingNow100Upper bound on trending rows.
maxUpstreamRequestsderivedHard ceiling on requests to Google Trends for the whole run, retries included. Leave empty and the Actor works one out from your input.
proxyConfigurationApify ProxyThe 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.

recordTypeKey fields
interest_over_timedate, timestamp, formattedTime, value (0–100), hasData, isPartial, comparisonIndex, comparisonTerms
interest_by_regiongeoCode, geoName, value, hasData, resolution (COUNTRY, REGION, DMA, CITY), comparisonIndex
related_queryquery, type (top / rising), value, formattedValue, rank
related_topictopic, topicMid, topicType, type, value, formattedValue, rank
trending_nowtitle, searchVolume, growthPercent, startedAt, relatedQueries, newsUrls, news, newsSource, listSource, rank, sourceId

One row per section read, recordType: "section_status", never charged:

FieldMeaning
sectioninterest_over_time, interest_by_region, related_queries, related_topics or trending_now.
rowsReturned / rowsChargedRows this section wrote and charged.
duplicatesSkippedRows the run had already collected.
partial / partialReasontrue with upstream_request_cap, charge_limit_reached, blocked, upstream_error, section_unavailable or not_collected when the section is incomplete.
statusTextThe 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.
  • value is relative interest within one chart, 0–100. Two runs with different terms, regions or windows are normalised differently, so their values are not comparable; comparisonTerms records 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: 0 as an empty result rather than inventing rows. Related queries are returned normally.
  • The last bucket of a series is live: isPartial: true means its value will still change.
  • The trending list's searchVolume is Google's own rounded figure. newsUrls come 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 has newsSource: "not_in_daily_trends_feed" and an empty newsUrls, never invented links. listSource says which of the two public lists a row came from; a feed-only row has the articles but no exact searchVolume or query breakdown, and those fields are null rather 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.
  • startedAt is Google's own time for a trend; collectedAt is ours. They are separate fields and neither is derived from the other.

Pricing

Pay per event, no start fee:

EventPriceCharged 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.