Google Trends Scraper icon

Marketing

Google Trends Scraper

Download historical Google Trends data for any keyword set: interest over time, geo breakdown, related queries, and topics. Export to CSV or JSON. Up to 100 keywords per run.

Free Apify credit covers a first run. No credit card to try.

What this Actor scrapes

This Google Trends scraper pulls four data widgets for every keyword you submit:

One dataset row per data point. A single keyword with interest-over-time over 12 months emits ~52 rows. All four widgets for one keyword emit ~200 rows.

What we handle for you

  • All four widgets — interest over time, geo breakdown, related queries, and related topics in one run.
  • Batch beyond the 5-keyword limit — submit up to 100 keywords; the Actor batches them silently in groups of ≤5 with a minimum 2-second inter-batch delay.
  • We rotate residential proxies — exit IPs cycle through Apify's residential pool; Google Trends blocks datacenter IPs within 2–3 requests. We handle that so you don't have to.
  • We rotate browser fingerprints — each request impersonates a real Chrome or Firefox TLS + HTTP/2 session via curl-cffi. Standard Python HTTP clients emit detectable signatures; we don't.
  • We retry with exponential backoff — 429s trigger a fresh proxy session and a 2 s → 4 s → 8 s → 16 s → 30 s wait. Up to 5 attempts per request.
  • Partial-success surfacing — if one widget fails after all retries, the Actor logs an error, emits zero rows for that widget, and continues. We never silently return an empty dataset.
  • maxResults cap — set an optional row limit per keyword to keep test runs cheap.
  • Pydantic v2 validation — every input field validated before any network call; invalid timeframe strings are rejected immediately with a clear error message.
  • Timeframe presets — seven preset tokens (past 24 hours through all-time since 2004).
  • Export Google Trends to CSV, JSON, Excel, or XML — Apify's dataset download handles all formats.

Use cases

  • Content calendar planning — track interest-over-time for a topic list to identify seasonal peaks and plan publication timing.
  • SEO keyword opportunity scoring — compare relative interest across a keyword set and prioritize by trend direction rather than static search volume.
  • Bulk download Google Trends data — pull historical interest scores for 100 keywords in a single scheduled run without hitting quota limits.
  • Competitor brand monitoring — pull related queries for a competitor's brand to discover what problems their customers are searching for.
  • Market entry research — use geo breakdowns to see which countries show the highest relative interest in your product category before deciding where to expand.
  • Trend alerting — schedule a recurring Actor run on a fixed keyword list and diff interest scores to catch emerging demand spikes before they saturate.
  • Long-tail keyword discovery — mine related queries and topics for terms that existing keyword tools miss because they fall below their volume threshold.
  • Academic and market research — download historical Google Trends data in bulk for modelling, forecasting, or index construction. The Google Trends Python alternative for researchers whose pytrends workflows broke in 2025.

Input

Paste this into the Apify Console, or send it as the run input over the API. Proxy settings are on by default; you rarely need to touch them.

FieldTypeRequiredWhat it does
keywords array yes One or more search terms to look up on Google Trends. Up to 100 keywords; the Actor batches them in groups of 5 as required by the Trends API.
geo string no BCP-47 country code to restrict results (e.g. US, GB, DE). Leave empty for worldwide data.
timeframe string no Time window for the query. Must be one of the seven preset tokens — custom date ranges are not supported in v1.
category integer no Google Trends category filter. 0 = All categories. See the Google Trends category list for numeric IDs.
widgets array no Which data widgets to retrieve. Defaults to all four. Valid values: interest_over_time, interest_by_region, related_queries, related_topics.
maxResults integer no Maximum number of dataset rows to emit per keyword across all widgets. 0 means unlimited.
{
  "keywords": [
    "python",
    "javascript"
  ],
  "geo": "US",
  "timeframe": "today 12-m",
  "category": 0,
  "widgets": [
    "interest_over_time",
    "interest_by_region",
    "related_queries",
    "related_topics"
  ],
  "maxResults": 0,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}

