Google Trends Scraper - Interest by Time, Region & Queries avatar

Google Trends Scraper - Interest by Time, Region & Queries

Pricing

from $0.04 / 1,000 data rows

Go to Apify Store
Google Trends Scraper - Interest by Time, Region & Queries

Google Trends Scraper - Interest by Time, Region & Queries

Get Google Trends data for up to 50 keywords: interest over time, interest by country, region, metro or city, and related queries. Compare up to 5 terms. No login or API key. Pay per data row.

Pricing

from $0.04 / 1,000 data rows

Rating

0.0

(0)

Developer

Cliqto Media

Cliqto Media

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Share

Google Trends Scraper gets Google Trends data for your keywords: interest over time, interest by country, region, metro or city, and related queries and topics. Add one or more search terms, pick a location and a time range, and the Actor returns clean rows that you can open as a table, export to CSV or Excel, or read with the API.

No Google login, cookies or API key. The prefilled run (web scraping, past 12 months, worldwide) usually takes 5–35 seconds, returns about 150–170 rows and costs about $0.018 on the free plan.

Google Trends Scraper: add keywords, get interest over time, interest by region and related queries as clean rows

Table of contents

What it does

For each search term, the Actor asks Google Trends the same questions as the Google Trends Explore page and saves the answers as rows:

  • Interest over time: one row per time point with a value from 0 to 100 (100 = the highest interest in the chosen period and place).
  • Interest by region: one row per country, region, US metro area or city that has data.
  • Related queries: top and rising searches that people also made.
  • Related topics: top and rising topics, only when Google sends them.
  • Summary: one row per term with its status, average interest and row counts.

You can also compare 2–5 terms on one chart, like typing them side by side in Google Trends. Then the values are relative to the most popular term, and every region row shows each term's share of searches.

Good fit

  • Check how interest in a product, brand or topic changes over months or years.
  • Find the countries or US states where a term is most popular.
  • Collect rising queries for content and SEO ideas.
  • Compare up to 5 brands or keywords on one scale.

Not a fit / limits

  • Google Trends shows relative interest (0–100), not the number of searches. It is not a keyword volume tool.
  • It does not collect "Trending now" daily trends or real-time trending stories.
  • Google gives no region data for some terms and filters (for example many terms at city level). The Actor then returns the other sections and explains it in a warning.
  • Related topics: in our tests in October 2026, Google sent empty topic lists for most terms. The Actor returns topics only when Google sends them.

Quick start

  1. Open the Input tab.
  2. Keep the prefilled term web scraping in Search terms, or add your own terms (up to 50).
  3. Keep Time range at Past 12 months, or choose another period. Leave Location empty for worldwide data.
  4. Click Start.
  5. Open the Output tab. Every row has a recordType column: interest_over_time, interest_by_region, related_query, related_topic or term_summary. Sort or filter by this column, or export and filter in a spreadsheet.

Expected result: 53 weekly points, about 65 countries and about 35–50 related queries for web scraping, plus one summary row.

Input

Input fields

