Google Trends Scraper — Interest Over Time, Related Queries
Pricing
from $7.50 / 1,000 trend reports
Google Trends Scraper — Interest Over Time, Related Queries
Google Trends as stable JSON: interest over time, related queries, related topics, region breakdown, compare and trending now — one row per keyword and surface, API and MCP ready. 99% of runs succeed. No start fee, no minimum, never charged for a failed or empty fetch.
Pricing
from $7.50 / 1,000 trend reports
Rating
0.0
(0)
Developer
Steadyfetch Team
Maintained by CommunityActor stats
1
Bookmarked
56
Total users
18
Monthly active users
0.52 hours
Issues response
3 hours ago
Last modified
Share
Google Trends Scraper
What you get: Google Trends as clean, schema-stable JSON — the full 0–100 interest over time timeline, related queries (top + rising, with the growth number), a complete related topics set (opt-in — real topic entities with their knowledge-graph ids), interest by region, multi-keyword compare on one shared scale (2–5 terms, exactly like the Trends UI), and trending now by country. One row per keyword × surface, callable from the UI, the REST API, MCP clients, n8n, Make and Zapier.
What it costs today: from $7.50 per 1,000 trend reports on paid Apify plans, $9.00 per 1,000 on the free plan — platform usage included, nothing charged for starting a run, no minimum, no subscription. A full 12-month timeline is one report. A complete related-queries set is one report.
What you are never charged for: a failed, blocked or empty fetch. Those go to the run's ERRORS record with the exact reason, and you pay for delivered rows only. 99% of runs succeed — the run-stats box on this page is public, so check the live number yourself.
| You give it | You get back |
|---|---|
| a keyword (1–300 per run) | interestOverTime — the full 0–100 timeline, one row per keyword |
| …2–5 keywords with compare on | all of them scored on one shared scale, exactly like the Trends UI |
| …a country, time range, category or property | relatedQueries (top + rising, with % growth) and interestByRegion |
…relatedTopics in surfaces (opt-in) | the top + rising topic entities with their knowledge-graph ids — real rows, not the empty lists other tools ship. Google meters this one feed, so it can come back empty on a busy moment: never charged when it does, and a re-run a minute or two later normally delivers |
| …or just a country code | trendingNow — what is trending right now, traffic estimate + the news behind it |
Unofficial. This actor is not affiliated with, endorsed by, or sponsored by Google. "Google" and "Google Trends" are trademarks of Google LLC, used here only to describe what this tool reads.
Output
One dataset item = one keyword × one surface. This is the dataset table of a real run — bitcoin and ethereum, three surfaces, US, past 12 months — exactly as it appears in the Apify console:

