Google Trends Scraper With Keyword Research
Pricing
from $5.99 / 1,000 results
Google Trends Scraper With Keyword Research
Google Trends Scraper: Analyze keyword popularity, search interest, related queries, rising topics, geographic trends, and time-based demand. Discover emerging keywords, compare search trends, and uncover content opportunities for SEO, market research, and digital marketing strategy.
Pricing
from $5.99 / 1,000 results
Rating
0.0
(0)
Developer
Scrapier
Maintained by CommunityActor stats
1
Bookmarked
19
Total users
3
Monthly active users
4 days ago
Last modified
Categories
Share
Google Trends Keyword Research — Related Queries & Rising Terms
Google Trends Scraper With Keyword Research turns seed keywords into a keyword-research dataset pulled from Google Trends: interest-over-time trend lines, related queries and topics (top or rising), Google autocomplete long-tail expansion, and deterministic topic clusters, not just one trend line per keyword. Every response is structured JSON, ready to pass to an LLM, load into a vector store, or feed a monitoring pipeline. No Google account or login is required. Point it at seed keywords, a Google Trends URL, or a Google Sheet and start building a keyword universe.
What is Google Trends Scraper With Keyword Research?
Google Trends Scraper With Keyword Research queries the live Google Trends widgets for one or more seed keywords and returns one JSON row per seed group. Beyond the standard interest-over-time series, it pulls Google's own related-queries and related-topics data (top or rising/breakout), expands each seed through the Google Suggest autocomplete endpoint for long-tail ideas, and derives deterministic topic clusters from the combined keyword pool — the keyword-research layer a plain trend export doesn't provide. No Google account or login is required; every source it hits is a public, logged-out endpoint.
- Interest-over-time trend series (0–100 index) for each seed keyword or comma-separated comparison group
- Related queries and related topics per seed, switchable between
rising(breakout) andtop(most popular) - Google autocomplete expansion into long-tail keyword suggestions, with optional a–z probing
- Deterministic topic clusters grouped from the expanded keyword pool (no AI, fully reproducible)
- Region (
targetCountry), category (researchCategory), and history-range (historyRangeor an exact date window) controls - Seed input via a typed keyword list, pasted Google Trends URLs, or a public Google Sheet column
What data can you get with Google Trends Scraper With Keyword Research?
The Actor returns one row per seed group, combining the interest-over-time series with related queries, related topics, autocomplete expansion, and derived topic clusters.
| Result Type | Extracted Fields | Primary Use Case |
|---|---|---|
| Interest over time | searchTerm, inputUrlOrTerm, interestOverTime_timelineData (array of {date, <keyword>: value}), timeRange, geo, category | Charting demand and seasonality for a keyword |
| Related queries & topics | relatedQueries (array of {query, value, rank}), relatedTopics (array of {topicTitle, topicType, topicMid, value, rank}), relatedUnavailable | Keyword expansion and breakout-topic discovery |
| Autocomplete expansion | autocompleteTerms (array of long-tail suggestion strings) | Long-tail keyword ideation |
| Topic clusters | topicClusters (array of {clusterLabel, keywords[], count}) | Grouping expanded keywords into content-brief buckets |
| Run metadata | scrapedAt | Tracking when each row was captured, for diffing across runs |
Related queries, related topics and autocomplete expansion
This is the keyword-research layer that separates this Actor from a plain interest-over-time export. For each seed, relatedQueries and relatedTopics come straight from Google Trends' own related-searches widget — the same "rising"/"top" data you'd see on the Trends website — parsed into a ranked array with a relative value score. Because Google throttles that widget hard under load, the Actor retries across freshly-rotated residential proxy sessions and only falls back to relatedUnavailable: true with null fields when every attempt is genuinely exhausted; it never fabricates a value. Separately, autocompleteTerms comes from the Google Suggest endpoint (the same one behind the search box), expanded a–z per seed for broad long-tail coverage, and topicClusters groups that pool into deterministic lexical buckets with no model involved.
{"relatedQueries": [{ "query": "best coffee maker 2026", "value": 100, "rank": 1 },{ "query": "coffee maker with grinder", "value": 87, "rank": 2 }],"relatedTopics": [{ "topicTitle": "Espresso machine", "topicType": "Topic", "topicMid": "/m/02f2t3", "value": 92, "rank": 1 }],"relatedUnavailable": false,"autocompleteTerms": ["coffee maker with grinder", "coffee maker single serve", "coffee maker under $50"],"topicClusters": [{ "clusterLabel": "grinder", "keywords": ["coffee maker with grinder", "espresso grinder combo"], "count": 2 }]}
Interest-over-time trend series
interestOverTime_timelineData is the same 0–100 relative-popularity series Google Trends shows for a keyword (or up to five comma-separated keywords compared together via splitCommaSeparated), bucketed by date and localized by geo, category, and timeRange/exactDateRange. It's the baseline signal to chart seasonality and demand shifts alongside the related-query and autocomplete layers.
Why not build this yourself?
Google Trends has no official public API — the widgets behind the public website are unofficial endpoints that change shape without notice, throttle aggressively (especially the related-queries widget), and block datacenter IPs outright under load. Building and maintaining a scraper for this means handling proxy escalation, retry logic, and endpoint drift yourself, on top of writing the autocomplete-expansion and clustering layer from scratch. Google Trends Scraper With Keyword Research already climbs a no-proxy → datacenter → residential proxy ladder, retries the related-queries widget across rotated residential sessions, and normalizes everything into one JSON schema. Use it when you want keyword-research data now; build your own only if you need to change the underlying scraping logic itself.
What is the difference between a Google Trends scraper and a keyword research tool?
A Google Trends scraper answers "how has interest in this term moved, relative to itself, over time," while a keyword research tool typically answers "how many people search this term, and what else should I target." Traditional keyword tools (built on Google Keyword Planner-style data) report absolute or estimated monthly search volume; Google Trends only ever reports a relative 0–100 index, and this Actor does not compute or invent an absolute volume number — it doesn't have access to one. What it does add on top of the trend line is the discovery side of keyword research: real related queries and topics, autocomplete-derived long-tail variants, and topic clusters — the part of "keyword research" that's about finding new terms, not sizing existing ones.
Google Trends Scraper With Keyword Research sits across both categories: interestOverTime_timelineData covers the trend-tracking side, while relatedQueries, relatedTopics, autocompleteTerms, and topicClusters cover the discovery side. If you need absolute search-volume estimates, pair this Actor's output with a volume-reporting tool rather than expecting it here.
How to scrape Google Trends with Google Trends Scraper With Keyword Research?
No input field is required, but a run needs at least one seed — via seedKeywords, googleTrendsUrls, or keywordSheetId — to return any rows.
- Open the Actor on its Apify Store listing and go to the Input tab.
- Add one or more terms to
seedKeywords(e.g."coffee maker"), or paste Google Trends URLs intogoogleTrendsUrls, or pointkeywordSheetIdat a public Google Sheet. - Set the query controls that matter:
historyRangeorexactDateRange,targetCountry,researchCategory,risingOrTop, and the autocomplete/cluster toggles. - Start the run.
- Read results from the Dataset tab, or export as JSON or CSV.
{"seedKeywords": ["coffee maker", "espresso machine"],"historyRange": "today 12-m","targetCountry": "US","risingOrTop": "rising","includeRelated": true,"includeAutocomplete": true}
How to run multiple keyword searches in one job
seedKeywords accepts an array — each line becomes its own seed group by default, fetched concurrently up to concurrencyLimit. Turn on splitCommaSeparated to instead compare up to five comma-separated keywords per line as a single group (Google Trends' own comparison limit). Seed groups run through an asyncio.Semaphore bounded by concurrencyLimit, so a large batch doesn't need a separate run per keyword.
⬇️ Input
All 22 input fields are optional; a run needs at least one seed source (seedKeywords, googleTrendsUrls, or keywordSheetId) to return rows.
| Parameter | Required | Type | Description | Example Value |
|---|---|---|---|---|
seedKeywords | No | array | Keywords/topics to research. Required unless a Trends URL or Sheet is used. | ["coffee maker"] |
splitCommaSeparated | No | boolean | On: a comma-separated line is compared as one group (max 5). Off: each line is its own seed. Default false. | false |
includeRelated | No | boolean | Fetch related queries and related topics for each seed. Default true. | true |
risingOrTop | No | string | Which related set to return: rising (breakout) or top (most popular). Default rising. | rising |
includeAutocomplete | No | boolean | Expand each seed via Google Suggest autocomplete. Default true. | true |
autocompleteExpand | No | boolean | On: probe seed a…seed z for more long-tail suggestions. Off: raw seed only. Default true. | true |
clusterKeywords | No | boolean | Derive topicClusters from the expanded keyword pool. Default true. | true |
autocompleteLanguage | No | string | ISO 639-1 language code for autocomplete. Default en. | en |
autocompleteCountry | No | string | ISO 3166-1 alpha-2 country code for autocomplete. Blank = derived from targetCountry. | us |
historyRange | No | string | Interest-history window: Past hour to All time. Default today 12-m. | today 12-m |
targetCountry | No | string | ISO country code to localize trend and related data. Blank = Worldwide. | US |
localeCountry | No | string | Lowercase "viewed-from" country context. Blank = auto. | us |
researchCategory | No | string | Google Trends category id, or blank for all categories. | "" |
exactDateRange | No | string | Exact window YYYY-MM-DD YYYY-MM-DD, overrides historyRange. | "" |
googleTrendsUrls | No | array | Full Google Trends URLs to derive seeds/geo/date/category from. | [] |
keywordSheetId | No | string | Public Google Sheet ID to load seeds from (one column, row 1 = header). | "" |
maxKeywordGroups | No | integer | Max output rows (seed groups). 0 = no limit. | 0 |
requestRetries | No | integer | Retry attempts for failed Google Trends requests. Default 3. | 3 |
concurrencyLimit | No | integer | Seed groups fetched in parallel (real asyncio.Semaphore). Default 10. | 10 |
pageTimeoutSecs | No | integer | Per-request HTTP timeout applied to every Trends call. Default 180. | 180 |
skipDebugSnapshots | No | boolean | Skip saving the per-group debug key-value-store snapshot. Default false. | false |
proxyConfiguration | No | object | Proxy settings. RESIDENTIAL reduces related-widget throttling. | {"useApifyProxy": true} |
Example JSON input
{"seedKeywords": ["coffee maker", "espresso machine", "cold brew"],"splitCommaSeparated": false,"includeRelated": true,"risingOrTop": "rising","includeAutocomplete": true,"autocompleteExpand": true,"clusterKeywords": true,"autocompleteLanguage": "en","autocompleteCountry": "us","historyRange": "today 12-m","targetCountry": "US","researchCategory": "","maxKeywordGroups": 0,"requestRetries": 3,"concurrencyLimit": 10,"pageTimeoutSecs": 180,"proxyConfiguration": { "useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"] }}
Common pitfall: relatedQueries/relatedTopics come from the Google Trends widget Google throttles hardest. If you're seeing relatedUnavailable: true on a lot of rows, set proxyConfiguration to use RESIDENTIAL proxy groups rather than running with no proxy — datacenter and no-proxy connections are throttled far more aggressively on the related widget than on interest-over-time.
⬆️ Output
Results are typed, normalized JSON with a consistent schema across runs, exportable as JSON or CSV from the Dataset tab. One row is pushed per seed group that returned a valid interest-over-time series; groups with no search volume are skipped rather than pushed empty.
Scraped results
[{"inputUrlOrTerm": "coffee maker","searchTerm": "coffee maker","timeRange": "today 12-m","geo": "US","category": "0","interestOverTime_timelineData": [{ "date": "2025-07-27", "coffee maker": 62 },{ "date": "2025-08-03", "coffee maker": 58 },{ "date": "2025-08-10", "coffee maker": 65 }],"relatedQueries": [{ "query": "best coffee maker 2026", "value": 100, "rank": 1 },{ "query": "coffee maker with grinder", "value": 87, "rank": 2 },{ "query": "single serve coffee maker", "value": 74, "rank": 3 }],"relatedTopics": [{ "topicTitle": "Espresso machine", "topicType": "Topic", "topicMid": "/m/02f2t3", "value": 92, "rank": 1 },{ "topicTitle": "Keurig", "topicType": "Brand", "topicMid": "/m/0j8t4x", "value": 68, "rank": 2 }],"relatedUnavailable": false,"autocompleteTerms": ["coffee maker with grinder", "coffee maker single serve", "coffee maker under $50"],"topicClusters": [{ "clusterLabel": "grinder", "keywords": ["coffee maker with grinder", "espresso grinder combo"], "count": 2 }],"scrapedAt": "2026-07-26T09:14:02Z"},{"inputUrlOrTerm": "espresso machine","searchTerm": "espresso machine","timeRange": "today 12-m","geo": "US","category": "0","interestOverTime_timelineData": [{ "date": "2025-07-27", "espresso machine": 48 },{ "date": "2025-08-03", "espresso machine": 51 }],"relatedQueries": null,"relatedTopics": null,"relatedUnavailable": true,"autocompleteTerms": ["espresso machine under $200", "espresso machine with grinder"],"topicClusters": [],"scrapedAt": "2026-07-26T09:14:11Z"},{"inputUrlOrTerm": "cold brew","searchTerm": "cold brew","timeRange": "today 12-m","geo": "US","category": "0","interestOverTime_timelineData": [{ "date": "2025-07-27", "cold brew": 71 },{ "date": "2025-08-03", "cold brew": 69 }],"relatedQueries": [{ "query": "cold brew concentrate", "value": 100, "rank": 1 }],"relatedTopics": [{ "topicTitle": "Cold brew coffee", "topicType": "Topic", "topicMid": "/m/0h8n2z", "value": 88, "rank": 1 }],"relatedUnavailable": false,"autocompleteTerms": ["cold brew concentrate", "cold brew recipe", "cold brew vs iced coffee"],"topicClusters": [{ "clusterLabel": "concentrate", "keywords": ["cold brew concentrate", "cold brew concentrate recipe"], "count": 2 }],"scrapedAt": "2026-07-26T09:14:20Z"}]
The second row above shows relatedUnavailable: true — the honest failure state when Google's related-queries quota blocked every retry attempt for that seed, rather than a fabricated value.
How can I use the data extracted with Google Trends Scraper With Keyword Research?
- SEO and content strategists: feed
relatedQueries,autocompleteTerms, andtopicClustersstraight into a content brief — cluster labels become article buckets, andrisingOrTop: "rising"surfaces breakout terms before competitors write about them. - PPC and paid-search teams: build keyword lists and negative-keyword candidates from
relatedQueries/autocompleteTermswithout manually typing suggestions into the Trends UI one seed at a time. - Market researchers: compare
interestOverTime_timelineDataacross a set of seeds (brand vs. category vs. competitor) to gauge relative share of search interest and volatility over a chosenhistoryRange. - AI engineers and LLM developers: an agent issues a seed-keyword query, receives this Actor's structured JSON back, and grounds a content, SEO, or trend-forecasting answer in live Google Trends data instead of stale training data.
How do you monitor Google Trends keywords over time?
Keyword monitoring here means re-running the same seed list on a schedule and diffing the new rows against the previous run, rather than treating one snapshot as permanent — a keyword's trend line and related-query set both drift week to week, and a single run only ever tells you where things stood at that moment. Because each row is keyed by searchTerm and stamped with scrapedAt, repeated runs let you diff interestOverTime_timelineData for a rising or falling trend line, watch relatedQueries/relatedTopics for new entries that weren't in the prior run (a signal a term is newly breaking out), track autocompleteTerms for newly-surfacing long-tail phrasing, and track topicClusters for clusters that grow or shrink in count between runs.
A basic workflow: schedule this Actor against a fixed seedKeywords list with risingOrTop set to rising, store each run's rows keyed by searchTerm and scrapedAt in your own database or warehouse, then diff the newest run's relatedQueries array against the previous run's for the same seed and alert whenever a new query enters the top ranks or an existing query's value jumps sharply. The same diff applied to interestOverTime_timelineData catches a trend line that's newly turning upward before it shows up anywhere else. There's no actor-specific webhook built into this Actor, so pair a scheduled run with Apify's platform-level Schedule feature and the Apify API's dataset endpoints or run-finished webhooks to move each run's rows into your own pipeline for the diffing step.
Integrate Google Trends Scraper With Keyword Research and automate your workflow
Google Trends Scraper With Keyword Research works with any language or tool that can send an HTTP request.
REST API with Python
import requestsTOKEN = "<YOUR_APIFY_TOKEN>"url = "https://api.apify.com/v2/acts/scrapier~google-trends-scraper-with-keyword-research/run-sync-get-dataset-items"payload = {"seedKeywords": ["coffee maker"],"risingOrTop": "rising","includeRelated": True,}resp = requests.post(url, params={"token": TOKEN}, json=payload, timeout=180)rows = resp.json() # list of seed-group rows, as shown abovefor row in rows:print(row["searchTerm"], row["relatedQueries"], row["relatedUnavailable"])
MCP for query-grounded AI agents
The Actor is reachable through Apify's Actors MCP Server: run npx @apify/actors-mcp-server --tools scrapier/google-trends-scraper-with-keyword-research locally with an APIFY_TOKEN set, or connect the hosted server at https://mcp.apify.com. Register it with an MCP-compatible client — Claude Desktop, Claude Code, or Cursor — and an agent can call it as a tool: a user asks about a trending topic, the agent runs the keyword research, and grounds its answer in the returned related-query and trend fields.
Scheduled monitoring and delivery
There is no actor-specific webhook built into this Actor. Attach it to Apify's platform-level Schedule to trigger runs on an interval, and use the Apify API's run-finished webhooks or dataset export endpoints to deliver each run's rows into your own storage or pipeline.
Is it legal to scrape Google Trends?
Yes. Google Trends data is aggregate, non-personal search-interest data that Google itself publishes on a public website for any visitor to view — this Actor returns the same relative trend scores, related queries/topics, and autocomplete suggestions a logged-out visitor already sees, not personal or account-linked data. Google's Terms of Service govern automated access to its properties, so ongoing high-volume or commercial use should be reviewed against those terms. Scraping aggregate trend data for research or monitoring carries a different risk profile than scraping personal data, and a different one again than using it to train a model. Consult your legal team for commercial use cases involving bulk data storage or resale.
Frequently asked questions
What keyword-research data does this Actor actually return?
Beyond the interest-over-time trend line, it returns Google's own related queries and related topics (relatedQueries, relatedTopics, switchable between rising and top), Google Suggest autocomplete expansion (autocompleteTerms), and deterministic topic clusters (topicClusters) derived from the combined keyword pool — real discovery data, not just a single term's trend score.
Which regions and categories can I localize results to?
targetCountry localizes trend and related data to any of the ISO country codes in the schema (blank = worldwide), researchCategory narrows to a specific Google Trends category id, and autocompleteLanguage/autocompleteCountry control the language and region used for autocomplete suggestions independently.
Can I choose rising vs. top related terms?
Yes. risingOrTop (default rising) switches the related-queries and related-topics sets between Google's "rising" (fast-growing/breakout) and "top" (most popular all-time) classifications for every seed in the run.
How does this Actor handle Google's anti-bot and rate-limit measures?
It escalates through a no-proxy → datacenter → residential proxy ladder when interest-over-time requests come back blocked, and for the related-queries widget specifically it retries across freshly-rotated residential proxy sessions with backoff, since Google throttles that endpoint harder than any other it hits.
Does this Actor extract related queries and topics, or just a trend line?
It extracts both. relatedQueries and relatedTopics arrive alongside interestOverTime_timelineData on every row, unless Google's related-widget quota blocks every retry attempt for that seed — in that case both are null and relatedUnavailable is set to true, never filled with fabricated data.
How many results does this Actor return per query?
One row per seed group by default, capped by maxKeywordGroups (0 = no limit). Within a row, relatedQueries/relatedTopics and autocompleteTerms reflect whatever Google's widgets return for that seed — there is no fixed per-query result-count cap in the schema beyond maxKeywordGroups.
How do I monitor a keyword's trends and related queries over time?
Schedule this Actor against the same seedKeywords list, store each run's rows keyed by searchTerm and scrapedAt, and diff interestOverTime_timelineData, relatedQueries, and topicClusters between runs to catch a rising trend or a newly-emerging related term.
Does this Actor work with Claude, ChatGPT, and AI agent frameworks?
Yes — it's callable as a plain HTTP endpoint by any agent framework that can send a request, and it's also reachable through Apify's Actors MCP Server (npx @apify/actors-mcp-server --tools scrapier/google-trends-scraper-with-keyword-research, or the hosted https://mcp.apify.com) for MCP-native clients like Claude Desktop and Claude Code.
Can I load seeds from a URL or spreadsheet instead of typing keywords?
Yes. googleTrendsUrls derives seeds, geo, date range, and category directly from pasted Google Trends URLs, and keywordSheetId loads seeds from a public Google Sheet's first column (row 1 treated as a header).
Can I use this Actor without managing proxies or a Google account?
Yes. No Google account or login is required — every endpoint this Actor hits (Trends widgets, Google Suggest) is public and logged-out. Proxy escalation is automatic across the no-proxy/datacenter/residential ladder; you can also pin proxyConfiguration to RESIDENTIAL yourself to reduce related-widget throttling.
Your feedback
Found a bug or a field that doesn't match what's documented here? Let us know through the Actor's Issues tab on Apify or Scrapier's support contact — reports like this go straight into fixing the extractor.