Google Trends Scraper — Interest Over Time, Related Queries avatar

Google Trends Scraper — Interest Over Time, Related Queries

Pricing

from $7.50 / 1,000 trend reports

Go to Apify Store
Google Trends Scraper — Interest Over Time, Related Queries

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

Steadyfetch Team

Maintained by Community

Actor stats

1

Bookmarked

56

Total users

18

Monthly active users

0.52 hours

Issues response

3 hours ago

Last modified

Categories

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 itYou get back
a keyword (1–300 per run)interestOverTime — the full 0–100 timeline, one row per keyword
…2–5 keywords with compare onall of them scored on one shared scale, exactly like the Trends UI
…a country, time range, category or propertyrelatedQueries (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 codetrendingNow — 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:

Dataset table of a real Google Trends Scraper run: bitcoin and ethereum, interest over time, related queries and interest by region, US, past 12 months

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:

surfacekeywordgeotimeRangewhat is inside data
interestOverTimebitcoinworldwidetoday 12-m54 weekly points — Aug 24 – 30, 2025 = 50 … Aug 30 – Sep 5, 2026 = 25 (isPartial: true)
relatedQueriesbitcoinworldwidetoday 12-m25 top + 25 rising — top bitcoin price (100); rising bitcoin casino vodds (Breakout, +25,200%)
interestByRegionbitcoinworldwidetoday 12-m250 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 keywords
on 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_TOKEN
Input (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 with
your 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").
  • 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 ERRORSno 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 schemaVersion and, within its shape, every field is always present — explicit null over 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 relatedTopics and 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 — ERRORS says 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 priceWhat one unit isPlatform usageStart feePublic success rate, last 30 days
This actorfrom $7.50 / 1,000 trend reports (paid plans); $9.00 / 1,000 on the free planone keyword × one surface (a full timeline = one report)includednone99.7% (1,567 of 1,571 runs)
Apify's official Google Trends Scraperfrom $0.30 / 1,000 results; $3.00 / 1,000 on the free planone search term with all of its surfaces bundledbilled on topnone63.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 planone result rowincluded$0.02 per run99.1% (29,982 of 30,253 runs)
SerpApi Google Trends APIfrom $75 / month for 5,000 searches (≈ $15 / 1,000)one API searchnot applicable (hosted API)monthly subscriptionnot published
pytrends (Python library)freeone library callnot applicablenoneunmaintained — 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.

  1. Click Try for free — the form is prefilled with a working example (bitcoin, all three keyword surfaces).
  2. Add your keywords and pick surfaces, location, and time range.
  3. Click Start. The first results usually land in the dataset within a minute.
  4. Export as JSON, CSV, or Excel — or schedule the run to repeat daily or weekly.

Google Trends Scraper input form in the Apify console, set up for a 4-keyword compare run

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"
}

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 runResultsMax all-in cost*
1 keyword, all 3 keyword surfacesup to 3~$0.03
Track 100 keywords' interest weekly430/mo~$3.87/mo
Track 250 keywords daily7,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.

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 ApifyClient
client = 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.

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 wantActor
Interest over time, related queries, regions, comparethis actor
What is trending right now, by countryGoogle Trends Now Scraper — Trending Searches by Country
Rising and Breakout queries, with the real growth numberRising Keywords Scraper — Google Trends Breakout Queries
Autocomplete suggestions across 5 enginesGoogle Autocomplete & Keyword Suggest Scraper — 5 Engines
Monthly search volume and CPC for a keyword listKeyword Search Volume Scraper — Google Ads CPC & Competition
What is trending on social platformsSocial 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).

FamilyActors
Ad creative intelligenceFacebook · Google Ads video · TikTok · LinkedIn · Google Ads text & OCR
Trends & keywordsGoogle Trends · Trends Now · Breakout keywords · Autocomplete keywords · Keyword volume & CPC · Social trends
YouTube transcriptsYouTube videos · YouTube channels
InstagramReel transcripts · Profile posts
JobsIndeed · Career sites by domain · Glassdoor · Multi-board · Google Jobs
AmazonProducts · Search · Bestsellers · Sellers
Any media fileSpeech to Text · any link or file

FAQ

Google announced one, but it remains alpha/waitlist-only and does not cover trending now. This actor exists to fill that gap today.

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.

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.

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.