Keyword rows all carry the same eleven-field envelope — schemaVersion, surface, keyword, geo, timeRange, category, property, comparedWith, sharedScale, fetchedAt, data — so a pipeline built on one surface reads the next without a rewrite. Trending-now rows carry a five-field envelope — schemaVersion, surface, geo, fetchedAt, data — because a trending feed has no keyword, time range or comparison. Within each shape every field is always present: explicit null over silent omission, and a field that has nothing to say says so in words (a run with no location set reads "geo": "worldwide", never a blank).
Real rows from the live example run linked below:
| surface | keyword | geo | timeRange | what is inside data |
|---|---|---|---|---|
interestOverTime | bitcoin | worldwide | today 12-m | 54 weekly points — Aug 24 – 30, 2025 = 50 … Aug 30 – Sep 5, 2026 = 25 (isPartial: true) |
relatedQueries | bitcoin | worldwide | today 12-m | 25 top + 25 rising — top bitcoin price (100); rising bitcoin casino vodds (Breakout, +25,200%) |
interestByRegion | bitcoin | worldwide | today 12-m | 250 regions — CH Switzerland 100, AT Austria 84 … AI Anguilla 0 |
trendingNow | (no keyword field) | US | (no timeRange field) | kaleb johnson, traffic 10000+, with the news stories behind it — 10 trends in that run |
Full keyword row, as JSON:
{"schemaVersion": 1,"surface": "interestOverTime","keyword": "bitcoin","geo": "US","timeRange": "today 12-m","category": 0,"property": "","comparedWith": ["ethereum"],"sharedScale": true,"fetchedAt": "2026-06-10T16:55:01.000Z","data": {"points": [{ "date": "2025-06-08T00:00:00.000Z", "timestamp": 1749340800, "formattedTime": "Jun 8 – 14, 2025", "value": 29, "isPartial": false }]}}
Browse the full live example dataset → — one real run, every surface, unedited (13 rows: the three bitcoin surfaces worldwide plus the US trending-now feed). Or the 4-keyword compare run → — chatgpt vs claude vs gemini vs copilot on one shared scale (gemini peaks at 100, chatgpt 91, claude 19, copilot 5).
Failed and empty fetches never reach your dataset and are never charged — they land in the run's ERRORS record with the exact reason, and the run still finishes SUCCEEDED with an honest status message telling you what was delivered and what was not.
For AI agents & LLMs — copy this block
Actor: steadyfetch/google-trends-scraper (Apify Store)Does: Google Trends -> interest over time, multi-keyword compare (2-5 keywordson one shared scale), related queries (top + rising), interest by region,and trending now. One schema-stable JSON row per keyword x surface.Run: POST https://api.apify.com/v2/acts/steadyfetch~google-trends-scraper/run-sync-get-dataset-items?token=APIFY_TOKENInput (searchTerms is the only field you need):{"searchTerms": ["bitcoin", "ethereum"], // 1-300 keywords per run"surfaces": ["interestOverTime", "relatedQueries", "interestByRegion"],// + "relatedTopics" (opt-in): top + rising topic// entities with knowledge-graph ids"compare": false, // true = 2-5 terms on one shared scale// (per-keyword surfaces are left out)"geo": "US", // "" = worldwide; also "GB", "US-CA", ..."timeRange": "today 12-m", // "now 1-d", "today 3-m", "today 5-y", "all""category": 0, // Google Trends category id"property": "", // "" web, or images / news / youtube / froogle"includeTrendingNow": false,"trendingNowGeo": "US"}Output one row per keyword x surface: schemaVersion, surface, keyword, geo,timeRange, category, property, comparedWith, sharedScale, fetchedAt,data (points[] | top[]+rising[] queries or topic entities | regions[]).Trending rows: schemaVersion, surface, geo, fetchedAt, data (one trend).Pricing pay per event, platform usage INCLUDED, nothing charged for starting a run:Trend report from $0.009 per delivered result on the Apify free plan; falls withyour plan tier. At most one result per keyword x surface — never more.Failed, blocked and empty fetches are never charged — they go to ERRORS, not your dataset.Cap any run with maxTotalChargeUsd (minimum $0.05).MCP: pin it directly: https://mcp.apify.com?tools=steadyfetch/google-trends-scraper(or ask Apify's MCP server for "google trends").
Why this Google Trends scraper?
- Never charged for a miss. Google Trends has a degraded mode where it answers HTTP 200 with an empty payload. This actor detects it and retries; if a fetch ultimately fails it is reported in
ERRORS— no result fee. You are billed for delivered rows only. - A keyword with too little search volume is answered, not retried. Google charts nothing for a long-tail term below its volume floor, and it says so with a complete, empty answer. That is a result about your keyword, not a fault: it is reported as a keyword with no data, it is never charged, and the run carries on through the rest of your list. Try a broader time range or drop the region filter and the same term often charts.
- 99% of runs succeed — the run-stats box on this page is public, so check the live number yourself; it has held above 99% across thousands of runs. Every request has a hard timeout and a bounded retry budget: a run either returns data or stops with an explicit reason. No infinite loops, no zombie runs.
- Schema-stable JSON. Every item carries
schemaVersionand, within its shape, every field is always present — explicitnullover silent omission. - Related topics, actually delivered. Google withholds the topics feed from most automated sessions, which is why tools that sell this surface typically ship empty topics lists — and why this actor refused to offer it until it could deliver it for real. Now it does: opt in with
relatedTopicsand get the real top + rising topic entities, each with its knowledge-graph id, title, type, score, and explore link. The one caveat, stated plainly: Google meters this feed and serves it to a limited number of lookups at a time, so on a busy moment a topics lookup can come back empty. When that happens the result is never shipped as an empty row and never charged —ERRORSsays so, and a re-run a minute or two later normally delivers. It is the only surface here with that caveat, and we would rather you read it before you buy than after. - Clean exits, honest partials. Hit your max-cost ceiling or the timeout and the run stops cleanly, telling you exactly how many results are left and how to get the rest.
How it compares
Read from the public Apify Store API and each vendor's own pricing page on September 1, 2026. Prices and success rates move — check the live listings before you decide. Units differ, so the per-1,000 prices are not directly comparable: Apify's official actor bundles a search term's surfaces into one result and bills platform usage on top; this actor prices one keyword × one surface with usage included. The columns that compare cleanly are the success rate and what happens on a failed fetch.
| Listed price | What one unit is | Platform usage | Start fee | Public success rate, last 30 days | |
|---|---|---|---|---|---|
| This actor | from $7.50 / 1,000 trend reports (paid plans); $9.00 / 1,000 on the free plan | one keyword × one surface (a full timeline = one report) | included | none | 99.7% (1,567 of 1,571 runs) |
| Apify's official Google Trends Scraper | from $0.30 / 1,000 results; $3.00 / 1,000 on the free plan | one search term with all of its surfaces bundled | billed on top | none | 63.5% (13,535 of 21,319 runs) |
| Google Trends Fast Scraper | $0.02 per run + from $0.50 / 1,000 results; $2.00 / 1,000 on the free plan | one result row | included | $0.02 per run | 99.1% (29,982 of 30,253 runs) |
| SerpApi Google Trends API | from $75 / month for 5,000 searches (≈ $15 / 1,000) | one API search | not applicable (hosted API) | monthly subscription | not published |
| pytrends (Python library) | free | one library call | not applicable | none | unmaintained — endpoints break without notice |
What happens on a failed or empty fetch here: it is reported in ERRORS and no result fee is charged. A keyword Google has too little volume to chart is reported as a keyword with no data — also uncharged — and the run keeps working the rest of your list. Related topics is the one surface that can come back empty on a busy moment, and the same rule applies to it.
How to scrape Google Trends (no code)
- Click Try for free — the form is prefilled with a working example (
bitcoin, all three keyword surfaces). - Add your keywords and pick surfaces, location, and time range.
- Click Start. The first results usually land in the dataset within a minute.
- Export as JSON, CSV, or Excel — or schedule the run to repeat daily or weekly.

