Google Trends Scraper - Reliable API avatar

Google Trends Scraper - Reliable API

Pricing

Pay per event

Go to Apify Store
Google Trends Scraper - Reliable API

Google Trends Scraper - Reliable API

Reliable Google Trends API: interest over time, interest by region and related queries (top & rising) for many keywords. Retries and proxy fallback beat 429s.

Pricing

Pay per event

Rating

0.0

(0)

Developer

Christian Machon

Christian Machon

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

21 hours ago

Last modified

Share

Get Google Trends data without the failed runs. This Google Trends scraper and API returns interest over time, interest by region (country, state/subregion, US metro/DMA) and related queries (top & rising, including Breakout) for one or many keywords - for any country, time range, category and Google property (Web, Images, News, YouTube, Shopping).

It was built for one thing: reliability. Google Trends answers automated traffic with 429 Too Many Requests very aggressively. This scraper handles it for you with cookie sessions, exponential backoff, IP rotation and automatic proxy fallback - and it never silently returns an empty dataset: every run ends with a per-keyword status report.

Tested before release: 24/24 test runs passed (23 data runs succeeded across geos, time ranges, properties and comparison mode, plus 1 invalid-input run correctly rejected with a clear error), ~12 s average run time.

  • SEO & keyword research - find rising search queries, breakout keywords and seasonal peaks before you write.
  • Market & product research - compare brands, products or categories over 5 years or since 2004.
  • E-commerce & dropshipping - spot trending products on Google Shopping and YouTube.
  • Finance & crypto signals - feed daily/hourly search interest into models and dashboards.
  • Local marketing - see which countries, states or US metros (DMA) search a term most.
  • AI agents & automations - call it from Make, Zapier, n8n, LangChain or Apify's MCP server and get clean JSON back.
This Actor
Reliability24/24 test runs passed, ~12 s average; every keyword gets an explicit status
429 / rate-limit handlingCookie (NID) bootstrap, per-session browser fingerprints, exponential backoff with jitter, new IP on every block
Proxy fallbackYour proxy -> Apify datacenter -> Apify residential -> direct, switched automatically when one gets blocked
Empty resultsNever silent: every keyword gets a status (SUCCEEDED, PARTIAL, NO_DATA, FAILED) with the reason
Clean schemaOne flat, consistent schema (same columns on every row) - spreadsheet, BI and LLM friendly. Nested per-keyword format optional
Honest about gapsWhen Google withholds a section (e.g. city-level regions), the run summary says so instead of returning silent blanks
InputKeywords or Google Trends URLs, presets or custom dates, IANA timezones, input validated with clear error messages
Speed & costPure HTTP (no browser), 256 MB memory, a single keyword typically finishes in ~10-15 s

How to use it

  1. Click Try for free.
  2. Enter your search terms (or paste a Google Trends explore URL).
  3. Optionally choose a location, time range, category and property.
  4. Click Start and download results as JSON, CSV, Excel or via API.

Input example

{
"searchTerms": ["chatgpt", "gemini", "claude"],
"geo": "US",
"timeRange": "today 12-m",
"property": "",
"category": 0,
"includeInterestOverTime": true,
"includeInterestByRegion": true,
"regionResolution": "AUTO",
"includeRelatedQueries": true,
"compareTerms": false,
"outputFormat": "flat"
}

Custom date range:

{ "searchTerms": ["world cup"], "timeRange": "custom", "startDate": "2022-10-01", "endDate": "2022-12-31", "geo": "GB" }
FieldDescription
searchTermsKeywords or Google Trends URLs (up to 500).
compareTermstrue = query in groups of up to 5 so values are relative to each other (Google "compare" view).
geoEmpty = Worldwide, US, GB, US-CA, US-NY-501 (metro)...
timeRangenow 1-H, now 4-H, now 1-d, now 7-d, today 1-m, today 3-m, today 12-m, today 5-y, all, custom. Aliases like 7d, 90d, 5y also work via API.
startDate / endDateYYYY-MM-DD (or YYYY-MM-DDTHH for hourly ranges up to 7 days) when timeRange = custom.
categoryGoogle Trends category ID (0 = all).
property"" Web, images, news, youtube, froogle (Shopping).
timezoneUTC, America/New_York, UTC+2 or minutes offset.
regionResolutionAUTO, COUNTRY, REGION, DMA, CITY. City-level data is often withheld by Google; the Actor then falls back to subregions and says so.
includeRelatedTopicsExperimental, off by default: Google currently withholds related topics from automated sessions, so this section is normally empty.
outputFormatflat (default) or perTerm.
proxyConfiguration, proxyFallback, maxRetries, maxConcurrencyReliability controls (defaults are good).

