Google Trends Scraper: Interest, Regions, Related, Trending Now
Pricing
from $0.01 / 1,000 explore reports
Google Trends Scraper: Interest, Regions, Related, Trending Now
Reliable Google Trends scraper without a browser: interest over time, interest by region (country, state, city), top and rising related queries, and Trending Now with search volumes. Residential IPs matched to your country, clean stable JSON. Trial: 0.00003 USD per keyword until 30 Nov 2026.
Google Trends Scraper: interest, regions, related queries and Trending Now
Get Google Trends data as clean, stable records without a browser and without a Google account:
- Interest over time: Google's 0-100 interest curve for each keyword.
- Interest by region: the same interest by country, state/region, city or US metro area.
- Related queries: the top and rising searches people make together with your keyword.
- Trending Now: what is trending in a country right now, with search volume, growth and related searches.
- Related topics (experimental): see Limits before relying on it.
Prices include all platform costs: you pay per useful record and nothing for proxies or compute.
What Google Trends numbers mean
Google Trends values are relative, from 0 to 100, not search counts. 100 is the peak of interest within one request (one keyword, place and time range); 50 means half as much interest as the peak. Two keywords are only on the same scale when you compare them in one request (turn on Compare keywords). Trending Now gives Google's own approximate search volumes ("2,000,000+").
Input
| Field | What it does | Default |
|---|---|---|
| Reports to collect | Any of interest over time, interest by region, related queries, related topics, Trending Now | the first three |
| Keywords | 1-200 search terms | coffee |
| Compare keywords | Put 2-5 keywords on one shared 0-100 scale | off |
| Explore location | Empty for worldwide, a country (US), a region (US-CA) or a US metro area (US-CA-807) | worldwide |
| Explore time range | Past hour up to "since 2004", or custom dates | past 12 months |
| Explore category ID, Search type | Narrow to a Google category or to News, Images, YouTube or Shopping search | all, web |
| Regional detail | Google's default level or cities | Google's default |
| Trending Now country, time range, category, maximum rows | Which trending searches to return (4 hours to 7 days, 19 categories, up to about 500 rows) | US, 24 hours, all, 50 |
Example: interest over time, regions and related queries for two keywords in Germany:
{"keywords": ["iphone 17", "pixel 10"],"geo": "DE","timeframe": "today 3-m"}
Example: the top 100 trending searches in the UK in the past 4 hours:
{"reports": ["trending_now"],"trendingGeo": "GB","trendingHours": "4","trendingMaxItems": 100}
Output (record format v1)
Every record has type, status (ok, no_data or error), error, keyword, keywords, geo, timeframe, category, property, source_url (the matching Google Trends page) and scraped_at. Field names in format v1 do not change; any future change will be announced here first.
Interest over time (one record per keyword):
{"type": "interest_over_time", "status": "ok", "error": null,"keyword": "coffee", "keywords": ["coffee"], "geo": "US", "timeframe": "today 12-m","category": 0, "property": "", "resolution": "WEEK", "average": null,"values": [{ "date": "2025-10-26T00:00:00.000Z", "value": 57, "is_partial": false }],"source_url": "https://trends.google.com/trends/explore?q=coffee&geo=US&date=today+12-m&cat=0&hl=en-US","scraped_at": "2026-10-30T00:45:38.048Z"}
average is filled only when Google provides it (keyword comparisons). Dates are UTC; the last point is often is_partial because the period is still running.
Interest by region: resolution (COUNTRY, REGION, CITY or DMA) and values: [{ "geo_code": "US-WY", "geo_name": "Wyoming", "value": 100 }]. City rows have geo_code: null because Google gives no code for them.
Related queries: top and rising, each a list of { "query", "value", "formatted", "link" }. For rising queries formatted is the growth Google shows, such as +250% or Breakout. Related topics use topic: { "mid", "title", "type" } instead of query.
Trending Now (one record per trending search):
{"type": "trending_now", "status": "ok", "error": null, "keyword": null, "keywords": [],"geo": "US", "timeframe": "past 24 hours", "category": null, "property": "","rank": 1, "title": "patrick stewart", "search_volume": 2000000, "increase_pct": 1000,"started_at": "2026-10-29T19:30:00.000Z", "ended_at": null, "active": true,"categories": [{ "id": 4, "name": "Entertainment" }],"related_queries": ["sir patrick stewart", "captain picard"], "hours": 24,"source_url": "https://trends.google.com/trending?geo=US&hours=24&hl=en-US","scraped_at": "2026-10-30T00:45:41.658Z"}
status: "no_data" means Google had nothing for this request, for example a keyword with too little search volume or a report Google does not offer for it. status: "error" means the request failed after all retries; error says why. You never pay for no_data or error records. A run summary (RUN_SUMMARY) is saved in the run's key-value store.
Use it from code
Get your API token from Apify Console > Settings > Integrations.
Python (pip install apify-client):
from apify_client import ApifyClientclient = ApifyClient("<YOUR_API_TOKEN>")run = client.actor("cozybit/google-trends-scraper").call(run_input={"keywords": ["iphone", "samsung galaxy"], "geo": "US"})for record in client.dataset(run["defaultDatasetId"]).iterate_items():print(record["type"], record["keyword"], record["status"])
JavaScript (npm install apify-client):
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: '<YOUR_API_TOKEN>' });const run = await client.actor('cozybit/google-trends-scraper').call({ keywords: ['iphone', 'samsung galaxy'], geo: 'US' });const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items);
HTTP API (runs the actor and returns the records in one call):
curl -X POST "https://api.apify.com/v2/acts/cozybit~google-trends-scraper/run-sync-get-dataset-items?token=<YOUR_API_TOKEN>" \-H "Content-Type: application/json" \-d '{"keywords": ["iphone", "samsung galaxy"], "geo": "US"}'
Pricing
Trial price until 30 November 2026: 0.01 USD per 1,000 reports or Trending Now rows (the lowest price Apify allows). From 1 December 2026 this scraper costs 2.00 USD per 1,000 reports and 0.50 USD per 1,000 Trending Now rows. Apify notifies all users before a price change.
You pay per record with data; platform usage (compute and proxies) is included.
| Event | Price |
|---|---|
| Explore report (one keyword, one report type) | 2.00 USD per 1,000 (0.002 USD each) |
| Trending Now row | 0.50 USD per 1,000 (0.0005 USD each) |
Worked examples:
- One keyword with the three default reports: 3 x 0.002 = 0.006 USD.
- 100 keywords with the three default reports: 300 reports = 0.60 USD.
- Top 50 trending searches in one country: 50 x 0.0005 = 0.025 USD.
To cap spending, set a maximum cost per run in the run options; the actor stops cleanly when it is reached.
Free Apify plan
On the free Apify plan a run returns at most 15 Explore reports and 50 Trending Now rows. When the limit is reached the run stops and finishes successfully with the status message "Free Apify plan limit reached"; everything collected so far is in the dataset. Any paid Apify plan removes the limit.
Reliability
In 120 test runs on the Apify platform with default settings (10 countries plus worldwide, time ranges from one day to five years, 1-5 keywords, Trending Now in every third run), 99.9% of reports and trending rows were delivered (3,077 of 3,080) and no run was blocked by Google. The median run took 20 seconds; 95% finished within 49 seconds.
How it stays reliable: requests use residential IPs in the country you ask about, because Google refuses data when IP and location do not match. Each IP gets a few slow, paced requests, and if Google limits an IP the actor switches to a new one, up to four times per keyword. A daily test run notices changes on Google's side quickly.
Compared with other Google Trends scrapers on Apify
We ran this actor and the two most-used Google Trends scrapers on Apify with their default settings on the same 4 inputs (1-2 keywords; US, UK and worldwide; 3 months to 5 years):
| This actor | Most-used scraper (browser-based) | Second most-used scraper | |
|---|---|---|---|
| Inputs where all requested keywords came back | 4 of 4 | 1 of 4 (two runs hit our 0.05-0.15 USD cost limit after 7-9 minutes with nothing) | 4 of 4 (one run per keyword) |
| Related queries | yes | yes | not offered |
| Successful runs | 119 of 120 own test runs | 56% of 26,028 public runs in 30 days | 99% of 48,832 public runs in 30 days |
Where several scrapers returned data, the values were identical: they all read the same Google Trends data.
Limits
- Related topics is experimental: Google currently returns it empty to automated requests, browser-based scrapers included, so expect
no_data(not charged). It starts working again if Google serves the data. - Use the default residential proxy. Datacenter proxies work for some countries only (in our tests the US, but not Germany or Japan).
- Up to 200 keywords per run, up to 5 per comparison.
- Trending Now returns what Google lists, usually up to about 500 searches per country and time range.
- Google Trends has no generally available official API; when Google changes its site the actor may fail until it is updated.
- Google is testing a new Explore page that asks visitors to sign in. The data this actor uses is still available without signing in. If Google starts requiring a sign-in for it, runs stop with a clear status message, and failed reports are not charged.
Support
Report problems and feature requests on the actor's Issues tab, ideally with the run link.