Output

One row per result, schema-validated before it is written. Export JSON, CSV, Excel or XML from the run, or read it over the API.

keywordwidgetdategeotimeframevalueformattedValuelabelgeoCodegeoNameisPartialscrapedAt

{
  "keyword": "python",
  "widget": "interest_over_time",
  "date": "2025-05-01T00:00:00Z",
  "geo": "US",
  "timeframe": "today 12-m",
  "value": 82,
  "formattedValue": "82",
  "label": null,
  "geoCode": null,
  "geoName": null,
  "isPartial": false,
  "scrapedAt": "2026-06-01T09:14:33Z"
}

Pricing

EventPriceWhen
Actor start$0.20Once per run, covers warm-up and proxy session setup.
Result row emitted$0.0020Per result written to the dataset.

You pay only for results that land. Cap any run with maxTotalChargeUsd. See pricing & billing for worked examples.

Limitations

  • Relative values only — Google Trends values are 0–100 relative scores normalized within your request. Absolute search volumes are not available from the Trends API.
  • No custom date ranges in v1 — only the seven preset timeframe tokens are supported. Custom YYYY-MM-DD YYYY-MM-DD strings will be rejected. This is planned for v2.
  • No real-time / trending-searches surface — this Actor targets the historical interest data widgets, not the live "trending now" feed.
  • No city-level geo drill-down — state/province level is the finest granularity available reliably across timeframes.
  • Cross-batch normalization for >5 keywords — Google Trends normalizes values within each batch of ≤5 keywords. When you submit more than 5 keywords, the Actor processes them in sequential batches, and values across batches are not directly comparable. This is a Google Trends API constraint.
  • Residential proxy required — datacenter IPs are blocked within a few requests. The Actor defaults to RESIDENTIAL proxies; disabling this will lead to rapid blocking.
  • Rate limits at high volume — even with residential proxies and backoff, very large runs (>100 keyword batches in a short window) may encounter sustained 429s. The Actor surfaces partial success and never silently returns empty results.

FAQ

Why are all values relative (0–100) instead of absolute search volume?
Google does not expose absolute search volume in the Trends API. The 0–100 scale is normalized to the peak value within the requested keyword set and timeframe. To compare keywords across separate runs, you must include the same reference keyword in every run.
Can I compare trends across different runs?
Only if all runs use the same keyword set, geo, and timeframe. Even then, Google's normalization can shift slightly between requests. For reproducible comparisons, include a stable "anchor" keyword in every batch.
Why does a related term show "Breakout" instead of a number?
"Breakout" is Google's signal that the query grew more than 5,000% in the selected timeframe — typically a very new or viral topic. The Actor preserves this string exactly as returned; it is not a scraping error.
Is this a Google Trends Python alternative to pytrends?
Yes. pytrends became unreliable in April 2025 when Google changed the session authentication flow. This Actor hits the same internal JSON endpoints the Google Trends web app uses, bypassing the deprecated pytrends approach entirely.
What happens if Google blocks a request?
We rotate the proxy session and exit IP, then retry up to 5 times with exponential backoff (2 s → 30 s). If all 5 attempts fail for a widget, we log an error, emit zero rows for that widget, and continue with the next. The run status message reports exactly how many rows landed vs. were skipped.
Is the Google Trends API officially supported for this use?
The Actor uses the same unauthenticated JSON endpoints the Google Trends web application uses. No official API key or Google account is required. We maintain the same posture as other high-volume Trends tools used for research and marketing.
How many keywords can I submit per run?
Up to 100. The Actor batches them in groups of ≤5 (the Google Trends API limit per explore call), with at least a 2-second pause between batches to stay within rate limits.
Can I export Google Trends data to CSV or Excel?
Yes. Once the run completes, click Export in the Apify dataset view and choose CSV, Excel, JSON, or XML. No additional tooling needed.

Ready to run it?

Open the listing on Apify, paste the input above, and watch rows land. If it ever breaks, it is our problem before it is yours.

Related Actors

Teams that run this also run