Google Trends Scraper - Compare Unlimited Keywords avatar

Google Trends Scraper - Compare Unlimited Keywords

Pricing

from $2.00 / 1,000 keyword reports

Go to Apify Store
Google Trends Scraper - Compare Unlimited Keywords

Google Trends Scraper - Compare Unlimited Keywords

Scrape Google Trends interest over time, interest by region and related queries. Compare more than 5 keywords on one common 0-100 scale. Clean flat output, automatic retries and proxy rotation.

Pricing

from $2.00 / 1,000 keyword reports

Rating

0.0

(0)

Developer

OIa Martin Torheim

OIa Martin Torheim

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

21 days ago

Last modified

Categories

Share

Get Google Trends data for any number of keywords on one comparable 0-100 scale, in a clean flat table you can open straight in Excel, Google Sheets, Make, n8n or Zapier.

For each keyword you can get:

  • 📈 Interest over time: one row per keyword per date
  • 🗺️ Interest by region: countries, regions, cities or US metros (DMA)
  • 🔎 Related queries: top and rising searches, including "Breakout" terms
  • 🧩 Related topics: top and rising topics (brands, products, people, places). Off by default: Google Trends currently returns no related-topics data for most searches (empty results are never charged)
  • 📊 Summary row (free): average, peak, peak date, latest value and trend slope
This ActorGoogle Trends website / typical scrapers
Keywords compared on one scaleUnlimited (up to 100 per run)Max 5
Output formatFlat rows, one type columnNested JSON widgets
Rate limits (HTTP 429)Automatic retries, exponential backoff, new IP per retry, optional residential fallbackRun crashes or returns empty
One keyword failsThat keyword gets an error row, the rest of the run continuesWhole run fails
You pay forOnly keyword reports that returned dataOften every attempt
Python pytrendsNot needed (it was archived in April 2025)-

How "more than 5 keywords" works

Google Trends only compares 5 terms at a time and scales every request separately, so numbers from two different comparisons can't normally be compared. This Actor splits your keywords into batches of 4 and adds one shared anchor keyword to every batch. Because the anchor appears in every batch, its values show exactly how each batch's scale relates to the others. All batches are rescaled to the first batch's scale, then everything is normalised so the single highest point across all your keywords is 100.

  • value is the number on the common scale (use this one).
  • rawValue is the number Google returned in that batch.
  • batch and anchorKeyword show how each row was produced.

Tip: choose an anchor with steady interest and roughly similar popularity to your keywords. If the anchor is far more popular than a keyword, that keyword's values become coarse, and the run log warns you. If you leave the anchor empty, your first keyword is used.

Use cases

  • E-commerce and print-on-demand sellers: compare 20+ product ideas at once and find seasonal peaks.
  • SEO and content teams: rank topic ideas by real search interest and find rising queries.
  • Market research: compare brands, products or competitors across countries.
  • Data and AI pipelines: flat, typed rows that load straight into a spreadsheet, database or LLM.

Input

Only keywords is required. Everything else has sensible defaults.

FieldDefaultDescription
keywords-Up to 100 search terms
timeframetoday 12-mnow 1-H, now 4-H, now 1-d, now 7-d, today 1-m, today 3-m, today 12-m, today 5-y, all, or custom
startDate, endDate-Used when timeframe is custom (YYYY-MM-DD, from 2004-01-01)
geoworldwideCountry code (US, GB, NO) or sub-region (US-CA)
category / customCategoryId0 (all)Google Trends category ID, e.g. 71 Food & Drink, 18 Shopping
propertyweb"" web, youtube, news, images, froogle (Google Shopping)
includeInterestOverTime, includeInterestByRegion, includeRelatedQueries, includeRelatedTopicstrue (related topics: false)Choose which datasets to fetch (and pay for)
includeSummarytrueFree summary row per keyword
anchorKeywordfirst keywordShared keyword used for rescaling across batches
regionResolutionautomaticCOUNTRY, REGION, CITY or DMA
proxyConfigurationApify Proxy (automatic)Use the RESIDENTIAL group if you see many blocks
residentialFallbacktrueSwitch to residential proxy automatically after repeated blocks
maxRetries, requestDelayMillis5, 1000Retry and pacing settings

Example: compare 8 product ideas in the US over 5 years (time series only)

{
"keywords": ["dubai chocolate", "matcha", "labubu", "protein coffee", "mushroom coffee", "cottage cheese", "bubble tea", "kombucha"],
"anchorKeyword": "coffee",
"timeframe": "today 5-y",
"geo": "US",
"includeInterestByRegion": false,
"includeRelatedQueries": false,
"includeRelatedTopics": false
}

Example: rising YouTube searches in Norway for a custom period

