Google Trends Scraper — Interest, Queries, Trending Searches avatar

Google Trends Scraper — Interest, Queries, Trending Searches

Pricing

from $1.00 / 1,000 delivered trending now rows

Go to Apify Store
Google Trends Scraper — Interest, Queries, Trending Searches

Google Trends Scraper — Interest, Queries, Trending Searches

Google Trends scraper for interest over time, interest by region and top and rising related queries on up to 20 keywords, plus Trending Now searches by country with traffic. A pytrends alternative with no login. Free preview. Pay per result: $0.02 per keyword report, $1.00 per 1,000 trends.

Pricing

from $1.00 / 1,000 delivered trending now rows

Rating

0.0

(0)

Developer

architek.earth

architek.earth

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

19 days ago

Last modified

Features

Limited permissions

Share

30-day run success: 88.7% (63 of 71 runs) against 54.7% (13,560 of 24,774 runs) for the most-used Google Trends actor in the Apify Store (our account's run log and the Store's public 30-day run stats, both read on 2026-10-24; our 71 runs include our own test runs on development builds).

Recorded run: 768 keyword rows from 5 keywords in 59 seconds (2026-10-24, build 0.1.24, run AmjgxApX6VSSGKeWN). A bounded canary sample, not a full-catalogue benchmark.

architek.earth — an independent data studio. Pay-per-result scrapers with recorded runs, published canaries and stable schemas, built for people and AI agents.

What's new

  • 2026-10-25 — Six input recipes, a head-to-head table, n8n and Make imports and MCP setup for Claude and Cursor added to this page; output and prices unchanged.
  • 2026-10-24 — README answers the questions Google Trends users ask most: what happens on a block or page change, what a failed run costs, run times, keyword comparison, region coverage and integrations; the listing title now leads with interest over time, related queries and trending searches. Output and price unchanged.
  • 2026-10-24 — Keyword mode: the listing now shows the keyword price as $20.00 / 1,000 keyword reports ($0.02 each) instead of a per-row figure, and explains that rows delivered on a watch rerun are Google Trends churn; price and output unchanged.

Google Trends in two modes from trends.google.com. Trending mode: give it a country code, a time window and an optional category, and get back each Trending Now search with its approximate traffic, start time, active flag and related queries. Keyword mode: give it up to 20 search terms, a country and an Explore time range, and get back the interest-over-time points, the interest-by-region table and the top and rising related queries for each term, as rows.

SourceMarketFromStandout fields
Google Trends Trending Now (trends.google.com/trending)Countries Google lists in Trending Now (US, GB and AU tested)$1.00 / 1,000 trendstitle, approxTraffic, startedAt, relatedQueries
Google Trends Explore, keyword mode (trends.google.com/trends/explore)Any country code Google Explore accepts; US validated with 20 keywords in one run (run QaR0fSWJLNbJyvDPL, 3,032 rows, no rate limits)$20.00 / 1,000 keyword reportsvalue by time, geoName, query with queryType TOP / RISING

✅ Why choose this scraper