FieldPlain nameTypeRequiredDefault / prefillAllowed valuesEffectExampleRecommendation
searchTermsSearch termsarray of stringsyesprefill ["web scraping"]1–50 terms; duplicates (case and spaces ignored) are removedeach term is a separate Google Trends query["coffee", "tea"]start with 1–5 terms
compareTermsCompare termsbooleannofalsetrue, falseputs all terms into one comparisontrueuse for 2–5 terms that you want on one scale
geoLocationstringnoempty = worldwideGoogle Trends location code: country US, region US-CA, US metro US-NY-501limits data to one place"DE"leave empty for a world view
timeRangeTime rangestring (list)notoday 12-m (also the prefill)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 (since 2004)period and step of the time points"today 5-y"12 months for most jobs
customTimeRangeCustom time rangestringnoemptyYYYY-MM-DD YYYY-MM-DD, from 2004-01-01 to todayexact dates; overrides timeRange"2024-01-01 2024-06-30"use for a past event or season
categoryCategorystring (list)no"0" (all categories)25 main Google Trends categorieslimits data to searches in one category"7" (Finance)use when a word has several meanings
categoryIdCategory IDintegernoemptyany Google Trends category idoverrides category; also subcategories1227 (Android OS)only when the list has no fitting category
searchTypeSearch typestring (list)nowebweb, images, news, shopping, youtubewhich Google search is measured"youtube"web for most jobs
includeTimelineInterest over timebooleannotruetrue, falsewrites the time point rowsfalseturn off if you only need regions or queries
includeRegionsInterest by regionbooleannotruetrue, falsewrites the region rowsfalse
regionResolutionRegion levelstring (list)noautoauto, COUNTRY, REGION, DMA, CITYlevel of the region rows"DMA"auto = countries worldwide, subregions in a country
includeLowVolumeRegionsInclude low-volume regionsbooleannofalsetrue, falseadds regions with few searchestruekeep off: small places often show a misleading 100
includeRelatedRelated queries and topicsbooleannotruetrue, falsewrites related query and topic rowsfalse
outputFormatOutput formatstring (list)norowsrows, groupedrows: one flat row per data point; grouped: one item per term with nested lists"grouped"rows for spreadsheets
proxyConfigurationProxyobjectnoApify ProxyApify Proxy settingshow the Actor connects to Googlekeep the default

The input must have at least one of includeTimeline, includeRegions or includeRelated turned on. An invalid input (for example an unknown geo code) fails at the start with a clear message and no charge except the start event.

Interacting settings

WhenInput AInput BEffective behaviorExampleCost/result effect
Custom datescustomTimeRangetimeRangecustom dates win2024-01-01 2024-06-30none
Category ID setcategoryIdcategorycategoryId wins1227none
ComparisoncompareTerms = truesearchTerms2–5 terms in one query; more than 5 is an input error["coffee", "tea"]same row price; related topics are not sent by Google for comparisons
Country levelregionResolution = COUNTRYgeoworks only worldwide (geo empty)
US metro levelregionResolution = DMAgeoworks only for US locations (US, US-CA, …)geo US, DMAabout 200 metro rows
City levelregionResolution = CITYanyGoogle often has no city data; then the term has no region rows and the run shows a warningfewer paid rows
Short periodstimeRange = now 1-H … now 7-dminute or hourly pointsnow 7-dmore time point rows (up to about 170)

Input examples

One keyword, worldwide, past 12 months (prefill)

{
"searchTerms": ["web scraping"],
"timeRange": "today 12-m"
}

Expected behavior: one Google Trends query. Expected output: 53 interest_over_time rows, about 65 interest_by_region rows (countries), about 35–50 related_query rows and 1 term_summary row. Limit or cost note: about $0.018 (start + about 150–170 data rows).

Compare two drinks in the United States by state

{
"searchTerms": ["coffee", "tea"],
"compareTerms": true,
"geo": "US",
"timeRange": "today 3-m"
}

Expected behavior: one comparison query for both terms. Expected output: time points and US state rows for each term; comparisonGroup is coffee | tea and comparisonShare shows each term's share in a state.

YouTube interest by US metro area

{
"searchTerms": ["minecraft", "fortnite"],
"compareTerms": true,
"geo": "US",
"searchType": "youtube",
"regionResolution": "DMA",
"includeRelated": false
}

Expected behavior: YouTube searches only, regions as US metro areas (geoCode is the metro number).

Output

Results are saved to the default Dataset. The run summary is saved as RUN_SUMMARY in the default key-value store.

Output example

These are four real rows (shortened) from the prefilled run on 2026-10-15. All rows also have comparisonGroup (null), geo (WORLDWIDE), timeRange (today 12-m), categoryId (0), searchType (web), exploreUrl, sourceUrl and fetchedAt.