Comparing keywords? Turn compare on with 2–5 search terms and leave Related queries and Related topics out of the surfaces — they are per-keyword surfaces with no shared scale, so run them separately.
Input example
{"searchTerms": ["bitcoin", "ethereum"],"compare": true,"surfaces": ["interestOverTime", "interestByRegion"],"geo": "US","timeRange": "today 12-m","includeTrendingNow": true,"trendingNowGeo": "US"}
How much does it cost to scrape Google Trends?
You are billed at most one result per keyword × surface — that is the ceiling, and it is what the figures below use. A full 12-month timeline is one result. A complete related-queries set (top + rising) is one result, and so is a complete related-topics set. One trending-now row is one result. The same keyword is never billed twice for the same surface, and where several surfaces for one keyword settle together as a single report, you pay less than the table shows — never more.
No start fee, no subscription, no minimum spend — you pay only for delivered results. Failed or empty fetches are never charged.
Pricing is all-inclusive: platform usage is included in the event price — one flat, predictable price per result, no separate usage line. The store header quotes the paid-plan price (from $7.50/1,000); the table below shows all-in costs at the FREE-tier price ($9.00/1,000), so every figure is an upper bound:
| What you run | Results | Max all-in cost* |
|---|---|---|
| 1 keyword, all 3 keyword surfaces | up to 3 | ~$0.03 |
| Track 100 keywords' interest weekly | 430/mo | ~$3.87/mo |
| Track 250 keywords daily | 7,500/mo | ~$67.50/mo (less on paid plans) |
| Trending now for 3 countries, daily | ~900/mo | ~$8.10/mo |
*Upper bounds, not estimates — you are never charged more than this, and never for a failed or empty fetch. You stay in control: set a Maximum cost per run (any amount from $0.05 up) and the run stops cleanly before exceeding it — and Apify's free plan ($5 monthly credit) is enough to evaluate seriously before paying anything.
Google Trends API alternative
There is no generally available official Google Trends API: Google's announced API is in closed alpha (waitlist, no trending-now surface). The popular Python library pytrends is unmaintained, with long-broken endpoints. This actor is a stable HTTP/JSON alternative: callable from any language, schedulable, monitored, exportable to CSV/Sheets — with the reliability engineering that one-off scripts and unmaintained libraries cannot sustain: rate limits absorbed and retried automatically, fail-fast behaviour on real outages, and an honest per-fetch error report instead of a silent empty answer.
Use it via API, MCP, and integrations
curl "https://api.apify.com/v2/acts/steadyfetch~google-trends-scraper/run-sync-get-dataset-items?token=$APIFY_TOKEN" \-X POST -H 'Content-Type: application/json' \-d '{"searchTerms":["bitcoin"],"geo":"US","timeRange":"today 3-m"}'
from apify_client import ApifyClientclient = ApifyClient("YOUR_TOKEN")run = client.actor("steadyfetch/google-trends-scraper").call(run_input={"searchTerms": ["bitcoin", "ethereum"], "compare": True,"surfaces": ["interestOverTime", "interestByRegion"], "geo": "US",})for item in client.dataset(run["defaultDatasetId"]).iterate_items():print(item["keyword"], item["surface"])
Connect from any MCP client (Claude, Cursor, …) in one step — pin this actor on Apify's MCP server:
{"mcpServers": {"google-trends": {"url": "https://mcp.apify.com?tools=steadyfetch/google-trends-scraper","headers": { "Authorization": "Bearer YOUR_APIFY_TOKEN" }}}}
MCP-ready, including multi-keyword compare (verified end-to-end): every input works identically from the UI, the REST API, and MCP clients — the input is one flat JSON schema with no hidden flags. Quick calls (trending now, single keyword) return results inside the tool call; bigger jobs hand back a run you can poll with the bundled dataset tools. Scheduling, monitoring, webhooks, and Make/Zapier connections come with the Apify platform.
Steadyfetch trends & keyword suite
One actor per surface, one job each, the same contract everywhere: all-inclusive pay per event, nothing charged for starting a run, charged only on delivery — so a workflow built for one of them ports to the next. Keyword volume is the one exception: from 16 September 2026 a run that buys fresh volume data adds one fresh-lookup fee of $0.19; runs answered from the 30-day cache pay none.
| What you want | Actor |
|---|---|
| Interest over time, related queries, regions, compare | this actor |
| What is trending right now, by country | Google Trends Now Scraper — Trending Searches by Country |
| Rising and Breakout queries, with the real growth number | Rising Keywords Scraper — Google Trends Breakout Queries |
| Autocomplete suggestions across 5 engines | Google Autocomplete & Keyword Suggest Scraper — 5 Engines |
| Monthly search volume and CPC for a keyword list | Keyword Search Volume Scraper — Google Ads CPC & Competition |
| What is trending on social platforms | Social Trends Scraper — X, TikTok, Pinterest, YouTube & Google |
The rest of the steadyfetch shelf — same contract everywhere: all-inclusive pay per event, nothing charged for starting a run, charged only on delivery (three actors add a small delivery-conditional fee from 16 September 2026: keyword volume's fresh lookup, profile posts' profile lookup, Google Jobs' search fee — each README states it).
| Family | Actors |
|---|---|
| Ad creative intelligence | Facebook · Google Ads video · TikTok · LinkedIn · Google Ads text & OCR |
| Trends & keywords | Google Trends · Trends Now · Breakout keywords · Autocomplete keywords · Keyword volume & CPC · Social trends |
| YouTube transcripts | YouTube videos · YouTube channels |
| Reel transcripts · Profile posts | |
| Jobs | Indeed · Career sites by domain · Glassdoor · Multi-board · Google Jobs |
| Amazon | Products · Search · Bestsellers · Sellers |
| Any media file | Speech to Text · any link or file |
FAQ
Is there an official Google Trends API?
Google announced one, but it remains alpha/waitlist-only and does not cover trending now. This actor exists to fill that gap today.
Is it legal to scrape Google Trends?
This actor only collects public, non-personal, aggregated data — the same anonymized index anyone sees at trends.google.com. Courts have repeatedly held that scraping publicly accessible data is lawful (e.g., hiQ v. LinkedIn, Meta v. Bright Data). Still, consult your counsel for your specific use.
Why do values differ slightly from the Trends UI?
Trends is a sampled, relative 0–100 index; Google itself returns slightly different values across sessions. Differences of a few points are inherent to the source, not a scraper defect.
What happens when Google blocks a request?
The request is retried automatically after a short pause. In our own measurements every single rate-limited request that was retried this way came back with data. If a fetch still cannot be delivered, it is recorded in ERRORS with the exact reason and no result fee is charged for it. Those retries cost you nothing — platform usage is included in the event price.
Can I compare 5 keywords?
Yes — turn compare on with 2–5 searchTerms to get them on one shared scale. Related queries and related topics are per-keyword and have no shared scale, so leave those surfaces out of a compare run and fetch them separately.
How many keywords can one run take?
Up to 300 search terms per run; split larger lists across runs (or schedule them). Runs stop cleanly at your Maximum cost per run and before the run timeout, always reporting what was delivered and what remains.
Where are related topics?
Delivered — add relatedTopics to surfaces. It is opt-in rather than a default, so existing runs and their costs are unchanged. Google withholds the topics feed from most automated sessions (the reason other tools ship empty topics rows, and the reason this actor did not offer the surface until it could deliver it). Google also meters the feed, serving it to a limited number of lookups at a time — so a topics lookup can come back empty on a busy moment. It is then reported in ERRORS, never charged, and never shipped as an empty row; wait a minute or two and run the same input again, which normally delivers.
Feedback & support
If this actor saved you time, a rating helps other buyers find it, and saving it (the bookmark icon at the top of this page) keeps it one click away for next time. Found an issue? Open it on the Issues tab — we usually reply within a couple of hours, always within a day, and fixes land in the changelog.