Google Trends Scraper - Interest, Regions, Trending Now avatar

Google Trends Scraper - Interest, Regions, Trending Now

Pricing

from $1.60 / 1,000 term reports

Go to Apify Store
Google Trends Scraper - Interest, Regions, Trending Now

Google Trends Scraper - Interest, Regions, Trending Now

Batch-compare Google Trends keywords by country and time, e.g. {"searchTerms":["chatgpt, claude"],"geo":"US"}. On 429 it cools down and retries; partial results, only successful reports charged. Interest over time, by region, related queries, Trending Now, CSV. $2 per 1,000 term reports.

Pricing

from $1.60 / 1,000 term reports

Rating

0.0

(0)

Developer

Yukai Lin

Yukai Lin

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

16 hours ago

Last modified

Security

Limited permissions

Share

Compare batches of Google Trends keywords by country and time range; comma-separated terms in one search are compared on the same scale. Paste this batch input: {"searchTerms":["chatgpt, claude, gemini","sourdough"],"geo":"US","timeRange":"today 12-m"} (each array entry is one search). If Google rate-limits a search, the Actor cools down and retries; it returns completed reports plus free failure rows for the rest, and charges only successful reports.

$2 per 1,000 term reports and $0.50 per 1,000 trending searches, with no start fee. Searches without enough Google data and failed requests are free. External-run telemetry, 21-27 October 2026 (Asia/Taipei): 48 of 61 runs fully succeeded (78.7%); 8 were partial and 5 failed. Partial runs are not counted as fully successful.

It returns Google Trends data as clean rows for any search terms, countries and time ranges, and the Trending Now list of any country:

  • 📈 Interest over time: Google's 0-100 search interest for every point in the chart (hours, days, weeks or months), with the average, peak and latest value per term.
  • ⚖️ Comparisons: up to 5 terms on one line (chatgpt, claude, gemini) are measured on one scale, exactly like the trends.google.com chart. Up to 25 terms on a line also work: they run in batches of 5 that share the first term (the anchor) and are put on one approximate scale through it (see the FAQ).
  • 🗺️ Interest by region: countries (worldwide) or states, regions, metro areas and cities of a country.
  • 🔎 Related queries: the top and rising searches for each term, with the increase in percent or "Breakout".
  • 🔥 Trending Now: what a country searches for right now (past 4 hours to 7 days), with search volume, increase, start time, category, the related searches of each trend and news articles for the top ones.
  • 🔔 Only new for schedules: trending searches seen in earlier runs are skipped (free) and every report lists the rising queries that are new since the last run.
  • 📄 CSV files of everything in long format (one row per term and date), ready for Sheets, Excel or a BI tool.
  • Web, image, news, Google Shopping and YouTube search; any category; any time range from 2004.

Google Trends answers bursts of requests with HTTP 429 (Too Many Requests), which can interrupt a batch. This Actor spaces out explore requests and shares the same explore answer across identical searches in one run. On an explore 429, it moves to a fresh Apify proxy session (a new IP and a new Google session; the run stays on it for the following searches) and, if that is refused too, to further fresh sessions with growing pauses. Chart data can also come from our US, Singapore and Europe servers. Routes that returned 429 are cooled down for later searches in the same run. Searches that still fail, or that Google has too little data for, are free. Using Apify proxy may add proxy usage charges to your Apify account.

Real results (3 October 2026)

  • The default input (2 searches in the US, one a 3-term comparison, plus 25 US trending searches): 27 rows in 8.4 seconds, $0.0205.
  • 20 worldwide 5-year searches in one run: 20 of 20 complete, 0 rate-limit errors, 45 seconds, $0.042.
  • chatgpt, claude, gemini in the US, past 12 months: averages 78 / 19 / 28; latest week 69 / 20 / 34; rising for claude: "claude cowork" (Breakout); for gemini: "gemini 3.5 pro" (+950%).
  • Trending Now US, past 24 hours: "penn state vs northwestern" 500K+ searches, +1,000%, Sports, with 28 related searches.
  • Scheduled twice with "Only new": the second run returned only the 2 reports and skipped the 16 trending searches already seen (free).

Call it from the Apify API like a Google Trends API: one request per batch, results as JSON or CSV. Example input for the top and rising related queries of three compared terms:

