Google Trends Scraper: Interest, Regions, Related, Trending Now avatar

Google Trends Scraper: Interest, Regions, Related, Trending Now

Pricing

from $0.01 / 1,000 explore reports

Go to Apify Store
Google Trends Scraper: Interest, Regions, Related, Trending Now

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.

Pricing

from $0.01 / 1,000 explore reports

Rating

0.0

(0)

Developer

Cozybit

Cozybit

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

12 hours ago

Last modified

Share

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.

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

FieldWhat it doesDefault
Reports to collectAny of interest over time, interest by region, related queries, related topics, Trending Nowthe first three
Keywords1-200 search termscoffee
Compare keywordsPut 2-5 keywords on one shared 0-100 scaleoff
Explore locationEmpty for worldwide, a country (US), a region (US-CA) or a US metro area (US-CA-807)worldwide
Explore time rangePast hour up to "since 2004", or custom datespast 12 months
Explore category ID, Search typeNarrow to a Google category or to News, Images, YouTube or Shopping searchall, web
Regional detailGoogle's default level or citiesGoogle's default
Trending Now country, time range, category, maximum rowsWhich 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 ApifyClient
client = 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.

EventPrice
Explore report (one keyword, one report type)2.00 USD per 1,000 (0.002 USD each)
Trending Now row0.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.

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 actorMost-used scraper (browser-based)Second most-used scraper
Inputs where all requested keywords came back4 of 41 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 queriesyesyesnot offered
Successful runs119 of 120 own test runs56% of 26,028 public runs in 30 days99% 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.