Google Trends Scraper: interest over time, related queries
Pricing
from $1.95 / 1,000 search term delivereds
Google Trends Scraper: interest over time, related queries
Google Trends per search term with a transparent success rate: interest over time, the average value over the period and the related queries, with geo, timeframe and language control. Strict output schema for AI agents and pipelines; terms without data are never charged.
Pricing
from $1.95 / 1,000 search term delivereds
Rating
0.0
(0)
Developer
Steadydata Team
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Share
Google Trends Scraper (reliable, batch)
Fetch Google Trends data for up to 200 search terms in one run: interest-over-time plus top and rising related queries, with geo, timeframe and language control. Built for SEO pipelines, market research and AI agents — strict output schema, explicit error codes, and you only pay for terms that are actually delivered.
Why this scraper
- Only successful results are charged. A term that Google returns no data for, or that gets temporarily blocked, shows up as a clear error record at no cost.
- Anti-blocking built in. Warm session management with automatic cookie refresh, paced requests and retries on fresh connections — the failure modes that plague Trends scrapers are handled inside the actor, not left to you.
- Honest partial results. When the interest data succeeds but related queries are briefly unavailable, you get the interest data plus a note saying exactly why the related part is missing — never a silently incomplete record.
- Batch and agent-ready. Up to 200 terms per run, stable machine-readable schema.
Who this is for
SEO and content teams sizing up topics before they commit, market researchers tracking interest over time, and AI agents that need a demand signal rather than a guess.
If you check one keyword occasionally, the Google Trends website is free and fine. This actor is for pulling dozens or hundreds of terms on a schedule, in a stable format.
Who this is not for
Read this before you buy. Every term is fetched on its own, so its values are scaled to that term alone (its own peak is 100). That is what you want for tracking one topic over time, and exactly wrong for comparing two terms with each other: for that, use the Google Trends Compare Scraper from the same publisher, which puts up to five terms on one scale. Values are Google's relative index, never search volumes. For what is trending right now per country, use the Trending Now Scraper; for one term's map by country or region, the Interest by Region Scraper.
Input fields
| Field | Type | Required or default | What it does |
|---|---|---|---|
queries | list of text | required | Search terms to fetch trends for. Max 200 per run. |
geo | text | Geo code such as US, NL, DE, or empty for worldwide. Region codes like US-CA also work. | |
timeframe | text | today 12-m | Trends timeframe: 'now 1-d', 'now 7-d', 'today 1-m', 'today 3-m', 'today 12-m', 'today 5-y', or 'all'. |
includeRelatedQueries | true/false | true | Adds top and rising related queries per term. |
language | text | en-US | hl parameter, e.g. en-US or nl-NL. Affects formatted labels only. |
Input example
{"queries": ["chatgpt", "bitcoin"],"geo": "NL","timeframe": "today 3-m","includeRelatedQueries": true,"language": "en-US"}
Timeframes: now 1-d, now 7-d, today 1-m, today 3-m, today 12-m,
today 5-y, all. Geo: country (US, NL, DE), region (US-CA), or empty for
worldwide.
Output example
| Field | Type | What it holds | Example |
|---|---|---|---|
query | text | The input this row was found with, so rows from several inputs can be told apart. | electric bike |
geo | text | The region the interest was measured in; empty means worldwide. | worldwide |
timeframe | text | The period that was measured, in Google's own notation, for example "today 3-m". | today 12-m |
averageValue | number | The average interest over the period, on Google's scale of 0 to 100. | 39.5 |
interestOverTime | list | The graph as data: one entry per point with its date, its value and whether the period is still partial. | [{"date": "2025-09-28", "period": "Sep 28 – Oct 4, 2025",... |
relatedQueries | object | Google's related searches in two lists: top (the biggest) and rising (the fastest growing, with their growth). | {"top": [{"query": "electric dirt bike", "value": 100, "f... |
relatedQueriesNote | text | Filled when Google returned no related searches, with the reason. |
{"query": "bitcoin","status": "ok","geo": "NL","timeframe": "today 3-m","averageValue": 56.2,"interestOverTime": [{"time": "Jun 10, 2026", "timestamp": 1781049600, "value": 90, "isPartial": false}],"relatedQueries": {"top": [{"query": "koers bitcoin", "value": 100, "formattedValue": "100"}],"rising": [{"query": "spacex koers", "value": 950, "formattedValue": "+950%"}]}}
A failed term produces an error record instead (and is not charged):
{"input": "someterm", "status": "error", "errorCode": "NO_DATA", "error": "Empty timeline"}
Error codes: BAD_QUERY, NO_DATA, BLOCKED. INPUT_TRUNCATED appears once when your input is longer than this actor accepts.
Related actors from steadydata
- google-trends-scraper: the input and output of Apify's own Trends actor, with cities
- google-trends-compare: up to five keywords on one scale
- google-trends-regions: where in the world the interest sits
- google-trending-searches: what is trending right now per country
- Used together with google-ads-transparency and google-autocomplete in a recipe: See what an advertiser runs and what people search for.
Pricing
Pay per event: one trend-fetched event per delivered term - a flat price that
includes the full interest-over-time series and related queries. No charge for
failed terms, no separate platform-usage surcharge, and no per-row billing
surprises: one term is one price, whatever the timeframe.
Free Apify plan: this actor delivers up to 25 rows per run for accounts on the Apify free plan, and then stops with a message. That limit is set by us, not by Apify. It exists so the actor keeps paying for itself for the people who do pay. Any paid Apify plan runs it at full size, billed per delivered row, with failed rows never charged.
Reviews: if this actor saves you time, a short review on this page is the one thing that helps most. Ratings are what other buyers look at first, and we have no other way to ask.
FAQ
Are values absolute search volumes? No — Google Trends values are relative (0-100) within your query's timeframe and region, exactly as Google reports them.
Can I compare terms? Not with this actor: each term is scaled to its own peak, so two series from this actor are not on one scale. The Google Trends Compare Scraper from the same publisher does the comparison the way the Trends Compare page does, up to five terms on one scale.
Is personal data collected? No. Trends data is aggregated by Google and contains no personal data.
Why is your price flat per term instead of per row? Because per-row billing punishes you for asking a sensible question. A twelve-month series has far more rows than a one-week series but is not worth more to you, so it costs the same here: one term, one price.
What if Google blocks a request?
The actor retries on a fresh connection before giving up. If a term still fails you get
a clear BLOCKED record and are not charged for it.
Can I call it from my own code, like an API? Yes. Every run is available through the Apify API: start it with one HTTP request, then read the results as JSON, CSV or Excel from the dataset endpoint, or use the official Python and JavaScript clients. The input is the same JSON as in the input example above, so a scheduled script, a Make or Zapier step or an AI agent can call it without any changes.