{ "searchTerms": ["chatgpt, claude, gemini"], "geo": "US", "timeRange": "today 12-m", "relatedQueries": true }

Result: 3 term reports ($0.006), each with interest over time and its top and rising related queries; in the 3 October 2026 run, the rising queries for claude included "claude cowork" (Breakout).

Use cases

  • SEO and content planning: find rising queries before they peak, compare topics, pick the region to target.
  • Product and market research: seasonality and demand by state or country for a product category.
  • Trend alerts: schedule Trending Now (or a set of terms) every hour and get only what is new, e.g. into Slack via an Apify integration.
  • Data journalism and reports: interest-over-time CSV for charts.
  • AI agents: "Is interest in X growing?" answered with real numbers.

How much does it cost?

EventPriceWhen
Term report$2.00 / 1,000 ($0.002 each)one term's report for one region and time range: interest over time and the sections you selected (by region, related queries, related topics). A 3-term comparison is 3 reports.
Trending search$0.50 / 1,000 ($0.0005 each)one Trending Now search with its volume, increase, start time, categories and related searches

Free: searches without enough Google data, incomplete or failed reports (rate limits that outlast the retries), trending searches filtered out or already seen in "Only new" mode, invalid lines. No start fee. Larger Apify plans get the usual volume discount (Silver 10%, Gold and above 20%).

Outside a confirmed run-wide outage, an affected search is held for a retry pass: at the end of the run, after a 120-240 second cool-down (shortened near timeout), each eligible rate_limited or incomplete search is run once more, one at a time, with fresh route choices. If that works you get the normal report (charged once); if not, or if the run has no time left for it, you get a free rate_limited / incomplete row (success: false, charged: false, retried says whether the second attempt ran) with advice to retry that input later. Each processed search still has exactly one row. If other searches succeeded, SUMMARY.status is PARTIAL_RESULTS; the successful reports remain charged. SUMMARY.rateLimitRetries counts the 429 responses, SUMMARY.exploreRoutes counts route attempts, SUMMARY.explore429Routes counts HTTP 429 by route, and SUMMARY.trends429Endpoints distinguishes explore, widgetdata, Trending Now and RSS refusals; SUMMARY.retryPass describes the end-of-run retries (attempted, recovered, stillFailed, skipped).

