Google Trends Scraper | 4 Report Types, No Browser, No Key
Pricing
from $2.05 / 1,000 trend reports
Google Trends Scraper | 4 Report Types, No Browser, No Key
Scrape Google Trends: interest over time, related & rising queries, related topics, geo breakdowns. Degraded since 2026-07-30 by Google-side rate-limiting, see README ā zero charge on failure either way. Multi keyword compare, all timeframes.
Pricing
from $2.05 / 1,000 trend reports
Rating
0.0
(0)
Developer
The Mine Works
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
2
Monthly active users
2 days ago
Last modified
Categories
Share
Google Trends Scraper: 4 Report Types, No Browser, No Key
Pay only for results delivered. Browse all Actors.
š° From $2.05 / 1,000 results.
Interest over time, interest by region, related queries and related topics for any keyword. Pure HTTP, no browser, no API key, no pytrends.
Why use this Google Trends scraper
Google has no official Trends API. The Python community's answer, pytrends, breaks whenever Google rotates its widget tokens, and most scraper alternatives solve that by launching a browser, which is slow and expensive.
Neither is necessary. Google Trends' own /trends/api/explore endpoint returns widget configurations containing a token and a request object. Hand those straight back to the widgetdata endpoints and the data comes out over plain HTTP. There is nothing encrypted about the req parameter; it is the widget's own request object, JSON-encoded. No browser is launched at any point.
You get four report types per keyword, each independently toggleable:
- Interest over time, a dated series of relative search interest
- Interest by region, interest broken out by geography
- Related queries, split into top and rising
- Related topics, split into top and rising
Nine timeframes are supported, from the last hour through the full history: now 1-H, now 4-H, now 1-d, now 7-d, today 1-m, today 3-m, today 12-m, today 5-y and all.
A keyword that returns no data is logged as an error record and is never charged.
Track search interest for a keyword over time
The lightest run: one report type, one keyword. geo takes an ISO country code, or a Google sub-region code like US-CA. Leave geo as an empty string for worldwide.
{"keywords": ["electric vehicles"],"timeframe": "today 12-m","geo": "US","includeInterestOverTime": true}
Find rising related queries for SEO research
Related queries come back as top and rising lists. Rising is where the new demand is, and it is the single most useful block for content planning.
{"keywords": ["ai agents","mcp server"],"timeframe": "today 3-m","geo": "US","includeRelatedQueries": true,"includeRelatedTopics": true}
Compare a keyword's demand across regions
includeInterestByRegion returns a per-region score list, which is what you want for launch prioritisation and ad-geo planning.
{"keywords": ["padel"],"timeframe": "today 12-m","geo": "","includeInterestOverTime": true,"includeInterestByRegion": true}
Pull everything for a full keyword report
All four blocks in one record per keyword. This is one charged report per keyword regardless of how many blocks you enable.
{"keywords": ["lab grown diamonds"],"timeframe": "today 5-y","geo": "IN","includeInterestOverTime": true,"includeInterestByRegion": true,"includeRelatedQueries": true,"includeRelatedTopics": true}
What data you get back
One record per keyword, 8 fields. Blocks you did not enable are omitted from the record entirely rather than sent as null.
| Field | What it is |
|---|---|
keyword | The keyword queried |
geo | The geography code used |
timeframe | The timeframe used |
interest_over_time | Array of {date, value, formatted_value} |
interest_by_region | Array of {region_code, region_name, value} |
related_queries | {top: [...], rising: [...]}, each entry with query, value, formatted_value and link |
related_topics | {top: [...], rising: [...]}, each entry also carrying topic_type |
scraped_at | ISO timestamp of capture |
Keywords that fail or return nothing produce an _type: "error" record with a code of SCRAPE_FAILED or NO_DATA. A final _type: "summary" lists succeeded and failed keywords and the charged count.
How it works
- A session is warmed by fetching
trends.google.com/trends/exploreto seed the consent cookies Google expects. /trends/api/exploreis called with your keyword, timeframe and geo. It returns widget configs, each carrying atokenand arequestobject.- Those are passed back verbatim to
/trends/api/widgetdata/multiline,/comparedgeoand/relatedsearches, fetched in parallel per keyword. - Google's XSSI prefix is stripped and the JSON parsed into the flat structures above.
Keywords are spaced 4 to 8 seconds apart with jitter, which is what keeps a multi-keyword run off Google's rate limiter. Five consecutive failures abort the run rather than grinding on. A watchdog forces a clean exit before the platform timeout so a run ends SUCCEEDED with whatever it collected instead of TIMED-OUT.
A proxy is optional and off by default. Enable one and the actor rotates the IP on every request.
Who uses Google Trends data
SEO and content planning. Rising related queries are demand that has not been written about yet.
Market research and trend validation. A five-year interest curve tells you whether a category is growing, seasonal or already past its peak.
Launch geography. Interest by region turns "where should we launch first" into a ranked list.
Ad campaign timing. Hourly and daily timeframes catch spikes while they are still happening.
What it costs
One pay-per-event charge, trend-report, billed per trend report that actually lands in your dataset. Your rate depends on your own Apify discount tier:
| Your Apify tier | Per trend report | Per 1,000 |
|---|---|---|
| FREE | $0.004 | $4.00 |
| BRONZE | $0.0034 | $3.40 |
| SILVER | $0.0029 | $2.90 |
| GOLD / PLATINUM / DIAMOND | $0.0025 | $2.50 |
Nothing else is billed. Failed requests, blocked pages, empty searches and error records are never charged, so a run that returns no trend reports costs nothing. There is no subscription and no monthly minimum.
Run it on a schedule
Scheduled runs are the pattern most people end up on: smaller, more frequent runs finish faster, keep the data fresh, and cost exactly the same per record as one big run.
- On this actor's page, click ... -> Schedule Actor (or Console -> Schedules -> Create new).
- Pick a frequency.
@dailysuits most standing queries. - Your saved input is reused on every run and each run appends to the dataset.
- Wire the dataset to Google Sheets, Slack, or a webhook from the Integrations tab so new rows reach you without you looking.
FAQ
Is this pytrends? No. It is the same underlying endpoints, but implemented so that widget-token rotation does not break it, and packaged so you do not maintain a Python dependency that breaks every few months.
Does it launch a browser?
No. It is pure HTTP. Playwright turned out to be unnecessary once we found that the req parameter is just the widget's own request object.
Do I need an API key? No, and there is no official Google Trends API to get one from.
What do the interest values mean? Exactly what they mean in the Google Trends UI: relative search interest scaled 0 to 100 within the query and timeframe, not absolute search volume. Google has never published absolute numbers.
Why did some keywords fail? Google rate-limits aggressively. The actor spaces keywords 4 to 8 seconds apart, retries, and if a keyword still returns nothing it is recorded as an error and not charged. Run fewer keywords per run, or enable a proxy for IP rotation.
What geo codes work?
ISO country codes like US, GB, IN, and Google's sub-region codes like US-CA. An empty string means worldwide.
Does enabling all four report types cost more? No. One keyword is one charged report, however many blocks you turn on.
How many keywords should I run at once? Small batches on a schedule beat one large run. The inter-keyword delay means a 50-keyword run spends several minutes just waiting politely.
Use it from Claude, ChatGPT and any MCP agent
Hosted MCP endpoint, no install, OAuth on first connect:
https://mcp.apify.com/?tools=themineworks/google-trends-pro
Claude Desktop / Cursor config with token auth:
{"mcpServers": {"google-trends": {"url": "https://mcp.apify.com/?tools=themineworks/google-trends-pro","headers": { "Authorization": "Bearer YOUR_APIFY_TOKEN" }}}}
Or call it from code with the Apify client:
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: 'YOUR_APIFY_TOKEN' });const run = await client.actor('themineworks/google-trends-pro').call({"keywords": ["electric vehicles"],"timeframe": "today 12-m","geo": "US","includeInterestOverTime": true,"includeRelatedQueries": true});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items);
Related actors
- Google News Scraper: the coverage behind a trend spike.
- Twitter / X Scraper: social conversation on the same keyword.
- Reddit Scraper: community discussion for qualitative context.
- Amazon Product Scraper: whether the interest is converting into products and reviews.
Disclaimer: This actor is an independent tool and is not affiliated with, endorsed by, or sponsored by Google LLC. Google and Google Trends are trademarks of Google LLC. Trends values are relative indices published by Google, not absolute search volumes.
Found a bug or want a field added? Open an issue from the actor's Apify Console page or reach out through the The Mine Works profile.
Related guides
- Google Trends API Python 2025: Why pytrends Keeps Breaking (and What to Use Instead)
- How to Export Google Trends Data at Scale for Market Research
- Automate SEO Research and Content Strategy with Claude and Google Trends Pro
- Using Google Trends Data for Market Research: A Developer's Playbook
- Google Trends API for Python in 2025: pytrends vs Scraper
Last verified: 2026-08