{
"keywords": ["strikking", "hytte"],
"timeframe": "custom",
"startDate": "2025-01-01",
"endDate": "2025-12-31",
"geo": "NO",
"property": "youtube",
"includeInterestOverTime": false,
"includeInterestByRegion": false,
"includeRelatedTopics": false
}

Output

The examples below are illustrative. Every row has type, keyword, geo, timeframe, category, property and scrapedAt. Filter or split the dataset by type.

interest_over_time, one row per keyword per date:

{
"type": "interest_over_time",
"keyword": "matcha",
"geo": "US",
"timeframe": "today 12-m",
"category": 0,
"property": "web",
"scrapedAt": "2026-09-30T10:05:30Z",
"date": "2025-10-05",
"timestamp": 1759622400,
"formattedTime": "Oct 5 - 11, 2025",
"value": 41.33,
"rawValue": 62,
"isPartial": false,
"anchorKeyword": "coffee",
"batch": 2,
"scaledAcrossBatches": true
}

date is YYYY-MM-DD for daily, weekly and monthly data, and a full UTC timestamp (2025-10-05T14:00:00Z) for hourly data. isPartial: true marks the current, incomplete period.

summary, one row per keyword (free):

{ "type": "summary", "keyword": "matcha", "average": 38.2, "peakValue": 55.1, "peakDate": "2025-12-21", "latestValue": 41.33, "trendSlope": 0.2818, "dataPoints": 52 }

trendSlope is the linear trend in value points per period (positive = growing).

interest_by_region:

{ "type": "interest_by_region", "keyword": "matcha", "rank": 1, "geoCode": "US-HI", "geoName": "Hawaii", "value": 100, "hasData": true, "resolution": "REGION" }

Region values are Google's per-keyword scale (100 = the region where that keyword is most popular relative to all searches there).

related_query and related_topic:

{ "type": "related_query", "keyword": "matcha", "rankType": "rising", "rank": 1, "query": "matcha latte recipe", "value": 4450, "formattedValue": "+4,450%", "isBreakout": false, "link": "https://trends.google.com/trends/explore?q=matcha+latte+recipe&date=today+12-m" }
{ "type": "related_topic", "keyword": "matcha", "rankType": "top", "rank": 1, "topicTitle": "Green tea", "topicType": "Beverage", "topicMid": "/m/02b_6", "value": 100, "formattedValue": "100", "isBreakout": false }

error: if a keyword or dataset still fails after all retries, you get a row like this instead of a crashed run (these rows are never charged):

{ "type": "error", "keyword": "matcha", "dataset": "interestByRegion", "errorMessage": "Failed after 6 attempts: HTTP 429 Too Many Requests (rate limited by Google)" }

A run summary (reports, errors, retries, proxy used) is saved as OUTPUT in the run's key-value store.

Pricing

This Actor uses pay-per-event pricing:

EventPriceWhen
keyword-report$0.002 ($2 per 1,000)One keyword × one dataset that returned data
Actor startApify defaultOnce per run

Examples:

  • 10 keywords, interest over time only = 10 reports = $0.02
  • 10 keywords, all 4 datasets = 40 reports = $0.08
  • 100 keywords, interest over time only = $0.20

You are not charged for the anchor keyword (unless it is also in your list), for summary rows, for error rows or for datasets where Google had no data. Set Maximum cost per run in the run options and the Actor stops cleanly when it is reached.

FAQ

Why do my values differ from the Google Trends website? Google Trends samples its data, so values can change slightly between requests. With more than 5 keywords the values are also rescaled to a common scale; rawValue holds Google's original number.

I get many 429 / "rate limited" errors. Google Trends limits traffic heavily. Set the proxy to the RESIDENTIAL group, increase requestDelayMillis, or split very large jobs into several runs.

Can I use this without a proxy? Yes (turn Apify Proxy off), but you will be rate-limited much sooner.

Does it support "Trending now" / daily trending searches? Not in this version. It is on the roadmap.

Can I call it from Make, n8n, Zapier or my own code? Yes. Use the Apify integrations or API. Each row is flat, so it maps directly to spreadsheet columns.

Limits

  • Up to 100 keywords per run (split larger jobs into several runs).
  • Region, related queries and related topics are returned per keyword (Google's own per-keyword scale). Only interest over time is rescaled across batches.
  • Google Trends data is sampled and relative, not absolute search volume.
  • Very low-volume keywords may return no data (not charged).
  • Google can change its internal endpoints at any time. We monitor the Actor daily and fix breakages quickly. Please report problems in the Issues tab.

This Actor collects only public, aggregated and anonymised statistics that Google Trends shows to any visitor. It does not collect personal data, log in, or bypass any paywall. You are responsible for using the data in line with applicable law and Google's terms of service. If in doubt, consult a lawyer. Read more in Apify's post Is web scraping legal?.

This Actor is not affiliated with or endorsed by Google.