[
{
"recordType": "interest_over_time",
"searchTerm": "web scraping",
"date": "2025-10-12T00:00:00.000Z",
"formattedTime": "Oct 12 – 18, 2025",
"value": 56,
"hasData": true,
"isPartial": false
},
{
"recordType": "interest_by_region",
"searchTerm": "web scraping",
"geoCode": "US",
"geoName": "United States",
"value": 50,
"formattedValue": "50",
"comparisonShare": null,
"latitude": null,
"longitude": null,
"regionResolution": "COUNTRY"
},
{
"recordType": "related_query",
"searchTerm": "web scraping",
"rankType": "top",
"query": "web data scraping",
"value": 100,
"formattedValue": "100",
"isBreakout": false,
"link": "https://trends.google.com/trends/explore?q=web+data+scraping&date=today+12-m"
},
{
"recordType": "term_summary",
"searchTerm": "web scraping",
"exploreUrl": "https://trends.google.com/trends/explore?date=today+12-m&q=web+scraping&hl=en-US",
"status": "complete",
"statusReason": null,
"errorCode": null,
"average": 58,
"timelinePoints": 53,
"regionRows": 65,
"relatedQueryRows": 45,
"relatedTopicRows": 0
}
]

null means "Google has no value here". The Actor never writes 0 in place of a missing value. Regions without data are left out (Google Trends shows them as empty), so interest_by_region has only regions with a number.

Output fields

FieldMeaningTypeCan be empty?Example / enumSource / notes
recordTypewhat the row holdsstringnointerest_over_time, interest_by_region, related_query, related_topic, term_summary, termterm only in grouped format
searchTermthe term of this rowstringnoweb scrapingas you typed it, trimmed
comparisonGroupall compared termsstringyes, null without comparisoncoffee | tea
geolocation of the querystringnoWORLDWIDE, US, US-CA
timeRangeperiod sent to Googlestringnotoday 12-m, 2024-01-01 2024-06-30
categoryIdGoogle Trends categoryintegerno0 (all)
searchTypemeasured Google searchstringnoweb, images, news, shopping, youtube
exploreUrlthe same query in Google Trendsstringnohttps://trends.google.com/trends/explore?...open it to check the chart
sourceUrlGoogle Trends endpoint of the datastringnohttps://trends.google.com/trends/api/widgetdata/multiline
fetchedAtwhen the data was fetchedstring (ISO 8601, UTC)no2026-10-15T05:03:44.876Z
datestart of the time pointstring (ISO 8601, UTC)time rows only2025-10-12T00:00:00.000Zweeks, days, hours or minutes, as Google sends them
formattedTimetime label as Google shows itstringyesOct 12 – 18, 2025
valueinterest 0–100, or score of a related itemintegeryes, null when Google has no data56rising items: growth in %, e.g. 23350
hasDataGoogle has data for this time pointbooleantime rows onlytrue
isPartialthe latest point is not finished yetbooleantime rows onlytrue for the last pointits value can still change
geoCoderegion codestringyesUS, US-CA, 501 (metro)null for cities
geoNameregion namestringregion rows onlyUnited States
formattedValuevalue as Google shows itstringyes50, <1, +250%, Breakout
comparisonShareterm's share of searches in this region (%)integeryes, null without comparison69
latitude, longitudecity positionnumberyes, only at city level40.71, -74.0
regionResolutionlevel of the region rowsstringyesCOUNTRY, REGION, DMA, CITY
rankTypetype of related itemstringrelated rows onlytop, rising
queryrelated query textstringrelated query rowsweb data scraping
topicTitle, topicType, topicMidrelated topic name, type and Knowledge Graph idstringrelated topic rowsPython, Programming language, /m/05z1_only when Google sends topics
isBreakoutrising item marked Breakout (growth over 5000%)booleanrelated rows onlytrue
linkGoogle Trends link for the related itemstringyeshttps://trends.google.com/trends/explore?q=...
statusresult of the termstringsummary rowscomplete, partial, not_found, erroronly complete and partial terms are charged
statusReasonwhy a term is partial, not found or errorstringyes, null when completeGoogle Trends has not enough search data ...plain English
errorCodemachine code of a problemstringyesSOURCE_UNAVAILABLE, RATE_LIMITED
averageaverage interest over the periodintegeryes58
timelinePoints, regionRows, relatedQueryRows, relatedTopicRowsrows written for the termintegersummary rows53, 65, 45, 0
interestOverTime, interestByRegion, relatedQueriesTop, relatedQueriesRising, relatedTopicsTop, relatedTopicsRisingnested lists of the same dataarraygrouped format only; null when not requestedsame fields as the flat rows

