Google Trends Scraper | 4 Report Types, No Browser, No Key avatar

Google Trends Scraper | 4 Report Types, No Browser, No Key

Pricing

from $2.05 / 1,000 trend reports

Go to Apify Store
Google Trends Scraper | 4 Report Types, No Browser, No Key

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

The Mine Works

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

2

Monthly active users

2 days ago

Last modified

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.

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
}

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.

FieldWhat it is
keywordThe keyword queried
geoThe geography code used
timeframeThe timeframe used
interest_over_timeArray of {date, value, formatted_value}
interest_by_regionArray 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_atISO 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

  1. A session is warmed by fetching trends.google.com/trends/explore to seed the consent cookies Google expects.
  2. /trends/api/explore is called with your keyword, timeframe and geo. It returns widget configs, each carrying a token and a request object.
  3. Those are passed back verbatim to /trends/api/widgetdata/multiline, /comparedgeo and /relatedsearches, fetched in parallel per keyword.
  4. 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.

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 tierPer trend reportPer 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.

  1. On this actor's page, click ... -> Schedule Actor (or Console -> Schedules -> Create new).
  2. Pick a frequency. @daily suits most standing queries.
  3. Your saved input is reused on every run and each run appends to the dataset.
  4. 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);

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.

Last verified: 2026-08