Every row carries title, approxTraffic (Google's displayed threshold, for example 500000 for 500K+), startedAt in UTC and isActive.

hours takes 4, 24, 48 or 168 (7 days), matching Google's "started trending within" control; category takes one of 19 Trending Now category IDs, such as 17 for Sports.

relatedQueries holds Google's breakdown of the trend; the sample row below came with 32 queries.

With incrementalMode and a stateKey, a run delivers only trends not seen before under that key, identified by country, title and start time. The watch canary delivered 3 new automotive trends on 2026-10-22 (run di6kqI4IyhKSVlK4N) and none, at no charge, on 2026-10-21 (run rCijZ1auZYWPedBoR).

Measured on a schedule

Canary tasks run every day: 10 US trends from the 24-hour list, a US automotive watch, and one keyword report for coffee (US, today 12-m). The hero line above is a recorded keyword run on the default build: 5 keywords, 5 reports, 5 charges.

Runs end with rows or a reason, not a hang

20 keywords returned 3,032 rows in 215 seconds with 0 of 82 requests rate-limited (run QaR0fSWJLNbJyvDPL, 2026-10-24). A page that stays blocked or has changed after 3 attempts writes a free status row and the run moves on; nothing is charged for it.

Keyword mode ("mode": "keyword") turns each Explore report into rows: one timeline-point per Google data point (weekly for today 12-m), one region per subregion with data, and one related-query per entry of Google's TOP and RISING lists. One keyword, one dataset write, one keyword-report charge of $0.02 for the whole report.

Tested head-to-head (2026-10-25)

This actorThe field (16 Google Trends and trending-search actors in the store search)
Runs that did not succeed2 of 28 recorded canary runs (7.1%, 2026-10-21 to 2026-10-25): one stopped for charge reconciliation, one refused a second concurrent run on the same stateKeymedian 1%, range 0–45%; 10 of 16 had failed runs (30-day store stats)
Rows per run1 keyword report (about 150 rows) per keyword canary; the hourly watch canary delivers only trends new since its last run (0 to 10)not published
Price$1.00 / 1,000 trends; $0.02 per keyword reportmedian $4.00 / 1,000, range $0.50–$138.00

⚠️ Worth knowing up front

  • Related topics are not offered. Google shows the Explore "Related topics" widget to signed-in users only; the anonymous page answers "not enough data" even for coffee (checked again on 2026-10-24 through a residential IP in a real browser). This actor never uses an account, so it never requests that widget and never sells an empty field. The three keyword data types are interest over time, interest by region and related queries.
  • Related queries are delivered exactly as Google's logged-out Explore page lists them. The TOP list matched the page row for row. Google's logged-out RISING list is known to carry generic entries that have nothing to do with the term (on 2026-10-24 the public page listed "pet care tips" and "top songs this week" as rising for coffee); those rows are passed through, flagged queryType: "RISING", never filtered and never invented. If your pipeline needs clean rising terms, use the TOP list or filter RISING yourself.
  • Keyword values are Google's relative 0–100 index for that keyword, country and time range in that request; they are not search volumes and are not comparable across keywords or across runs. Each keyword is fetched as its own report: several keywords in one run are not one comparison chart, so a 50 for one term and a 50 for another do not mean equal interest. Google's multi-term comparison view is not offered in this version. formattedValue keeps Google's display text ("Breakout", "+4,200%").
  • Trending mode's relatedQueries is Google's breakdown of a trending search, not the Explore report; keyword mode's related-query rows are the Explore report.
  • Coverage is the countries Google publishes in Trending Now. US, GB and AU returned rows on 2026-10-22. A country code Google does not list is not swapped for another: run p7yo6VobvGEP24wMB with ZZ ended PARTIAL with a free SOURCE_CHANGED status row and no charge.
  • Interest by region is the subregion level Google's Explore map returns for the country (US states in the example below). City-level rows are not delivered.
  • approxTraffic is Google's approximate traffic threshold (100,000 for a displayed 100K+), not an exact search count and not the Explore 0–100 index.
  • newsLinks is always an empty array. The page Google serves carries article identifiers, not article URLs, and the actor does not invent links.
  • hours means "started trending within" that period, as on Google's page. The list and the traffic figures change between requests.
  • The page is fetched with up to 3 attempts, 3 seconds apart at least, backing off on HTTP 429 and 5xx. An empty result is fetched a second time before it is reported as NO_DATA. A page that is still blocked, rate-limited, unavailable or changed writes a free status row and the run ends PARTIAL with nothing charged.
  • Keyword mode sends at most 2 requests at a time, starting at least 3 seconds apart, for a token request plus one request per data type per keyword. A keyword whose widgets fail writes one free status row (BLOCKED, SOURCE_UNAVAILABLE, SOURCE_CHANGED or NO_DATA) and charges nothing for that keyword; the run goes on to the next keyword. Subregions Google marks as having no data are not delivered. A keyword nobody searches for, or a country code Google Explore does not know, ends in a free NO_DATA row (runs AQ3gtJ5WSTpbeaIX2, gW2D3R7rMckU8yUDi).
  • A run stops cleanly before its deadline (PARTIAL, stopReason ACTOR_DEADLINE; 2 minutes early, less for short timeouts) and at your spending limit (BUDGET_LIMIT), keeping what it delivered. The deadline is the run timeout, capped at 6 hours, including runs with no timeout. Reaching maxItems ends the run LIMITED. In keyword mode a keyword is fetched only when the spending limit still has room for one more $0.02 report, so the limit never cuts a report. maxItems still caps rows: a report cut by maxItems is still charged as one report, and the rest of it stays in the saved snapshot when a stateKey is set. Continuing it with continuePreviousRun delivers that rest free: the continuation of an already-charged keyword report is never charged again.
  • A free status row ("recordType": "status") is written for invalid input (INVALID_INPUT), a used-up preview allowance (PREVIEW_LIMIT), a stateKey in use by another run (STATE_BUSY), and a fetch that fails or finds nothing (BLOCKED, RATE_LIMITED, SOURCE_UNAVAILABLE, SOURCE_CHANGED, NOT_FOUND, NO_DATA). In keyword mode a spending-limit stop with keywords left writes one free BUDGET_LIMIT status row naming how many keywords were not fetched. A trending-mode spending-limit stop, a deadline stop or a maxItems stop writes no status row; the outcome is in RUN_SUMMARY. A storage fault or an unconfirmed delivery (RECONCILIATION_REQUIRED) fails the run and replays nothing.
  • With a stateKey outside watch mode, a run that stops before the end of the list leaves a saved snapshot; the next run with that key must set continuePreviousRun: true or use a new key, otherwise it ends with INVALID_INPUT. Changing country, window, category, watch mode or billing mode (or, in keyword mode, the keywords, time range or data types) under an existing key is also rejected.

⚡ Try the example

Free preview: 20 lifetime runs per Apify account, up to 10 trends each, with "billingMode": "preview". A preview run uses one of the 20 as soon as it starts, even if the source then fails, and never switches to paid. The paid example below costs $0.01.

Open the actor's input page, switch to JSON, paste this and start the run:

{
"mode": "trending",
"geo": "US",
"hours": 24,
"category": 0,
"maxItems": 10,
"billingMode": "paid"
}

Change geo to another country code, raise maxItems for the full list, or set category to one ID from the list below.

Keyword mode, one term, one report (about 154 rows) for $0.02:

{
"mode": "keyword",
"keywords": ["tesla"],
"geo": "US",
"timeRange": "today 12-m",
"dataTypes": ["interestOverTime", "interestByRegion", "relatedQueries"],
"maxItems": 1000,
"billingMode": "paid"
}

A report costs $0.02 whichever data types you pick; drop the ones you do not need for a smaller dataset: ["interestOverTime"] alone is 53 rows for today 12-m.

⚙️ Input

ParameterTypeDefaultDescription
modeselecttrendingtrending for the Trending Now list by country; keyword for Explore reports on your own search terms.
geostringUSTwo-letter uppercase country code that Google lists in Trending Now, for example US, GB, AU.
hoursinteger244, 24, 48 or 168 (7 days): trends that started within that period.
categoryinteger0Trending mode: a Trending Now category ID from the list below; 0 is all. Keyword mode: a Google Trends Explore category ID (the cat= number in an Explore URL); 0 is all. The two ID sets differ.
maxItemsinteger100 (prefill 10)1–10,000 delivered rows per run; preview runs are capped at 10.
billingModeselectpreview (prefill paid)paid charges per delivered trend; preview uses the free allowance.
incrementalModebooleanfalseNeeds stateKey. Delivers only trends whose country, title and start time are new to that key.
stateKeystring—Any name up to 100 characters, for example us-daily. Keeps the watch baseline and saved progress, isolated per account and key. Use a different key for different filters.
continuePreviousRunbooleanfalseNeeds stateKey. Resumes an unfinished saved snapshot instead of fetching a new one. Watch mode resumes its backlog without it.
proxyConfigurationproxy—Optional Apify proxy. No proxy is used by default.
feedbackstring—Optional note for the maintainers. It is logged and read by a human, and it never changes output.
keywordsarray[]Keyword mode only. 1–20 search terms, up to 100 characters each, no repeats.
timeRangeselecttoday 12-mKeyword mode only. now 1-H, now 4-H, now 1-d, now 7-d, today 1-m, today 3-m, today 12-m, today 5-y or all, as in Explore.
dataTypesmulti-selectall threeKeyword mode only. Any of interestOverTime, interestByRegion, relatedQueries.

Category IDs: 1 Autos and Vehicles, 2 Beauty and Fashion, 3 Business and Finance, 4 Entertainment, 5 Food and Drink, 6 Games, 7 Health, 8 Hobbies and Leisure, 9 Jobs and Education, 10 Law and Government, 11 Other, 13 Pets and Animals, 14 Politics, 15 Science, 16 Shopping, 17 Sports, 18 Technology, 19 Travel and Transportation, 20 Climate.

Input recipes

Linked recipes open a public example task with exactly this input; run it as is or copy it. Paste the others into the JSON tab of the input page.

  • US trending searches today, free preview: {"mode": "trending", "geo": "US", "hours": 24, "category": 0, "maxItems": 10, "billingMode": "preview"}
  • UK trending searches today, free preview: {"mode": "trending", "geo": "GB", "hours": 24, "category": 0, "maxItems": 10, "billingMode": "preview"}
  • Australia trending searches today, free preview: {"mode": "trending", "geo": "AU", "hours": 24, "category": 0, "maxItems": 10, "billingMode": "preview"}
  • One keyword report, US, past 12 months: {"mode": "keyword", "keywords": ["tesla"], "geo": "US", "timeRange": "today 12-m", "maxItems": 1000, "billingMode": "paid"}
  • Three keywords compared over 3 months, interest over time only ($0.06): {"mode": "keyword", "keywords": ["chatgpt", "gemini", "claude"], "geo": "US", "timeRange": "today 3-m", "dataTypes": ["interestOverTime"], "billingMode": "paid"}
  • Hourly feed of new US trends from the last 4 hours: {"mode": "trending", "geo": "US", "hours": 4, "maxItems": 50, "billingMode": "paid", "incrementalMode": true, "stateKey": "us-4h-watch"}

🧱 Stable fields

These top-level fields keep the same name and the same kind of value in every release. Fields are only ever added, never renamed or removed, so an n8n, Make, Zapier or spreadsheet pipeline can bind to them.

FieldTypeMeaning
geostringRequested country code, checked against the country on every source row.
titlestringTrending search as Google publishes it.
approxTrafficnumberApproximate traffic threshold published by Google (integer).
startedAtstringWhen the trend started, UTC ISO 8601.
isActivebooleantrue when Google shows no end time for the trend.
relatedQueriesarrayGoogle's breakdown of the trend, as strings.
newsLinksarrayAlways empty in this version; article URLs are not collected.
scrapedAtstringCollection time, UTC ISO 8601.
recordTypestring"status" on free status rows; "trending" on Trending Now rows; "timeline-point", "region" or "related-query" on keyword rows.

Keyword rows (mode: "keyword") carry these stable fields; a field that does not apply to a record type is absent, never null-filled.

FieldTypeOnMeaning
keywordstringallThe search term as you gave it (trimmed).
geostringallRequested country code.
timeRangestringallRequested Explore time range.
rowKeystringallNatural key within the keyword: the point's Unix time, the subregion code, or TOP:/RISING: plus the query. Watch mode identity is record type + keyword + geo + time range + rowKey.
valuenumberallGoogle's relative 0–100 index for that request (integer).
formattedValuestringregion, related-queryGoogle's display text, for example "98", "Breakout", "+4,200%".
timestringtimeline-pointStart of the data point, UTC ISO 8601; formattedTime keeps Google's label.
hasDatabooleantimeline-point, regionGoogle's data flag; delivered regions are always true. isPartial marks a still-open timeline point.
geoCode, geoNamestringregionSubregion code (US-CA) and name.
query, queryTypestringrelated-queryThe related query and its list: TOP or RISING. link is Google's relative Explore link.
scrapedAtstringallCollection time, UTC ISO 8601.

Data rows also carry deliveryId (unique per delivered row) and, in watch mode, changeType: "new". Status rows carry recordType, inputRef, status, message and, for fetch outcomes, mode. Other fields are extras, not part of the contract. To have one pinned, say so in feedback.

📦 Output example

Abridged real row from run RCvNLNtBM67sTa1Vf on 2026-10-22; values are a historical snapshot.

{
"recordType": "trending",
"geo": "US",
"title": "warriors vs lakers",
"approxTraffic": 500000,
"startedAt": "2026-10-22T01:00:00+00:00",
"isActive": true,
"relatedQueries": [
"warriors vs lakers",
"lakers",
"warriors",
"lakers vs warriors",
"luka doncic"
],
"newsLinks": [],
"scrapedAt": "2026-10-22T07:10:14.534598+00:00",
"deliveryId": "8f0b4983d6003332eb8440a7ef8f591f70945a775de833d2aef0a9cf0b7b3a3c"
}

Keyword rows, one of each record type, from run ZCcGUrUUxpyyltiIe on 2026-10-23 (tesla, US, today 12-m; scrapedAt, changeType and deliveryId omitted):

{"recordType": "timeline-point", "keyword": "tesla", "geo": "US", "timeRange": "today 12-m", "rowKey": "1760832000", "time": "2025-10-19T00:00:00+00:00", "formattedTime": "Oct 19 – 25, 2025", "value": 41, "hasData": true, "isPartial": false}
{"recordType": "region", "keyword": "tesla", "geo": "US", "timeRange": "today 12-m", "rowKey": "US-CA", "geoCode": "US-CA", "geoName": "California", "value": 98, "formattedValue": "98", "hasData": true}
{"recordType": "related-query", "keyword": "tesla", "geo": "US", "timeRange": "today 12-m", "rowKey": "TOP:tesla stock", "query": "tesla stock", "queryType": "TOP", "value": 100, "formattedValue": "100", "link": "/trends/explore?q=tesla+stock&date=today+12-m&geo=US"}

A free status row looks like this (run p7yo6VobvGEP24wMB, 2026-10-21, country code ZZ):

{"recordType": "status", "mode": "trending", "inputRef": "ZZ", "status": "SOURCE_CHANGED", "message": "Unexpected Trending Now response structure"}

The run's status message reads Done: N rows, M details, K status rows (STATUS), and the RUN_SUMMARY record of its key-value store holds the outcome (abridged, same run as the row above):

{
"status": "LIMITED",
"delivered": 10,
"charged": {"trending-row": 10, "keyword-report": 0},
"statusRows": 0,
"errors": 0,
"blocked": 0,
"unchanged": 0,
"recoveredUncertainCharges": 0,
"chargeUsd": "0.010",
"checkpointComplete": false
}

🧠 Advanced usage

Schedule "incrementalMode": true, "stateKey": "us-daily", "billingMode": "paid" and a maxItems that fits your budget. The first run sets the baseline from the rows it delivers; later runs deliver only unseen trends, each with changeType: "new". A recurring topic with a new start time counts as a new trend. Check RUN_SUMMARY.status and checkpointComplete before treating a poll as finished.

Use "category": 17 with its own stateKey. Google filters categories in the browser, so the actor applies the same category IDs to the rows it reads; one key per country, window and category.

With a stateKey, a run that stops at maxItems, the spending limit or the deadline keeps a saved snapshot. Run again with "continuePreviousRun": true to deliver the rest of the same snapshot; in watch mode the next identical run drains the backlog before fetching fresh data, so a small maxItems can delay fresh polls.

Join on title and geo, and use startedAt and isActive to window the match. approxTraffic is an attention signal, not evidence of purchase intent.

Track a keyword list week after week

Keyword mode with "incrementalMode": true and a stateKey delivers, on each later run, only rows whose identity is new under that key: a new weekly point, a subregion that gained data, a query that entered the TOP or RISING list. Unchanged rows are skipped. A keyword with no new row is not delivered and not charged; a keyword with one or more new rows is one $0.02 report (run QVlHhpwaztfu2zivB: 27 new related-query rows five hours after a 766-row baseline, no unchanged row delivered again). Rows delivered on a rerun are normal Google Trends churn, not an error: Google moves queries in and out of the TOP and RISING lists and changes which subregions have data between requests, so a rerun minutes later can still deliver a few new rows. Note that value is re-indexed by Google on every request, so a point already delivered is not re-delivered when only its value shifts; re-run without a stateKey when you need a fresh full series.

Keep keyword runs cheap

Keyword mode costs $0.02 per keyword report, whatever the time range or data types: 20 keywords cost $0.40. Size the run's spending limit to $0.02 × the number of keywords; without one, a run pays for exactly one report per keyword in its input. A keyword is fetched only when the limit still has room for its report, and a run that stops at the limit writes one free BUDGET_LIMIT status row naming the keywords left. Rows per report for today 12-m in the US: 53 timeline points, up to 51 regions, up to 50 related queries. Keep maxItems above keywords × rows per report: a report cut by maxItems is still one charged report, and the continuation of an already-charged keyword is free.

🔌 Integrations

Results land in a dataset you can export as JSON, CSV or Excel. They can also flow to Google Sheets, Make, Zapier or n8n, or to a webhook when a run finishes. The Apify Scheduler runs it on a timetable. An hourly or daily watch run with incrementalMode turns the 4-hour or 24-hour list into a feed of new trends; use paid mode for schedules so the preview allowance does not stop them. Copy-paste code in Python, Node, curl and n8n: architek-earth/examples/google-trends-scraper.

n8n and Make

💸 Pricing

Pay per result. Platform and proxy usage are included. Status rows and failed requests are free. Each trend, and each keyword report, is charged once, after it is written to the dataset; continuePreviousRun resumes after the last confirmed row, a row whose charge was left unconfirmed by a crash is not charged again (counted in RUN_SUMMARY.recoveredUncertainCharges), and trends already seen in watch mode are skipped without a charge.

EventPriceWhat it covers
Free preview$020 lifetime runs per Apify account with billingMode: "preview", up to 10 trends each.
trending-row$1.00 / 1,000 trendsOne delivered Trending Now row.
keyword-report$20.00 / 1,000 keyword reportsOne keyword's interest over time, interest by region and related queries (the data types you select), however many rows Google returns.

1,000 trends cost $1.00; the 10-trend example above costs $0.01. The Apify free plan's $5 monthly credit covers about 5,000 trends at $1.00 / 1,000, or 250 keyword reports at $0.02. A keyword report is $0.02: 5 keywords cost $0.10 (run AmjgxApX6VSSGKeWN: 5 reports, 768 rows, 5 charges) and 20 keywords cost $0.40; one keyword report is $0.02 whether it carries 53 rows (interest over time alone) or about 154 (all three data types, today 12-m, US). Each keyword is written and charged as one report, after the write: a crash between the write and its confirmation never charges that report twice (recoveredUncertainCharges counts it as 1; run f23x4XPF69qJr5lr9 resumed a mid-batch abort with no duplicate row and no second charge).

❓ FAQ

Is there a Google Trends API for trending searches? This actor works as one: it returns Google Trends Trending Now rows as JSON through the Apify API, callable from any language or from n8n, Make and Zapier.

Do I need a Google account or API key? No. It sends anonymous requests to the public Trending Now page; no login, cookies or Google API key.

Can I get interest over time or related queries for my own keyword? Yes: "mode": "keyword" with keywords, geo and timeRange returns interest over time, interest by region and the TOP and RISING related queries as rows. Related topics are not available: Google shows that widget to signed-in users only, and this actor never signs in.

Why does the RISING list contain queries unrelated to my keyword? Because Google's logged-out Explore page lists them; the actor passes the list through unchanged and marks every row queryType: "RISING". The TOP list is the one to use when you need clean related terms.

Are keyword values search volumes? No. They are Google's 0–100 index relative to the peak for that keyword, country and time range in that request.

Does it return exact search volume? No. approxTraffic is the threshold Google displays, such as 500,000 for 500K+.

Which countries does it support? The countries Google lists in Trending Now, by two-letter code. US, GB and AU were run on 2026-10-22; an unlisted code ends with a free status row and is never swapped for another country's data.

How much does a keyword report cost? $0.02 per keyword, for interest over time, interest by region and related queries together; 20 keywords cost $0.40. Status rows, failed keywords and keywords with no data are free; in watch mode a keyword with no new row is free.

What happens when Google blocks the run or changes its page? Each request gets up to 3 attempts with backoff. If it still fails, that keyword (or the trending list) gets a free status row (BLOCKED, RATE_LIMITED, SOURCE_CHANGED or SOURCE_UNAVAILABLE), nothing is charged for it, and the run ends PARTIAL with what it collected. It does not retry in a loop until the timeout. Daily canary runs in both modes catch a page change.

Do I pay for a run that returns nothing? No. Charges are made only for trends and keyword reports written to the dataset. Status rows, blocked or failed keywords and keywords with no data are free.

How long does a keyword run take? 5 keywords took 59 seconds (768 rows) and 20 keywords took 215 seconds (3,032 rows) on 2026-10-24. Requests go out 2 at a time, at least 3 seconds apart.

Can I compare several keywords against each other on one scale? No. Each keyword is its own report, scaled to its own peak, so values are not comparable between keywords. The multi-term comparison chart is not offered in this version.

Can I fetch only interest over time? Yes: "dataTypes": ["interestOverTime"] skips the region and related-query requests. The price is the same $0.02 per keyword report.

Why are some subregions missing? Subregions Google marks as having no data are not delivered, so every delivered region has hasData: true and a real value, not a zero placeholder. City-level rows are not offered.

What happens if I start it with no keywords or a wrong value? The run ends green with one free INVALID_INPUT status row saying what to fix. Nothing is charged.

Does it work from Zapier, Make, n8n or an AI agent? Yes, through the Apify API: the input is plain JSON and keywords is a list of strings, so several terms need no extra flag. Copy-paste examples are linked under Integrations.

Can I filter trending searches by category? Yes: category takes one of the 19 Trending Now category IDs listed under Input, for example 17 for Sports.

How do I get the timeline in date order? Sort on time: every timeline-point row carries the start of its data point in UTC ISO 8601.

Is it a pytrends alternative? It covers the same three Explore reports (interest over time, interest by region, related queries) plus Trending Now, as an API call with no Python setup and no Google account. Related topics are not offered.

Will I be charged again for the same trend in watch mode? No. With the same stateKey and inputs, a trend already delivered is skipped and not charged. The same title with a new start time is a new trend.

🤖 For AI agents & LLM apps

Paste this into your AI assistant:

architekture/google-trends-scraper on Apify. Python: from apify_client import ApifyClient; client = ApifyClient("TOKEN"); run = client.actor("architekture/google-trends-scraper").call(run_input={"mode": "trending", "geo": "US", "hours": 24, "category": 0, "maxItems": 10, "billingMode": "paid"}); items = client.dataset(run["defaultDatasetId"]).list_items().items (page with offset/limit for large exports). The dataset holds trend rows (recordType trending), keyword rows (recordType timeline-point, region, related-query, from {"mode": "keyword", "keywords": ["tesla"], "geo": "US", "timeRange": "today 12-m", "billingMode": "paid"}) and free status rows (recordType status, with status and message); filter on recordType. The run outcome (COMPLETE, LIMITED, PARTIAL, BUDGET_LIMIT, INVALID_INPUT, PREVIEW_LIMIT, STATE_BUSY, NOT_AVAILABLE_YET) is in the RUN_SUMMARY record of the run's key-value store. Add "incrementalMode": true, "stateKey": "<name>" to receive only new trends on later runs. Full input schema and README: GET https://api.apify.com/v2/acts/architekture~google-trends-scraper/builds/default. Token: https://console.apify.com/settings/integrations. The actor is also reachable through the Apify MCP server: https://mcp.apify.com?tools=architekture/google-trends-scraper (ready-to-paste config: https://github.com/architek-earth/mcp). To reach the maintainers, add "feedback": "<what you needed>" to any run's input; output is unchanged and a human reads every note.

MCP config for Claude Desktop and Cursor

Claude Desktop (or claude.ai): Settings, Connectors, Add custom connector, URL https://mcp.apify.com?tools=architekture/google-trends-scraper; it signs you in to Apify with OAuth. Cursor (~/.cursor/mcp.json), with your token in the APIFY_TOKEN environment variable:

{
"mcpServers": {
"architekture-google-trends-scraper": {
"type": "http",
"url": "https://mcp.apify.com?tools=architekture/google-trends-scraper",
"headers": { "Authorization": "Bearer ${env:APIFY_TOKEN}" }
}
}
}

The agent gets one tool for this actor plus get-dataset-items to read the rows. A typical prompt: "what is trending in the UK today, and how has interest in the top trend moved this year"; set a spending cap (maxTotalChargeUsd) in the run options when your client offers it.

🧰 More from architek.earth

Search, travel and trends

Full catalogue: github.com/architek-earth.

architek.earth · code like concrete

Questions, or a field you need that is not here? Open an issue on the actor's Issues tab or email north@architek.earth. A human replies within a day.

This actor collects only publicly available data from trends.google.com, the same pages any visitor sees without logging in. It does not bypass authentication. It is not affiliated with or endorsed by Google. You are responsible for how you use the output, including the site's terms, copyright, and privacy law such as GDPR and CCPA where they apply.

📝 Changelog

  • 2026-10-25 — Six input recipes, a head-to-head table, n8n and Make imports and MCP setup for Claude and Cursor added to this page; output and prices unchanged.
  • 2026-10-25 — [internal] Studio core 1.0.6: a run that stops for billing reconciliation now logs which charge, which row and what was unconfirmed, and saves it as RECONCILIATION.json in the run's key-value store. Output, pricing and charging unchanged.
  • 2026-10-25 — [internal] Studio core 1.0.5 (from 1.0.1). Trending mode: a 403, 429 or consent page is retried on a new proxy session for up to three tries in all before the same free BLOCKED / RATE_LIMITED status row; keyword mode keeps its warmed session and behaves exactly as before. Input, output and prices are unchanged.
  • 2026-10-24 — README answers the questions Google Trends users ask most: what happens on a block or page change, what a failed run costs, run times, keyword comparison, region coverage and integrations; the listing title now leads with interest over time, related queries and trending searches. Output and price unchanged.
  • 2026-10-24 — Keyword mode: the listing now shows the keyword price as $20.00 / 1,000 keyword reports ($0.02 each) instead of a per-row figure, and explains that rows delivered on a watch rerun are Google Trends churn; price and output unchanged.
  • 2026-10-24 — Keyword mode: the continuation (continuePreviousRun) of a keyword report already charged is free; each keyword is charged once across the run chain.
  • 2026-10-24 — Keyword mode is priced per keyword report: keyword-report $0.02 per keyword (interest over time, interest by region and related queries), replacing keyword-row; 20 keywords cost $0.40. A run that stops at the spending limit with keywords left writes a free BUDGET_LIMIT status row.
  • 2026-10-24 — Keyword mode: interest over time, interest by region and related queries for up to 20 keywords (mode: "keyword"), with watch mode and saved-snapshot continuation. Each keyword is written and charged as one report. Related topics are not offered (Google serves them to signed-in users only). Rising related queries are delivered as Google's logged-out page lists them, generic entries included; see "Worth knowing up front".
  • 2026-10-23 — Trends: keyword mode temporarily hidden pending validation; trending mode unaffected.
  • 2026-10-22 — A pay-per-event pricing mismatch on the platform now ends the run FAILED (status PRICING_MISMATCH in RUN_SUMMARY, no rows, nothing charged) so it is caught at once; a note in the status message goes inside the parentheses: (STATUS; note).
  • 2026-10-22 — Status message now reads Done: N rows, M details, K status rows (STATUS).
  • 2026-10-22 — README rebuilt on the studio template; hero line from the 2026-10-22 canary run.
  • 2026-10-21 — Invalid input, a used-up preview allowance, a busy stateKey and source blocks end the run green with a free status row; internal faults still fail the run.
  • 2026-10-21 — Published on the Apify Store.
  • 2026-10-20 — Narrowed the first version to Trending Now. Added period and category handling, new-trend watches, saved-snapshot continuation, free previews and two-event billing safeguards. Validated paid billing, free previews and saved-checkpoint recovery.