Output entities and surfaces

SituationDataset/API/KVS/live viewResult shapeUser action
Normal termDataset (all rows; views Overview, Interest over time, Interest by region, Related queries and topics, Per-term summary set the columns)time, region and related rows + 1 term_summary rowfilter by recordType or export
Term with too little search dataDataset, Per-term summary1 term_summary row with status not_foundtry a wider location, period or category
Missing sectionDatasetstatus partial, statusReason says which section is missinguse the rows you have, or run the term again
Source problemDataset + RUN_SUMMARYstatus error rows, run status PARTIAL or ERROR with a messagerun again later

RUN_SUMMARY has the run status (COMPLETE, PARTIAL, NO_RESULTS, CAPPED, ERROR, INVALID_INPUT, CANCELLED), stopReason, a plain message, counts per status and row type (chargedRows is the number of paid data rows), one entry per term, and warnings.

The Dataset views only choose the columns for one row type. They do not hide other rows: every view has all rows. Filter by recordType when you need one type, or use outputFormat grouped to get one item per term.

Pricing

Pricing unit

This Actor uses pay-per-event pricing. You pay for the data rows you get, and a small start fee per run:

EventWhenFREEBRONZESILVERGOLD and higher
Actor startonce per run (one event per GB of memory; default 256 MB = 1 event)$0.01$0.01$0.01$0.01
Data roweach time point, region, related query or related topic of a term with data$0.00005$0.0000475$0.000045$0.0000425
  • 1,000 data rows cost $0.05 on the free plan ($0.0425 on GOLD).
  • The term_summary row is free. Terms with not_found or error status are free.
  • In grouped format you pay for the same number of data rows inside each item.
  • You do not pay platform usage on top.
  • A run where no term has data costs only the start fee ($0.01).

You can set a maximum cost per run in Apify. The Actor writes a term only if all its rows fit in that limit. When the next term does not fit, the run stops, keeps what it saved, and RUN_SUMMARY shows CAPPED with CHARGE_LIMIT.

Cost examples

Prices for the FREE plan, from our test runs in October 2026. Row counts change a little from run to run, because Google samples related queries.

ScenarioInput scopeData rowsStartRowsTotalTime
Prefill1 term, 12 months, worldwide163$0.01$0.0082about $0.0185–35 s
Small5 terms, 12 months, worldwideabout 850$0.01about $0.042about $0.0525–10 s
Large50 terms, 12 months, worldwideabout 6,500$0.01about $0.33about $0.34about 110 s
Timeline only1 term, now 1-H, no regions or related58$0.01$0.0029about $0.013under 15 s
Nothing found50 terms with no search data0$0.01$0$0.01about 20 s

A term can have more rows with today 5-y or all (more time points) or with includeLowVolumeRegions (more regions): usually 300–400 data rows, about $0.015–0.02 per term.

Use cases

Buyer jobInput pathOutput entityKey fieldsNext integration
Seasonality of a productsearchTerms, timeRange today 5-ytime rowsdate, value, isPartialchart in Google Sheets or BI
Where to launchsearchTerms, regionResolutionregion rowsgeoName, geoCode, valuemap or market list
Content and SEO ideassearchTerms, includeRelatedrelated query rowsquery, rankType, value, isBreakoutkeyword list
Brand comparisonsearchTerms (2–5) + compareTermstime and region rowsvalue, comparisonShare, comparisonGroupdashboard
News and YouTube interestsearchType news or youtubetime rowsdate, valuereport

Scheduling and monitoring

  • Create an Apify schedule that runs the same input every day, week or month.
  • Each run is a new snapshot. Google rescales values (0–100) for every query, so compare whole series, not one point between two runs.
  • The latest time point has isPartial true. Its value can change in the next run.

