Google Trends Scraper & API
Pricing
from $1.10 / 1,000 term results
Google Trends Scraper & API
Google Trends API alternative for any number of terms: interest over time by country, region, city or metro, related queries and topics, Trending Now, and calibrated comparisons beyond 5 terms. Daily data across years. From $1.50 per 1,000 results; compact JSON for AI agents.
Pricing
from $1.10 / 1,000 term results
Rating
0.0
(0)
Developer
CleanPull
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
7 hours ago
Last modified
Categories
Share
Get Google Trends data for any number of search terms in one run: interest over time, interest by country, region, city or metro area, related queries, side-by-side comparisons, and Trending Now with search volumes. Rank more than 5 terms on one calibrated scale, and get daily points across multi-year ranges. Clean, typed JSON or flat rows, built for AI agents and data teams, from $1.50 per 1,000 results.
What you can do with it
- Track a keyword portfolio: "Get Google Trends interest for these 50 keywords in the US over the past 12 months."
- Rank many terms against each other: "Which of these 30 product names gets the most searches?" Calibrated comparison puts every term on one 0-100 scale with error bounds, beyond Google's 5-term limit.
- Compare across countries: "How does interest in electric cars compare in the US, UK and Germany?" One run, any number of locations.
- Find rising topics: "What related searches are breaking out around web scraping?" Rising queries are flagged with
isBreakout. - Watch what is trending: "What is trending in the UK in sports right now?" Hundreds of trends with search volume, growth and start time, not just the top 10.
- Monitor on a schedule: monitor mode returns only new trends or new rising queries since the last run.
- Feed an AI agent or dashboard: choose only the fields you need, or get one flat row per data point.
Why this actor
- Reliable and fast. Plain HTTP requests with automatic session rotation and proxy escalation; no browser, no hanging runs. A blocked data type is reported in
missingDataTypesinstead of failing the run. - Every data type in one record per term, plus a computed
summary: average, peak and date, latest value, change in percent and direction (rising, falling, stable). - Calibrated comparison of any number of terms with low and high bounds, so you know how precise each value is.
- Daily points for long ranges. Google returns weekly or monthly points beyond about 9 months; turn on
dailyResolutionfor one point per day across years. - Standard Google Trends field names (
interestOverTime_timelineData,interestBySubregion,relatedQueries_risingand so on), so existing pipelines keep working. - Built for AI agents: typed inputs with defaults and examples, a declared output schema,
fieldsselection, and aRUN_SUMMARYwith the outcome of every lookup. Works through Apify's MCP server.
Modes
| Mode | What you get | Billed per |
|---|---|---|
explore (default) | One record per term (and per location): interest over time, by region, related queries, optional topic suggestions; with compare, an extra comparison record per group of up to 5 terms | Term record, comparison record |
calibrated-comparison | One record per term with its rank, relativeInterest (largest term = 100), low and high bounds, and its time series on the shared scale | Calibrated term |
trending | Trending Now for a country: term, search volume, growth percent, start and end time, active flag, categories, related searches | Trending item |
Input
| Field | Type | What it does |
|---|---|---|
mode | explore, calibrated-comparison, trending | What to get (default explore) |
searchTerms | array of strings | Terms to look up, any number |
startUrls | array of Google Trends explore URLs | Terms, locations, period, category and search type read from each URL |
compare | boolean | Compare terms on one scale in groups of up to 5, with a comparison record |
geo | string | US, GB, US-CA, US-CA-807; empty = worldwide |
geos | array of strings | Run every term for each location, e.g. ["US", "GB", "DE"] |
timeRange | past-hour … all-time | Preset period (default past-12-months) |
customTimeRange | string | "2024-01-01 2024-12-31" or hourly "2026-09-01T00 2026-09-03T12" |
category | integer | Google Trends category id (0 = all) |
property | web, images, news, youtube, shopping | Which Google search to measure |
dataTypes | array | interestOverTime, interestByRegion, relatedQueries, relatedTopics, suggestions |
regionResolution | auto, country, region, city, metro | Detail of the region breakdown |
includeLowVolumeRegions | boolean | Include regions Google hides for low volume |
dailyResolution | boolean | Daily points across ranges longer than about 9 months |
trendingGeo, trendingHours, trendingCategories, trendingActiveOnly, trendingMaxItems | Trending Now: country, window (4, 24, 48 or 168 hours), categories, active only, how many | |
monitorMode, monitorName | boolean, string | Only new trends or new rising queries since the last run |
outputFormat | nested, flat | One record per term, or one row per data point |
fields | array of strings | Return only these fields (dotted paths allowed) |
maxItems | integer | Stop after this many billed results |
language, timezone | string, integer | Labels language (en-US) and offset in minutes for hourly data |
Example input
{"searchTerms": ["web scraping", "data extraction"],"compare": true,"geos": ["US", "GB"],"timeRange": "past-12-months","dataTypes": ["interestOverTime", "interestByRegion", "relatedQueries"]}
Output
Term record (explore mode, shortened)
{"type": "term","searchTerm": "web scraping","geo": "US","timeRange": "past-12-months","summary": {"average": 67.8,"peak": 100,"peakDate": "2026-06-07T00:00:00.000Z","latest": 24,"latestDate": "2026-09-27T00:00:00.000Z","changePercent": -44,"direction": "falling"},"interestOverTime_timelineData": [{"date": "2026-09-27T00:00:00.000Z","formattedTime": "Sep 27 – Oct 3, 2026","value": [24],"hasData": [true],"isPartial": false}],"interestOverTime_averages": [68],"interestBySubregion": [{ "geoCode": "US-MD", "geoName": "Maryland", "value": [100] }],"relatedQueries_top": [{ "query": "ai web scraping", "value": 100, "isBreakout": false }],"relatedQueries_rising": [{"query": "best noise cancelling headphones","value": 12150,"formattedValue": "Breakout","isBreakout": true}],"missingDataTypes": [],"trendsUrl": "https://trends.google.com/trends/explore?q=web%20scraping&geo=US&date=today%2012-m"}
Calibrated term
Each calibrated record also carries timeline: the term's series rescaled onto the shared scale.
{"type": "calibrated-term","rank": 4,"searchTerm": "selenium","relativeInterest": 0.2263,"low": 0.1683,"high": 0.2937,"belowRange": false,"bridge": "python","comparedTerms": 12}
Trending item
{"type": "trending","rank": 1,"term": "bahrain grand prix","geo": "GB","searchVolume": 100000,"growthPercent": 300,"startedAt": "2026-10-04T06:40:00.000Z","isActive": true,"categories": [{ "id": 17, "name": "Sports" }],"trendBreakdown": ["bahrain grand prix"]}
Every run also writes RUN_SUMMARY to the key-value store: the outcome (COMPLETE, PARTIAL, NO_NEW_DATA, EMPTY or FAILED), counts, and the reason for any failed lookup.
Pricing
Pay only for results delivered. Blocked or failed lookups are never charged.
| Result | Free and Bronze | Silver | Gold |
|---|---|---|---|
| Term record (all requested data types for one term and location) | $1.50 | $1.30 | $1.10 |
| Comparison record | $1.50 | $1.30 | $1.10 |
| Calibrated term | $10.00 | $9.00 | $8.00 |
| Trending item | $1.00 | $0.90 | $0.80 |
Prices are per 1,000 results; your tier depends on your Apify plan. Each run also has a $0.00005 start fee.
Flat mode is billed per term record, not per row.
How calibrated comparison works
Google compares at most 5 terms at a time, each group on its own 0-100 scale rounded to whole numbers. The actor first sizes every term against one anchor, then chains groups from the most popular term down, each group sharing a "bridge" term with the previous one and holding only terms of similar size, so no value is lost to rounding. Bounds carry Google's rounding through the chain: a niche term 30,000 times smaller than the top one still comes back with a value and a range.
Limits
- Related topics are returned only when Google provides them to logged-out visitors, which is often not the case. When they are missing, the record says so in
missingDataTypes. - Google Trends values are relative (0-100), not absolute search counts. Trending Now volumes are Google's own approximate figures.
- Calibrated values are only as precise as their bounds; terms far apart in popularity have wider bounds.
- Memory: explore runs fit in 512 MB at any size tested (2,000 terms); calibrated comparisons of up to about 500 terms fit in 512 MB (5 years of daily points), larger ones need the default 4,096 MB.
- Nothing found: terms with no interest data, or input naming nothing to look up, are not a failure: the run still succeeds, with one free
recordType: "unreadable"row giving thereason; nothing is charged. A run near its time limit stops starting lookups, delivers what it read and lists the rest in RUN_SUMMARY.
Changelog
- 0.1.x, reliability (2026-10-24): runs that find nothing (terms without data, input naming nothing to look up) end SUCCEEDED with a free
unreadablerow saying why, instead of FAILED; custom time ranges and Trends URLs are checked in the input form; a run stops starting lookups before its time limit, never TIMED-OUT. A run whose every lookup Google blocked still fails. Prices and events unchanged. - 0.1 (October 2026): explore, comparison, multiple locations, calibrated comparison of any number of terms, daily points for long ranges, Trending Now, monitor mode, flat output and field selection.