Google Trends Scraper: Interest, Regions, Queries
Pricing
$1.00 / 1,000 results
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
Maintained by CommunityActor 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
SUMMARYrecord 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
| Field | What it does | Default |
|---|---|---|
searchTerms | One term per line, or up to 5 terms separated by commas to compare them | |
geo | Country code (US), sub-region (US-CA), metro (US-CA-807), or empty for worldwide | worldwide |
timeRange | past_hour, past_4_hours, past_day, past_7_days, past_30_days, past_90_days, past_12_months, past_5_years, since_2004, custom | past_12_months |
startDate, endDate | YYYY-MM-DD, used with custom. Empty end date means today | |
category | Google Trends category id (the cat= number in a Trends link) | 0 (all) |
property | web, news, images, youtube, shopping | web |
interestOverTime | Line chart per term group | on |
interestByRegion | Map data per term group | on |
regionResolution | country, region, city, metro. Empty uses Google's default for the location | Google default |
relatedQueries | Top and rising queries per term | on |
relatedTopics | Top and rising topics per term | off |
trendingNow, trendingGeo | Trending searches of the past 24 hours for a country | off, US |
maxTrendingSearches | Keep the first N trending searches in Google's order (1 to 500) | 25 |
proxyConfiguration | Proxy. The country follows geo when you set none | Residential |
{ "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: likerelatedQueries, withtopic,topicTypeandtopicIdinstead ofquery.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.