Google Trends Scraper
Pricing
from $1.25 / 1,000 results
Google Trends Scraper
Get Google Trends data for up to five compared search terms: interest over time, interest by country, region, city or metro, and top and rising related queries and topics. Any region, time range, category or search type, plus each country's trending searches.
Pricing
from $1.25 / 1,000 results
Rating
0.0
(0)
Developer
Philip Kirkbride
Maintained by CommunityActor stats
0
Bookmarked
1
Total users
1
Monthly active users
13 hours ago
Last modified
Categories
Features
Share
Get Google Trends data as clean rows, ready for a spreadsheet, dashboard or model. Give it up to five search terms and it returns, for each term, the 0-100 interest timeline, interest by country, state, city or US metro area, and top and rising related searches. Compared timelines share one scale. Each term's regional map and related-query ranking are normalized separately; two regional scores of 100 do not imply equal search volume. Pick a supported region, time range (from the past hour back to 2004), category and search type: web, image, news, YouTube or Google Shopping searches.
A second mode lists what is trending right now: trending searches from one or more countries over the past 4 hours to 7 days, with its approximate search volume, growth, start and end time, topic categories, the related searches grouped into the trend, and news articles for the top stories.
How it works
- Choose Search terms for interest and related searches, or Trending searches for what is trending now in one or more countries.
- Add up to five terms to compare on one scale (or up to 100 looked up one by one), then pick the region, period and search type.
- Start the run. Each term becomes one dataset row, and each trending search becomes one row.
- Open the Dataset to export JSON, CSV or Excel, or read it through the Apify API.
The Console's sample input (coffee and tea in the US over the past 12 months) is ready to run without edits. An empty input ({}) runs a small sample too: coffee compared with tea worldwide (two rows), and the status message says it was a sample. A searchTerms list left empty on purpose stops with an input error.
Quick Start
Compare two terms in the United States over the past 12 months:
{"searchTerms": ["coffee", "tea"],"geo": "US","timeRange": "past-12-months"}
List today's trending searches in the US and the UK, biggest first:
{"mode": "trending","trendingCountries": ["US", "GB"],"trendingSort": "searchVolume","maxItems": 200}
Input
| Input | Type | Default | Meaning |
|---|---|---|---|
mode | string | searchTerms | searchTerms for interest and related searches, trending for trending searches. |
searchTerms | array | — | Words or phrases to look up. A Google Trends topic id such as /m/02vqfm also works. |
compareTerms | boolean | true | On: up to five terms share one scale, so their values are directly comparable. Off: each term (up to 100) is scaled on its own. |
geo | string | "" | Country (US), sub-region (US-CA) or US metro (US-NY-501). Empty is worldwide. |
timeRange | string | past-12-months | past-hour, past-4-hours, past-day, past-7-days, past-30-days, past-90-days, past-12-months, past-5-years or all (2004 to present). |
startDate, endDate | string | none | A custom period (YYYY-MM-DD); overrides timeRange. |
category | integer | 0 | Google Trends category id; 0 is all categories. |
searchProperty | string | web | web, images, news, youtube or shopping. |
includeInterestOverTime | boolean | true | Add the interest timeline. |
includeInterestByRegion | boolean | true | Add interest per region. |
regionResolution | string | auto | auto, COUNTRY (worldwide only), REGION, CITY (needs a country) or DMA (US metro areas). |
includeLowVolumeRegions | boolean | false | Also list regions with too little volume to score. |
includeRelatedQueries | boolean | true | Add the top and rising related searches. |
includeRelatedTopics | boolean | false | Add related topics. Google Trends currently returns none for these lookups; while that lasts the section is reported as missing and costs nothing. |
trendingCountries | array | ["US"] | Countries for the trending mode. |
trendingTimeWindow | string | past-24-hours | past-4-hours, past-24-hours, past-48-hours or past-7-days. |
trendingActiveOnly | boolean | false | Skip trends that have already ended. |
trendingSort | string | relevance | relevance (Google's order), searchVolume or newest. |
includeTrendingNews | boolean | true | Attach news articles and a picture to the top trending searches. |
maxItems | integer | 100 | Global cap on dataset rows. Countries and separate terms are processed in input order; later subjects can be skipped when the cap is full. |
language | string | en-US | Language for date labels and names. |
What it returns
Every dataset row has a kind. A searchTerm row is one looked-up term:
| Field | Meaning |
|---|---|
searchTerm, comparedWith | The term, and other terms sharing its timeline scale. |
normalization | Timeline scale (shared_comparison or per_term); regional maps and related-query rankings use per_term. Scores are relative indices, not search counts. |
geo, timeRange, timeRangeResolved | The region, the requested range and the exact period Google Trends reported. |
category, searchProperty | The category and search type used. |
averageInterest | The term's average over the period, when terms are compared. |
interestOverTime | One point per interval: time (UTC), timestamp, formattedTime, value (0-100), source formattedValue (including <1 when published), hasData, and isPartial for the interval still filling. A zero score with hasData: true is retained. It does not mean zero searches. |
regionResolution, interestByRegion | The region level, then one entry per region: geoCode, geoName, value (0-100), formattedValue, hasData, and latitude/longitude for cities. |
relatedQueries | top and rising lists of rank, query, value, formattedValue, link. Top values are relative 0-100 scores within that term's query list. Rising values are percentage growth, not interest indices; rising entries add isBreakout (source label or growth above 5000%). |
relatedTopics | Not available right now; null. |
missingSections | Requested sections that failed or were not offered, with a code. An explicitly empty successful list is different from a missing or malformed source response. |
exploreUrl | The same view on the Google Trends site. |
scrapedAt | Collection time (UTC, ISO 8601). |
A trendingSearch row is one entry of a country's public Trending Now list: searchTerm, geo, rank, timeWindow, searchVolume and searchVolumeFormatted (Google's approximate lower bound, such as 500K+ or 1.5K+), increasePercentage, startedAt, endedAt, isActive, categories, relatedSearches, picture, newsArticles (title, url, source, picture), missingSections, exploreUrl and scrapedAt. Optional news failures do not discard a successfully retrieved trend; the missing section is reported. Rank is within each country's selected sort order. For a 48-hour trending window the explore link uses Google's 7-day timeline view; timeWindow describes the actual list filter.
The run summary (OUTPUT) reports items (rows delivered), errors and the list at failures. partialItems and sectionFailures count missing requested sections on delivered rows. subjectsAttempted, subjectsSkipped and truncated disclose row-cap coverage. stopReason says why the run ended (done, maxItems or timeBudget), retriedSubjects and recoveredSubjects count terms or countries that Google refused at first and that were tried again at the end of the run, and requests counts Google's answers (retries and refusal codes). A completed run can contain partial rows or subject failures; inspect these fields. The run's status line gives the same summary in one sentence. To collect every requested country, choose a sufficient global cap or run countries separately.
Output example
{"kind": "searchTerm","searchTerm": "coffee","comparedWith": ["tea"],"geo": "US","timeRange": "past-12-months","timeRangeResolved": "2025-10-23 2026-10-23","category": 0,"searchProperty": "web","averageInterest": 78,"interestOverTime": [{"time": "2026-10-11T00:00:00Z", "timestamp": 1791676800, "formattedTime": "Oct 11 – 17, 2026", "value": 69, "hasData": true, "isPartial": false},{"time": "2026-10-18T00:00:00Z", "timestamp": 1792281600, "formattedTime": "Oct 18 – 24, 2026", "value": 66, "hasData": true, "isPartial": true}],"regionResolution": "REGION","interestByRegion": [{"geoCode": "US-WY", "geoName": "Wyoming", "value": 100, "formattedValue": "100", "hasData": true, "latitude": null, "longitude": null},{"geoCode": "US-HI", "geoName": "Hawaii", "value": 47, "formattedValue": "47", "hasData": true, "latitude": null, "longitude": null}],"relatedQueries": {"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": 5950, "formattedValue": "Breakout", "link": "https://trends.google.com/trends/explore?q=sports+scores+today&date=today+12-m&geo=US", "isBreakout": true}]},"relatedTopics": null,"missingSections": [],"exploreUrl": "https://trends.google.com/trends/explore?q=coffee%2Ctea&date=today%2012-m&hl=en-US&geo=US","scrapedAt": "2026-10-23T00:41:06Z"}
{"kind": "trendingSearch","searchTerm": "patriots vs bears","geo": "US","rank": 1,"timeWindow": "past-24-hours","searchVolume": 500000,"searchVolumeFormatted": "500K+","increasePercentage": 1000,"startedAt": "2026-10-22T04:00:00Z","endedAt": null,"isActive": true,"categories": ["Sports"],"relatedSearches": ["patriots vs bears", "patriots", "bears vs patriots", "bears game"],"picture": null,"newsArticles": [],"exploreUrl": "https://trends.google.com/trends/explore?q=patriots%20vs%20bears&date=now%201-d&geo=US","scrapedAt": "2026-10-23T00:42:33Z"}
Terms without enough data and failures
Google Trends only scores terms with enough search volume. A term with no usable data for your region and period, or one that could not be retrieved, is listed in the run summary at OUTPUT.failures with a code (NO_DATA for insufficient data, INCOMPLETE_DATA for failed sections without usable data) and a message. It is not a dataset row and incurs no result charge. A run in which nothing could be collected exits with an error instead of finishing green with an empty dataset. The run-start charge still applies.
When Google Trends turns lookups away for a while, the actor waits a little longer each time (as long as Google asks), starts over as a new visitor, and sets a term that is still refused aside to try it once more at the end of the run. A chart that has gone stale is requested again. Sections already retrieved are kept: if the last try still fails, the row is delivered with the missing part listed in missingSections.
The run also watches its own timeout. Shortly before it, the actor stops looking things up, saves every row it has and lists each term or country it did not finish in OUTPUT.failures with the code TIME_BUDGET, so a long input ends as a finished run with partial results instead of a timed-out one.
| Code | Meaning |
|---|---|
NO_DATA | Google Trends has too little search volume for the term in that region and period. |
INCOMPLETE_DATA | Requested sections failed and nothing usable was left. |
RATE_LIMITED, CONSENT_REQUIRED, NETWORK_ERROR and similar | Google Trends kept turning the lookup away, including on the second try at the end of the run. Running it again later usually works. |
TOKEN_REJECTED | One chart could not be read even after requesting it again; the rest of the row is kept. |
TIME_BUDGET | Not finished because the run stopped before its timeout. Raise the run timeout or split the input. |
Limits and caveats
- Values are relative (0-100), not search counts. Compared timelines share one scale; separately looked-up timelines and every term's regional map are each scaled to their own peak. Google uses sampling, so repeated requests can differ. Zero may reflect rounding or insufficient volume rather than no searches; use
hasDataand sourceformattedValue. - Related topics are not available right now.
- Google keeps at most 25 top and 25 rising related searches per term.
- Trending searches cover countries (and some sub-regions), not worldwide. News articles are attached to the top stories only.
- Automated access is subject to Google's terms; use this actor only where you have the necessary permissions and a lawful basis.
FAQ
How do I compare more than five terms? Google Trends puts at most five terms on one scale. Include one common anchor term in each group of five and run the groups separately, or turn compareTerms off to score each term on its own.
How much does a run cost? A row is $0.00125 and the run start is $0.005, so the two-term sample costs about $0.0075. You are charged per term or per trending search, not per data point, so a long timeline or a large regional list is still one row.
What does a value of 100 mean? 100 is the term's peak within that view; the other values are relative to it. Compared timelines share one 0-100 scale, while each term's regional map and related-query ranking have their own. These are relative indices, not search counts.
Why is one of my terms missing from the dataset? Google Trends only scores terms with enough search volume. A term with no usable data, or one whose lookup failed, is listed in OUTPUT.failures with a code such as NO_DATA or INCOMPLETE_DATA. It is not a dataset row and is not charged.
Why are related topics empty? Google Trends currently returns no related topics for these lookups. The section is off by default; when it is requested and unavailable, it appears in missingSections and costs nothing extra.
What happens when Google Trends turns lookups away? The actor slows down, waits, starts over as a new visitor and tries refused terms again at the end of the run. Only terms Google still refuses after that are listed in OUTPUT.failures; they are not charged.
Why did my run stop early? Every run has a timeout (600 seconds by default). Looking up about 100 separate terms can take longer, so the actor stops shortly before the timeout, keeps the rows it has and lists the rest with TIME_BUDGET. Raise the timeout in the run options or split the terms across runs.
Can I run it on a schedule or from code? Yes. Schedule runs on Apify or start them with the Apify API, then read each run's dataset. Every run is a fresh snapshot; compare runs by searchTerm and time.
Why does the newest point say isPartial? The latest week, day or hour is still filling up, so its value can still change.
Which region codes work? ISO country codes (US, DE, BR), sub-regions (US-CA, GB-SCT, IN-MH) and US metro codes (US-NY-501). Leave geo empty for worldwide.
Price
You pay per result: each dataset row (one search term, or one trending search) is one result, plus a small run-start charge. A result row costs $0.00125 and the run start costs $0.005 per GB of memory; the default 512 MB run is one start event. The Console sample (coffee and tea in the US over the past 12 months) returns two rows for about $0.0075. Ten compared terms in two groups of five return ten rows for about $0.0175. Terms without enough data and failed lookups are not charged. The start is charged even if the run saves no results. Platform usage is included in the price.