Google Trends Scraper: Interest, Regions, Queries avatar

Google Trends Scraper: Interest, Regions, Queries

Pricing

$1.00 / 1,000 results

Go to Apify Store
Google Trends Scraper: Interest, Regions, Queries

Google Trends Scraper: Interest, Regions, Queries

Google Trends data that finishes: interest over time, interest by region, related queries and topics, comparisons of up to 5 terms and Trending now. Partial results are saved.

Pricing

$1.00 / 1,000 results

Rating

0.0

(0)

Developer

API Samurai

API Samurai

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

6 days ago

Last modified

Categories

Share

Google Trends Scraper: Interest, Regions, Related Queries

Get Google Trends data as clean JSON for any search term or a comparison of up to 5 terms:

  • Interest over time: the 0 to 100 line chart, one point per minute, hour, day, week or month depending on the range, with the last unfinished point marked isPartial.
  • Interest by region: countries, regions, cities or US metros, with a value per term.
  • Related queries and related topics: Top and Rising, with Breakout flagged.
  • Trending now: searches trending in a country in the past 24 hours, with search volume, start time, related queries and news articles.

Any location (worldwide, a country, a sub-region like US-CA), any time range (past hour to since 2004, or custom dates), category and search type (web, news, images, YouTube, Shopping).

Why runs don't fail

Google rate-limits Trends hard, so other scrapers often end with nothing. This Actor is built to finish:

  • Each proxy IP is its own session with its own Google cookies. When Google answers 429 or sends a page instead of data, the session waits and moves to a fresh residential IP, up to 6 attempts per request.
  • At most 2 term groups run at once, with requests spaced 1 to 2 seconds apart per session.
  • At the end of the run, every chart Google refused (429 or a page instead of data) gets a retry pass: after a 15 second pause, on fresh IPs with new cookies and 3 to 5 seconds between requests, with a second round after 30 seconds if needed. Charts fixed there count as delivered.
  • One failing term or chart never stops the run. Everything fetched is saved as it arrives.
  • The SUMMARY record and the run's status message list, per input line, what was saved and why anything is missing (for example "rate-limited by Google" or "search volume too low").
  • The run is marked failed only if Google answered nothing at all.
  • You pay only for rows saved. A chart that failed costs nothing.

Input

FieldWhat it doesDefault
searchTermsOne term per line, or up to 5 terms separated by commas to compare them
geoCountry code (US), sub-region (US-CA), metro (US-CA-807), or empty for worldwideworldwide
timeRangepast_hour, past_4_hours, past_day, past_7_days, past_30_days, past_90_days, past_12_months, past_5_years, since_2004, custompast_12_months
startDate, endDateYYYY-MM-DD, used with custom. Empty end date means today
categoryGoogle Trends category id (the cat= number in a Trends link)0 (all)
propertyweb, news, images, youtube, shoppingweb
interestOverTimeLine chart per term groupon
interestByRegionMap data per term groupon
regionResolutioncountry, region, city, metro. Empty uses Google's default for the locationGoogle default
relatedQueriesTop and rising queries per termon
relatedTopicsTop and rising topics per termoff
trendingNow, trendingGeoTrending searches of the past 24 hours for a countryoff, US
maxTrendingSearchesKeep the first N trending searches in Google's order (1 to 500)25
proxyConfigurationProxy. The country follows geo when you set noneResidential
{ "searchTerms": ["bitcoin", "chatgpt, gemini"], "geo": "US", "timeRange": "past_7_days" }

Output

One row per term group and data type. Every row has type, input, scrapedAt. Field names are stable. This example is from a real run for "bitcoin", US, past 7 days, shortened:

[
{
"type": "interestOverTime", "input": "bitcoin", "geo": "US", "timeRange": "past_7_days", "terms": ["bitcoin"],
"points": [
{ "date": "2026-10-21T06:00:00.000Z", "values": { "bitcoin": 67 }, "isPartial": false },
{ "date": "2026-10-28T06:00:00.000Z", "values": { "bitcoin": 58 }, "isPartial": true }
],
"averages": { "bitcoin": 56 }, "scrapedAt": "2026-10-28T06:04:28.275Z"
},
{
"type": "interestByRegion", "input": "bitcoin", "geo": "US", "timeRange": "past_7_days", "terms": ["bitcoin"], "resolution": "region",
"regions": [
{ "geoCode": "US-KS", "name": "Kansas", "values": { "bitcoin": 100 } },
{ "geoCode": "US-NV", "name": "Nevada", "values": { "bitcoin": 48 } }
],
"scrapedAt": "2026-10-28T06:04:29.422Z"
},
{
"type": "relatedQueries", "input": "bitcoin", "geo": "US", "timeRange": "past_7_days", "term": "bitcoin",
"top": [{ "query": "bitcoin price", "value": 100 }, { "query": "bitcoin stock", "value": 19 }],
"rising": [
{ "query": "ark invest cathie wood bitcoin forecast", "value": 55000, "isBreakout": true },
{ "query": "meta stock price", "value": 50, "isBreakout": false }
],
"scrapedAt": "2026-10-28T06:04:31.928Z"
}
]

Other row types:

  • relatedTopics: like relatedQueries, with topic, topicType and topicId instead of query.
  • trendingNow: geo, title, trafficApprox (searches, a lower bound as Google shows it, e.g. 200000 for "200K+"), startedAt, relatedQueries (list of strings), newsArticles [{ title, url, source }].

Dates are UTC. Rising value is the growth in percent. In a comparison, region values show each term's share in that region.

Pricing

$1 per 1,000 results. One result is one dataset row: one chart for one term group, one related list for one term, or one trending search. Nothing is charged for data that could not be fetched. Set a maximum cost per run and the Actor stops cleanly when it is reached.

FAQ

Why are the values between 0 and 100? Google Trends never shows absolute search counts. Values are relative: 100 is the peak for the chosen terms, location and time, 50 is half as popular, 0 means not enough data. Terms on one line share one scale, so put terms on the same line to compare them.

What happens when Google rate-limits? The request is retried from a fresh residential IP with new cookies, up to 6 times. If a chart still fails, the rest of the run continues and the chart gets up to 2 more slow retry rounds at the end of the run. Only charts that fail those too are listed as missing in the SUMMARY record, with the reason. Re-run just that term later.

Do I need a proxy? Residential proxy is the default and works best. Without a proxy the Actor still runs but cannot change IP, so it retries less (3 attempts) and waits longer between tries.

Can I schedule it? Yes. Use Apify Schedules to run it daily or weekly and track a term over time. With Trending now on, a daily schedule gives you a log of what was trending in a country.

Why is a chart missing for my term? Google returns no data when search volume is too low for the chosen location and range, or does not offer some charts for some settings (for example metro level outside the US). The SUMMARY record gives the reason per term.

Is scraping Google Trends legal? The Actor reads the same public, logged-out data anyone sees on trends.google.com. It does not log in or collect personal data. You are responsible for how you use the data and for following the laws and terms that apply to you. If in doubt, ask a lawyer.

Integrations

Results are in an Apify dataset you can download as JSON, CSV or Excel, or read through the Apify API. Connect the Actor to Make, Zapier, n8n, Google Sheets, Slack or webhooks through Apify integrations to send new trend data where you need it.