API, export and integrations

  • API: start the Actor with the Apify API and read Dataset items as JSON. Add ?view=timeline, ?view=regions or ?view=related to get only the columns of that view (all rows stay; filter by recordType in your code).
  • Export: download the Dataset as JSON, CSV, Excel or XML from the Output tab.
  • Integrations: use Apify integrations (Make, Zapier, Google Sheets, webhooks) to move rows into your tools.

Use with AI agents (MCP)

  • MCP server URL with only this Actor: https://mcp.apify.com?tools=cliqtomedia/google-trends-scraper
  • Smallest useful input:
{ "searchTerms": ["web scraping"], "timeRange": "today 12-m" }
  • Key output fields: recordType (row type), date + value (interest over time, 0–100), geoName + value (interest by region), query + rankType (related searches), status (term result).
  • Typical run: one term in 5–35 seconds for about $0.018. Limits: up to 50 terms per run, up to 5 terms in one comparison.

Limits and partial results

  • Up to 50 terms per run. 50 terms took about 110 seconds in our tests.
  • Up to 5 terms in one comparison (Google Trends limit).
  • Values are relative (0–100) inside one query. Values of terms from separate queries are not on the same scale; use compareTerms for that.
  • A run works for up to about 4.5 minutes with the default 300-second timeout. If it has more terms, it stops with the rows it has and RUN_SUMMARY shows CAPPED with DEADLINE.
  • A partial term is charged for the rows it has. statusReason tells you which section is missing.
  • If Google refuses many requests, the Actor first switches to new connections and then to residential proxies. If Google still refuses, the run stops; terms that were not done get free error rows.

This Actor is not a drop-in replacement. The main differences:

  • One flat row per time point, region or related item (outputFormat rows), instead of one item per term with nested arrays. Choose grouped if you want one item per term.
  • Dates are ISO 8601 strings, and value is a number (not a list).
  • Only regions with data are returned.
  • City and metro data come from regionResolution (CITY, DMA), not from separate fields.
  • Rising items have isBreakout true when Google shows "Breakout".

Troubleshooting

A term has status not_found

Symptom: the term has only a term_summary row. Likely reason: Google Trends has not enough search data for this term with your filters. Check: open exploreUrl from the row. Google Trends shows the same "not enough data" message. Action: use a wider location, a longer period or all categories. The term is free.

No region rows at city level

Symptom: regionRows is 0 and the run has a warning about the CITY level. Likely reason: Google Trends often has no city data for a term, a location or a search type. Action: use regionResolution auto or REGION, or DMA for US locations.

RUN_SUMMARY shows CAPPED

Symptom: some terms have not_processed in the summary. Likely reason: the maximum cost per run (CHARGE_LIMIT) or the time limit (DEADLINE) was reached. Action: raise the maximum cost, or split the terms into more runs.

Terms have status error

Symptom: errorCode such as RATE_LIMITED or SOURCE_UNAVAILABLE. Likely reason: Google Trends refused or did not answer requests at that time. Action: run the same input again later. Error terms are not charged.

FAQ

Do I need a Google account or an API key?

No. The Actor reads public Google Trends data without login.

Is this the number of searches?

No. Google Trends gives relative interest from 0 to 100. 100 is the highest point for the chosen term, place and period. It does not show search volume.

Why are the numbers a little different from yesterday?

Google Trends uses a sample of searches and rescales each query. Small changes between runs are normal, mostly for small terms and short periods.

Google sends related topics only for single terms (not for comparisons), and in our tests in October 2026 the topic lists were often empty. The Actor returns topics only when Google sends them.

Why does a small country have 100?

Region values are the share of all searches in that place, not the number of searches. A small country with few searches can get 100. This is how Google Trends shows it; the Actor does not change values. Rising values like 23350 (+23,350%) and "Breakout" also come from Google.

How fresh is the data?

Each run asks Google Trends at the time of the run. The latest time point is often not finished yet (isPartial true).

Support

For a bug, a question or a feature request, open an issue in the Issues tab of this Actor. Include the run ID, your input and the statusReason or RUN_SUMMARY message. Never send tokens, cookies or billing data.