Output example

Every row has the same columns; recordType tells you what it is (interestOverTime, interestByRegion, relatedQuery). Columns that don't apply are null.

[
{ "recordType": "interestOverTime", "searchTerm": "bitcoin", "geo": "US", "timeRange": "Past 12 months", "date": "2025-10-26T00:00:00.000Z", "dateFormatted": "Oct 26 - Nov 1, 2025", "value": 31, "isPartial": false },
{ "recordType": "interestByRegion", "searchTerm": "bitcoin", "geo": "US", "regionCode": "US-WY", "regionName": "Wyoming", "regionResolution": "REGION", "value": 82 },
{ "recordType": "relatedQuery", "searchTerm": "bitcoin", "geo": "US", "rankType": "top", "rank": 1, "query": "bitcoin price", "value": 100, "formattedValue": "100", "link": "https://trends.google.com/trends/explore?q=bitcoin+price&date=today+12-m&geo=US" },
{ "recordType": "relatedQuery", "searchTerm": "chatgpt", "geo": "Worldwide", "rankType": "rising", "rank": 1, "query": "how to use chatgpt effectively", "value": 2650, "formattedValue": "+2,650%", "isBreakout": false }
]

The Output tab has ready-made table views: Interest over time, Interest by region and Related queries. With outputFormat: "perTerm" you get one item per keyword with nested arrays instead.

Run summary

Each run stores a summary in the key-value store record OUTPUT: per-keyword status and row counts, errors, data-availability notes (for example when Google withheld city-level data), number of requests/retries/429s and which connection succeeded. Use it in pipelines to detect partial results.

Pricing

Simple pay per event pricing - you pay only for what you get:

EventPriceWhen
Run start (apify-actor-start)$0.02 per runOnce when the run starts
Keyword report (keyword-report)$0.002 per keywordEach search term that returns data (all requested sections: interest over time, by region, related queries)

Examples: 1 keyword = $0.022, 10 keywords = $0.04, 100 keywords = $0.22. You are not charged for keywords that fail or have no data. A keyword report is one keyword, not one row - a single keyword can produce 100+ flat rows at no extra charge. Set a maximum cost per run in the run options and the Actor stops cleanly when it is reached. Standard Apify platform usage applies per your plan.

Use it from AI agents (MCP)

This Actor is ready for AI agents via the Apify MCP server (Claude, Cursor, ChatGPT and any MCP client). An agent only needs searchTerms; everything else has sensible defaults. Example tool call: {"searchTerms": ["electric bikes"], "geo": "DE", "timeRange": "today 5-y", "includeInterestByRegion": false}. Results are flat, typed JSON rows with a documented schema, and the run summary explains any missing data so the agent can react instead of guessing.

FAQ

Is scraping Google Trends legal? Google Trends data is public and aggregated (no personal data). Make sure your use complies with Google's terms and the laws that apply to you.

What do the values mean? 0-100 relative interest: 100 is the peak for the chosen term, place and time. With compareTerms the scale is shared across up to 5 terms. Values are not absolute search volumes.

Why are values different from yesterday / from the website? Google samples its data; small fluctuations between requests are normal, especially for low-volume terms and the tails of related-query lists.

Do you return related topics? No. Google currently withholds the related topics list from all automated (not logged-in) sessions, so it is always empty for every scraper. The includeRelatedTopics option is kept as an experimental switch (off by default) in case Google changes this. Related queries (top & rising) are fully supported.

Can I get city-level data? You can request regionResolution: "CITY", but Google often withholds city-level breakdowns for automated sessions. When that happens the Actor automatically returns subregion (state/province) data instead and notes it in the run summary. Country and subregion (state/province) breakdowns work reliably.

How many keywords can I run? Up to 500 per run. Large batches are processed with gentle concurrency to avoid rate limits.

Do I need a proxy? The default Apify Proxy works for most runs. If Google blocks the datacenter IPs, the Actor falls back to residential proxy (if your Apify plan includes it) and then to a direct connection automatically.

What if a run still fails? The Actor retries each request up to 8 times with new IPs. If a keyword still fails, the summary says why and you are not charged for it. Please open an issue - we respond quickly.

Limits

  • Max 5 terms per comparison group (Google limit); values aren't comparable across groups.
  • Hourly custom ranges max 7 days; data starts 2004-01-01.
  • Related topics are not available (withheld by Google for automated sessions).
  • City-level regions are often withheld by Google; the Actor then returns subregion-level data and says so in the summary.
  • The overview table shows all row types; filter by the recordType column (or use outputFormat: "perTerm").
  • Very low-volume keywords return NO_DATA (Google shows "not enough data").
  • Values are relative indices (0-100), not absolute search volumes.