When two different searches have received HTTP 429 from every explore route actually available to this run, new searches pause for a bounded cool-down (at most 240 seconds, shortened for the run deadline). Exactly one later search probes Google. If it succeeds, the remaining queue resumes normally; if it is still fully rate-limited, the remaining searches get unique free rate_limited rows with a retry suggestion to wait at least 10 minutes (Google's limit may last longer) without further explore requests. If every search is rate-limited, SUMMARY.status is FAILED; a run with any successful report and free failures is PARTIAL_RESULTS. A run too close to its deadline omits an unsafe probe; searches that cannot safely be written are listed in SUMMARY.notProcessed. A probe answered with HTTP 400 produces a free invalid-input row and releases the run-wide cool-down for the next search. A single 429, a working alternate route, HTTP 400 and missing data do not trigger this run-wide protection. SUMMARY.outage reports cooldowns, probes, skipped and its final state (open or closed). Existing SUMMARY.retryPass still describes individual retry attempts; held failures are written free when a persistent outage closes the circuit.

Runs that overlap (for example several runs started at the same time) share one request budget for Google's explore call through our backend, with a fair share per Apify account, so starting more runs at once no longer multiplies the rate Google sees and triggers 429s. A single run is not slowed down by it; if the shared budget is unavailable the run keeps its own pacing. SUMMARY.sharedLimiter shows how long the run waited for it.

Example: 100 keywords every week in 3 countries = 300 reports = $0.60 per week. Trending Now for one country every hour with "Only new" ≈ 20-40 new trends a day ≈ $0.01-0.02 a day.

Control your cost

  • Each search line costs at most (terms × $0.002) per region; the run logs this worst case at the start and compares it with your maximum charge per run. When the next search could pass it, no new search starts (SUMMARY.status: LIMIT_REACHED, SUMMARY.notProcessed).
  • maxTrendingPerGeo caps trending searches per country.
  • Every row has charged: true or false; free rows say "(not charged)". If Apify restarts the run, finished searches are not charged again.

How to use it

  1. Search terms: one search per line; comma-separated terms on a line are compared (up to 5 exactly, up to 25 approximately through the first term).
  2. Country or region: empty = worldwide, or US, GB, US-CA ... (several codes, comma-separated, repeat every search in each).
  3. Time range, Search type (web, images, news, shopping, YouTube) and optional Category id.
  4. Choose the sections: interest over time, by region (and its level), related queries, related topics.
  5. Optional: Countries for Trending now, the period and categories.
  6. Optional: Only new with a Monitor name, then schedule the task (Apify Console → Schedules).

Input example

{
"searchTerms": ["chatgpt, claude, gemini", "sourdough"],
"geo": "US",
"timeRange": "today 12-m",
"interestByRegion": true,
"relatedQueries": true,
"trendingGeos": ["US", "GB"],
"trendingHours": "24",
"maxTrendingPerGeo": 50
}

Output example

Real result (3 October 2026), shortened to the last 2 weeks, 2 regions and 2 related queries per list:

{
"type": "interest",
"search": "sourdough",
"terms": ["sourdough"],
"keyword": "sourdough",
"geo": "US",
"timeRange": "today 12-m",
"success": true,
"interestOverTime": [
{ "date": "2026-09-20T00:00:00.000Z", "time": 1789862400, "formattedTime": "Sep 20 – 26, 2026", "values": { "sourdough": 60 } },
{ "date": "2026-09-27T00:00:00.000Z", "time": 1790467200, "formattedTime": "Sep 27 – Oct 3, 2026", "values": { "sourdough": 59 }, "partial": true }
],
"averages": { "sourdough": 69 },
"peak": { "sourdough": { "date": "2026-01-18T00:00:00.000Z", "value": 100 } },
"latest": { "date": "2026-09-20T00:00:00.000Z", "values": { "sourdough": 60 } },
"interestByRegion": [
{ "geoCode": "US-AK", "geoName": "Alaska", "values": { "sourdough": 100 } },
{ "geoCode": "US-WY", "geoName": "Wyoming", "values": { "sourdough": 90 } }
],
"regionValues": "index (0-100, 100 = the region where the term is most popular)",
"regionResolution": "REGION",
"relatedQueries": {
"sourdough": {
"top": [ { "query": "sourdough bread", "value": 100 }, { "query": "sourdough starter", "value": 74 } ],
"rising": [
{ "query": "costco authentic sourdough bread debate", "increasePercent": null, "breakout": true, "formattedValue": "Breakout" },
{ "query": "costco sourdough bread bowls", "increasePercent": 3950, "breakout": false, "formattedValue": "+3,950%" }
]
}
},
"trendsUrl": "https://trends.google.com/trends/explore?q=sourdough&geo=US&date=today+12-m",
"via": "direct",
"charged": true
}

A Trending Now row (shortened):

{
"type": "trending",
"geo": "US",
"rank": 1,
"title": "penn state vs northwestern",
"searchVolume": 500000,
"searchVolumeText": "500K+",
"increasePercent": 1000,
"startedAt": "2026-10-02T21:00:00.000Z",
"active": true,
"categories": ["Sports"],
"relatedQueries": ["penn state vs northwestern", "ryan field", "northwestern football", "penn state football"],
"news": [],
"exploreUrl": "https://trends.google.com/trends/explore?q=penn+state+vs+northwestern&geo=US&date=now+1-d",
"charged": true
}

What the fields mean

  • values: Google's relative interest, 0-100, where 100 is the highest point of the chart (all terms of a comparison share one scale). Not absolute search counts. partial: true marks the current, unfinished period.
  • averages / peak / latest: per term; latest is the last complete period.
  • interestByRegion: single term: 0-100 index per region; comparison: each term's share (%) of the compared searches in that region (regionValues says which).
  • relatedQueries.rising: increasePercent compared with the previous period, or breakout: true (more than +5,000%).
  • searchVolume (Trending Now): Google's rounded volume ("500K+" = 500,000).
  • newRisingQueries (Only new): rising queries not seen in earlier runs of the monitor.
  • via: the routes that supplied the report: proxy (Apify Proxy dispatcher), direct (the Actor run's own network), or backend-us / backend-sg / backend-eu (our servers for chart data). A free rate-limited row lists the attempted explore routes and their HTTP statuses.
  • SUMMARY (key-value store): reports, trending searches, free rows by errorType, rate-limit retries, run-wide outage cool-down/probe/skipped counts, notProcessed inputs when applicable, and the CSV files written. Explore route counts reflect the actual request dispatcher: proxy when an Apify Proxy dispatcher was used, otherwise direct. They are also sent as anonymous telemetry and can be queried with actor_runs_telemetry.py google-trends-scraper --trends-routes after the matching Worker release.

Use it from code

curl -X POST "https://api.apify.com/v2/acts/tidytools~google-trends-scraper/run-sync-get-dataset-items?token=YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{"searchTerms":["air fryer, slow cooker"],"geo":"US","timeRange":"today 5-y"}'

With AI agents (MCP): connect Apify's MCP server (https://mcp.apify.com?tools=tidytools/google-trends-scraper) to Claude, Cursor or any MCP client and ask, for example, "Is interest in pickleball still growing in the US, and which states search for it most?". Minimal input: {"searchTerms": ["pickleball"], "geo": "US"}. Failed items are not charged and carry an errorType.

Limitations

  • Relative numbers: Google Trends gives 0-100 indexes, not search counts; Trending Now gives rounded volumes. Values from different searches are on different scales; compare terms on one line to put them on one scale.
  • Rate limits: Google may still refuse every available route in busy periods. Explore tries one fresh Apify proxy session even when maxRetries is zero; maxRetries controls extra fresh sessions (each wait caps at 45 seconds). Explore does not use our servers: it needs Google's session cookie, which they cannot send. If your account has no Apify Proxy access, retries come from the run's own network only (the log says so). What still fails is a free row with errorType: rate_limited or incomplete and a retry suggestion.
  • Related topics are often returned empty by Google to callers without a signed-in session; they are then empty lists.
  • Honest access: requests use our TidyTools user agent and follow trends.google.com/robots.txt; no logins, no CAPTCHA solving.
  • News articles come from Google's Trending Now feed and exist only for its top items.

FAQ

Does the Actor collect usage data? The Actor sends one anonymous usage counter per run (input type, item count range, outcome) to improve the tool; no URLs, content or account data.

Are these search counts? No. Google Trends gives a 0-100 index (100 = the peak of the chart); only Trending Now shows rounded search volumes. To compare terms on one scale, put them on one line, separated by commas.

Can I compare more than 5 terms? Yes, up to 25 on one line. Google compares at most 5 at a time, so the line runs in batches of 5 that all include the first term (the anchor): a, b, c, d, e, f, g becomes a, b, c, d, e and a, f, g. Each later batch is scaled by how the anchor reads in it compared with the first batch, and the whole chart is rescaled so its highest point is 100 (values have one decimal). This is an approximation: Google rounds every chart to whole numbers, so terms far less popular than the anchor lose precision. Put a term of middle popularity first; if the anchor has no data next to a batch, that batch cannot be scaled and the report is a free incomplete row. The report has an anchor field with the batches and their factors. Interest by region is then each term's own 0-100 index (not comparable between terms), and each term is one term report as usual.

How do I watch a topic over time? Schedule the Actor (for example weekly), turn on Only new and keep the same Monitor name: each report then lists the rising queries that are new since the last run, and trending searches already seen are skipped for free.

Why did a search come back empty or with an error? Either Google has not enough data for the term in that region (free row, errorType says so), or Google rate-limited the request beyond the retries (free row, rate_limited or incomplete). Run it again later or with a narrower input; free rows are never charged.

What happens with a mistake in the input? A search line with more than 25 terms is a free invalid_input row and the other lines still run. A bad country code, time range (customTimeRange must be YYYY-MM-DD YYYY-MM-DD) or Trending Now country (country codes only, not US-CA) ends the run normally with one free invalid_input row and SUMMARY.status: NO_RESULTS, never as a failed run. An unknown country code that looks valid (for example XX) is refused by Google (HTTP 400) and also gives a free invalid_input row.

Can I get the data as a spreadsheet? Yes. Every run also stores CSV files (interest over time, interest by region, related queries) in the key-value store, linked in the run output.