πŸ“ˆ Google Trends Insights Scraper avatar

πŸ“ˆ Google Trends Insights Scraper

Pricing

from $4.99 / 1,000 results

Go to Apify Store
πŸ“ˆ Google Trends Insights Scraper

πŸ“ˆ Google Trends Insights Scraper

Analyze search trends effortlessly. Scrape keyword popularity, categories, breakout queries, trend comparisons, and geographic data. Perfect for forecasting, SEO planning, market intelligence, and content strategy optimization.

Pricing

from $4.99 / 1,000 results

Rating

0.0

(0)

Developer

API Empire

API Empire

Maintained by Community

Actor stats

1

Bookmarked

19

Total users

4

Monthly active users

4 days ago

Last modified

Share

Google Trends Insights Scraper extracts Google Trends data as typed JSON: interest over time, interest by region/city/DMA, related queries and topics, and real-time trending searches β€” plus a statistics bundle (peak, trend direction, percent change, breakout flag, volatility) computed for every keyword. Every response returns typed, normalized JSON β€” no HTML, no selectors, no parsing. Each of the five data types is opt-in and billed as its own pay-per-event, so a run only charges for what it actually fetches. Read on for the exact input schema, output shape, and pricing.


Google Trends Insights Scraper is an Apify Actor that queries Google Trends on your behalf β€” through the trendspy client library β€” and returns up to five distinct kinds of search-interest data as structured JSON. No Google account, Google Cloud project, or Google API key is required; the only credential needed is your Apify API token.

  • πŸ“ˆ Interest over time, for up to 5 keywords compared together in one normalized 0–100 request (isMultiple)
  • 🌍 Interest by region, state, city, or DMA-level geographic breakdown
  • πŸ” Top and rising related queries and related topics per keyword
  • πŸ”₯ Real-time trending searches by region, with optional per-trend news articles
  • ⬇️ Export as JSON, CSV, XML, HTML, or Excel directly from the Apify dataset

Every row carries a type field identifying which of the five families it belongs to. Select the families you need with dataTypes β€” each one is fetched, and billed, independently.

Data TypeKey FieldsJSON Field Names
Interest over time (TIMESERIES)average/peak/min/latest interest, trend direction, percent change, breakout flag, volatility, timelineaverageInterest, peakValue, peakDate, minValue, latestValue, trendDirection, slope, percentChange, breakout, volatilityStdDev, volatilityCV, spikeDates, timeline
Interest by region (GEO)region/city name, region code, 0–100 value, resolution, coordinatesgeoName, regionCode, value, resolution, lat, lng
Related queries (RELATED_QUERIES)top/rising search queries, relative value, breakout flagquery, relation, value, isBreakout
Related topics (RELATED_TOPICS)top/rising topics, topic type, Google topic MIDtopicTitle, topicType, topicMid, value, isBreakout
Trending now (TRENDING_NOW)trending keyword, search volume, growth %, active window, related newskeyword, volume, volumeGrowthPct, startedAt, endedAt, isActive, trendKeywords, topics, newsArticles

When a query returns nothing (too little search volume, a blocked request, an empty region), the Actor pushes an explicit {"type": "error", "dataType": ..., "reason": ...} row instead of one of the rows above β€” and that row is not charged.


Google announced an official Google Trends API in alpha in July 2025 (Google Search Central blog, "Introducing the Google Trends API (alpha)," July 2025). As of this writing (checked 2026-07-26), independent coverage β€” including ScrapingBee's 2026 Google Trends API roundup and Glimpse's "Google Trends' API isn't Public" β€” reports it is still application-gated and allowlisted, has not reached general availability, and requires Google Cloud project authentication with restricted quotas.

FeatureGoogle Trends API (official, alpha)Google Trends Insights Scraper
AccessApply and wait for allowlist approvalAny Apify account β€” start a run immediately
AuthenticationGoogle Cloud project + API credentialsApify API token only, no Google credentials
AvailabilityAlpha, not generally available as of 2026-07-26Generally available now
Data familiesLimited alpha scope (per Google's July 2025 announcement)5 families: interest over time, region, related queries, related topics, trending now
Derived analyticsNot part of the raw API responsePeak, trend direction, %-change, breakout flag, and volatility computed per keyword, no extra request
Rate-limit handlingManaged by Google under alpha quotasActor-side proxy tier escalation (none β†’ datacenter β†’ residential) and exponential backoff

If you already hold alpha access to Google's own API, it is the first-party option and worth using directly. For everyone else β€” including any workflow that needs region, related-query, related-topic, or trending-now data today β€” this Actor is the accessible path, live now, with no application process.


For AI engineers and agent builders

Feed dataTypes: ["TIMESERIES", "RELATED_QUERIES"] output straight into a RAG index or an agent tool: trendDirection and breakout give a cheap, deterministic signal for "is this topic worth researching further," while relation: "rising" related queries surface emerging sub-topics an LLM can expand into search plans. Because every field is typed JSON keyed by keyword and scrapedAt, no HTML parsing sits between the fetch and the prompt β€” the row can go directly into a tool-call response or a vector-store upsert.

For marketers and brand teams

Track campaign and competitor terms with gprop: "news" or "shopping" to see which vertical is driving interest, and pull RELATED_QUERIES with isBreakout: true to catch a term jumping over 5000% before it peaks. Comparing up to 5 brand or product names in one normalized request (isMultiple: true, comma-joined term) shows relative share of search interest without separate runs, and category narrows results to a relevant industry vertical instead of noisy general web search.

For researchers and analysts

Because Google Trends exposes only public, aggregated search-interest data, longitudinal studies can run with timeRange: "all" for the full 2004-to-present window without touching any personal data. GEO requests break interest down to resolution: "REGION", "CITY", or "DMA" for geographic comparison studies, and category resolves either a numeric Google Trends category ID or a free-text name (e.g. "Travel") against the full category tree for consistent topic scoping across a study.

For developers building data products

Build a scheduled keyword-monitoring pipeline on an Apify schedule: set outputFormat: "long" to get one row per date Γ— keyword for direct loading into a warehouse or BI tool, tune maxConcurrency (1–10) to control how many keyword groups fetch in parallel, and let maxRequestRetries and requestDelaySecs absorb Google's rate limiting without the pipeline failing a run.


  1. Open Google Trends Insights Scraper on its Apify Store listing and click Try for free / Start.
  2. Provide input: no field is required by the schema, but if you request any dataTypes other than TRENDING_NOW, you must supply at least one of searchTerms, startUrls, or spreadsheetId β€” otherwise the run fails immediately with "No search terms provided."
  3. Choose your dataTypes (default ["TIMESERIES"]), and set gprop, geo, timeRange (or a custom startDate/endDate), and category as needed β€” or skip all of that and paste ready-made Google Trends explore URLs into startUrls instead.
  4. Click Start. The Actor fetches through trendspy under your chosen proxy tier, escalating and backing off automatically if Google rate-limits it.
  5. Open the Output tab and export the dataset as JSON, CSV, XML, HTML, or Excel, or pull it programmatically via the Apify API.

Google Trends is not a stable public API surface; its underlying endpoints change periodically without notice. The Actor is maintained against the current trendspy client, and the dataset's field names and types are the contract with you β€” they don't change on your end when Google's backend does. No fixed turnaround time is promised for any given break.


⬇️ Input

24 parameters, none required by the schema.

ParameterRequiredTypeConstraintsDescription
searchTermsNoarrayβ€”Keywords or topics to analyze. Required unless you use startUrls, spreadsheetId, or select only TRENDING_NOW. Example: ["chatgpt", "python"].
isMultipleNobooleandefault falseWhen on, commas inside one search term split it into a single comparison group (max 5 keywords, normalized 0–100 against each other). Example: "chatgpt, gemini, claude" β†’ one comparison.
dataTypesNoarraydefault ["TIMESERIES"]; enum per item: TIMESERIES, GEO, RELATED_QUERIES, RELATED_TOPICS, TRENDING_NOWWhich data families to fetch. Each is billed as its own pay-per-event.
gpropNostringdefault "web"; enum: web, news, images, youtube, shoppingGoogle surface to measure.
timeRangeNostringdefault "today 12-m"; enum: now 1-H, now 4-H, now 1-d, now 7-d, today 1-m, today 3-m, today 12-m, today 5-y, allHow far back to analyze. Ignored if a custom date range is set.
startDateNostringdatepicker, absolute or relativeOptional exact start date (YYYY-MM-DD or e.g. "3 months"). Overrides timeRange.
endDateNostringdatepicker, absolute or relativeOptional exact end date. Defaults to today when only a start is given.
geoNostringdefault ""Location code: country (US), region (US-NY), city (US-NY-501), or DMA. Empty = worldwide. Ignored per-URL if startUrls supplies its own geo.
resolutionNostringdefault ""; enum: "" (Auto), COUNTRY, REGION, CITY, DMAGranularity for GEO results. Auto = COUNTRY if geo is worldwide, else REGION.
includeLowVolumeGeosNobooleandefault falseInclude low-search-volume regions/cities in GEO results.
categoryNostringdefault ""Numeric Google Trends category ID (e.g. 5 = Computers & Electronics, 71 = Food & Drink) or a search name (e.g. "Travel") resolved against the full category tree. Empty = all categories.
hlNostringdefault "en"Two-letter interface language for labels.
tzNointegerdefault 360Timezone offset in minutes used when bucketing time data. 360 = US Central.
outputFormatNostringdefault "wide"; enum: wide, longwide = one row per keyword with a nested timeline + stats. long = additionally emit one row per date Γ— keyword.
trendingHoursNointegerdefault 24; min 1; max 191For TRENDING_NOW: detect searches trending within the last N hours.
trendingNewsNobooleandefault falseFor TRENDING_NOW: also fetch related news articles per trend (adds one request per trend).
maxTrendingItemsNointegerdefault 25; min 0Cap TRENDING_NOW results per region. 0 = all.
startUrlsNoarrayβ€”Full Google Trends explore URLs. Each URL's own q/geo/date/cat/gprop parameters apply to that URL only.
spreadsheetIdNostringdefault ""Load terms from a public Google Sheet (one column, row 1 = header).
maxItemsNointegerdefault 0; min 0Cap the number of keyword groups (jobs) processed. 0 = no limit. Each group may still emit multiple rows and data types.
maxConcurrencyNointegerdefault 1; min 1; max 10How many keyword groups fetch in parallel, each with its own client/IP.
maxRequestRetriesNointegerdefault 3; min 1On a 429/block, how many times to rotate the proxy IP within a tier before escalating none β†’ datacenter β†’ residential.
requestDelaySecsNointegerdefault 2; min 0Minimum spacing between Google Trends requests.
proxyConfigurationNoobjectproxy editor; prefill {"useApifyProxy": false}Apify Proxy configuration. Off by default. RESIDENTIAL recommended β€” Google Trends rate-limits datacenter/cloud IPs heavily.

Example input:

{
"searchTerms": ["chatgpt, gemini, claude"],
"isMultiple": true,
"dataTypes": ["TIMESERIES", "GEO", "RELATED_QUERIES"],
"gprop": "web",
"timeRange": "today 12-m",
"geo": "US",
"resolution": "",
"includeLowVolumeGeos": false,
"category": "",
"hl": "en",
"tz": 360,
"outputFormat": "wide",
"trendingHours": 24,
"trendingNews": false,
"maxTrendingItems": 25,
"startUrls": [],
"spreadsheetId": "",
"maxItems": 0,
"maxConcurrency": 1,
"maxRequestRetries": 3,
"requestDelaySecs": 2,
"proxyConfiguration": { "useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"] }
}

Common pitfall: proxyConfiguration prefills to {"useApifyProxy": false} β€” proxy is off unless you turn it on. Google Trends blocks Apify's shared datacenter IPs quickly; the Actor will auto-escalate none β†’ datacenter β†’ residential on a block, but each escalation burns retries and time. Enable proxyConfiguration with apifyProxyGroups: ["RESIDENTIAL"] from the start for reliable runs.


⬆️ Output

The dataset always returns typed, normalized JSON with a type field distinguishing the row's data family β€” no HTML, no selectors. It has four dataset views: the default Interest & insights view (16 columns, for TIMESERIES rows), plus regions, related, and trending views scoped to their respective row types. Each view is a display subset β€” the underlying row carries more fields than its view shows, listed in full below. Export as JSON, CSV, XML, HTML, or Excel from the Output tab, or via the Apify API.

Search-trend results (TIMESERIES, charged as row_result)

One row per keyword in the group (wide format always; long format adds one extra point-row per date Γ— keyword):

{
"type": "interest_over_time",
"keyword": "chatgpt",
"groupKeywords": ["chatgpt", "gemini", "claude"],
"averageInterest": 61.2,
"peakValue": 100,
"peakDate": "2025-04-13",
"minValue": 21,
"latestValue": 88,
"trendDirection": "rising",
"slope": 0.42,
"percentChange": 73.5,
"breakout": false,
"volatilityStdDev": 18.4,
"volatilityCV": 0.3,
"spikeDates": ["2025-04-13"],
"inputUrlOrTerm": "chatgpt, gemini, claude",
"timeRange": "today 12-m",
"geoCode": "US",
"category": "0",
"gprop": "web",
"hl": "en",
"tz": 360,
"normalizedTo": "Values are 0-100, relative within this single request/comparison group.",
"timeline": [
{ "date": "2024-07-07", "value": 42, "isPartial": false },
{ "date": "2025-07-19", "value": 88, "isPartial": true }
],
"scrapedAt": "2026-07-19T00:00:00Z"
}

With outputFormat: "long", an extra row per date Γ— keyword is pushed under the same row_result charge:

{
"type": "interest_over_time_point",
"keyword": "chatgpt",
"date": "2025-07-19",
"value": 88,
"isPartial": true,
"inputUrlOrTerm": "chatgpt, gemini, claude",
"timeRange": "today 12-m",
"geoCode": "US",
"category": "0",
"gprop": "web",
"hl": "en",
"tz": 360,
"normalizedTo": "Values are 0-100, relative within this single request/comparison group.",
"scrapedAt": "2026-07-19T00:00:00Z"
}

Interest-by-region results (GEO, charged as region_result)

{
"type": "interest_by_region",
"keyword": "chatgpt",
"geoName": "California",
"regionCode": "US-CA",
"value": 100,
"resolution": "REGION",
"lat": null,
"lng": null,
"inputUrlOrTerm": "chatgpt, gemini, claude",
"timeRange": "today 12-m",
"geoCode": "US",
"category": "0",
"gprop": "web",
"hl": "en",
"tz": 360,
"normalizedTo": "Values are 0-100, relative within this single request/comparison group.",
"scrapedAt": "2026-07-19T00:00:00Z"
}
{
"type": "related_query",
"keyword": "chatgpt",
"relation": "rising",
"query": "chatgpt login",
"value": 5000,
"isBreakout": true,
"inputUrlOrTerm": "chatgpt, gemini, claude",
"timeRange": "today 12-m",
"geoCode": "US",
"category": "0",
"gprop": "web",
"hl": "en",
"tz": 360,
"normalizedTo": "Values are 0-100, relative within this single request/comparison group.",
"scrapedAt": "2026-07-19T00:00:00Z"
}
{
"type": "related_topic",
"keyword": "chatgpt",
"relation": "top",
"topicTitle": "OpenAI",
"topicType": "Company",
"topicMid": "/g/11h03_9qjf",
"value": 100,
"isBreakout": false,
"inputUrlOrTerm": "chatgpt, gemini, claude",
"timeRange": "today 12-m",
"geoCode": "US",
"category": "0",
"gprop": "web",
"hl": "en",
"tz": 360,
"normalizedTo": "Values are 0-100, relative within this single request/comparison group.",
"scrapedAt": "2026-07-19T00:00:00Z"
}

Charging is per keyword: with both RELATED_QUERIES and RELATED_TOPICS selected, a 3-keyword comparison group charges up to 6 related_result events (2 per keyword), not 1.

{
"type": "trending_now",
"keyword": "eclipse 2026",
"geoCode": "US",
"volume": "200K+",
"volumeGrowthPct": 1200,
"startedAt": "2026-07-19T02:00:00Z",
"endedAt": null,
"isActive": true,
"trendKeywords": ["solar eclipse", "eclipse path"],
"topics": ["Astronomy"],
"newsArticles": [
{ "title": "Eclipse coverage tonight", "url": "https://example.com/a", "source": "Example News", "picture": "https://example.com/a.jpg" }
],
"scrapedAt": "2026-07-19T00:00:00Z"
}

trend_result is charged once per unique geo (region), not per trend item β€” a run covering 3 regions with TRENDING_NOW selected charges up to 3 trend_result events regardless of how many trends each region returns (capped by maxTrendingItems).

Empty results never charge: a query that returns nothing pushes an unbilled {"type": "error", "dataType": ..., "reason": ...} row (or {"type": "error", "dataType": "TRENDING_NOW", "geoCode": ..., "reason": ...} for trending) instead of one of the rows above.


FeatureGoogle Trends Insights ScraperGeneric alternative
Derived statistics per keyword (peak, trend direction, %-change, breakout, volatility)Computed locally, included in every TIMESERIES rowNot documented on apify/google-trends-scraper's or data_xplorer/google-trends-fast-scraper's listings, as observed on the Apify Store on 2026-07-26
Multi-keyword comparison in one requestUp to 5 keywords via isMultipledata_xplorer/google-trends-fast-scraper's schema accepts a single keyword string, no comparison mode documented, as observed on the Apify Store on 2026-07-26
Data-family coverage5 families: timeseries, region, related queries, related topics, trending nowdata_xplorer/google-trends-fast-scraper documents keyword trends and region data only β€” no related queries/topics, no trending-now β€” as observed on the Apify Store on 2026-07-26
Billing granularityEach data family is its own pay-per-event; unused families cost nothingNot itemized by data family on apify/google-trends-scraper's listing, as observed on the Apify Store on 2026-07-26
Unbilled empty-result handlingEmpty queries push an explicit unbilled {"type": "error"} rowNot documented on either competitor's listing, as observed on the Apify Store on 2026-07-26

If you're building an AI agent or RAG pipeline, the output-format row is the decision-maker β€” parsing raw, deeply-nested Google widget JSON (as returned by apify/google-trends-scraper's example output) inside an agent loop is a reliability failure mode, not a feature.


There is no hard cap enforced by the Actor itself on total dataset rows. maxItems caps the number of keyword groups (jobs) processed β€” default 0 means no limit. Within a group, isMultiple bundles up to 5 keywords compared together; each searchTerms entry (or each startUrls URL, or each row loaded from spreadsheetId) becomes its own group. For TRENDING_NOW, maxTrendingItems caps the number of trends returned per geo (default 25, 0 = all). maxConcurrency (1–10, default 1) controls how many groups fetch in parallel β€” Google Trends rate-limits aggressively, so the schema recommends keeping this at 1–3. No benchmark run time is published; actual throughput depends on how much backoff and retry the current proxy tier needs.


Google Trends Insights Scraper works with any language or tool that can send an HTTP request, through the Apify API.

REST API integration

from apify_client import ApifyClient
client = ApifyClient("<YOUR_APIFY_API_TOKEN>")
run_input = {
"searchTerms": ["chatgpt", "python"],
"dataTypes": ["TIMESERIES", "RELATED_QUERIES"],
"geo": "US",
"proxyConfiguration": {"useApifyProxy": True, "apifyProxyGroups": ["RESIDENTIAL"]},
}
run = client.actor("google-trends-insights-scraper").call(run_input=run_input)
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item["type"], item.get("keyword"), item.get("averageInterest"))

Works in Python, Node.js, Go, Ruby, cURL.

Automation platforms (n8n, Make, LangChain)

Apify publishes a general-purpose Apify app/module for both n8n and Make that can start any Actor β€” including this one β€” pass it JSON input, and poll or wait for the dataset; select this Actor by its ID (google-trends-insights-scraper) inside the node/module's Actor field rather than a dedicated per-Actor node. For LangChain, the langchain_apify package's ApifyWrapper/ApifyActorsTool calls an Actor by ID and loads its dataset directly into a document loader or agent tool, so TIMESERIES/RELATED_QUERIES rows can feed a retrieval chain without a manual JSON-parsing step.


Yes β€” scraping Google Trends is legal when limited to the publicly available, aggregated search-interest data this Actor returns. Google Trends Insights Scraper only returns public data: every value is an anonymized index computed across many searchers, not information tied to an individual, so this is business/aggregate data rather than personal data β€” GDPR/CCPA's personal-data rules do not attach to it. What does apply is Google's own Terms of Service governing automated access to its properties. Consult legal counsel for commercial use cases involving bulk personal data.


❓ Frequently asked questions

Yes. No Google login, Google Cloud project, or Google API key is required β€” the only credential needed is your Apify API token.

How often is the scraped data updated?

Every run fetches live from Google Trends through trendspy at run time. Nothing is cached between runs; each run reflects Google's current interest data at the moment it executes.

The Actor pushes an unbilled {"type": "error", "dataType": ..., "reason": "..."} row instead of charging β€” for example "No interest-over-time data (keyword may have too little search volume)" for TIMESERIES, or "No related data returned for this keyword" for RELATED_QUERIES/RELATED_TOPICS. No pay-per-event fires for these rows.

No β€” and there isn't any. Google Trends only ever exposes public, aggregated search-interest data; there is no private or login-gated Trends content to access.

How does pay-per-event billing work for this Actor?

Each of the 5 dataTypes is billed independently: row_result (once per keyword group's timeseries fetch), region_result (once per keyword group's region fetch), related_result (once per keyword within a group, per related endpoint), and trend_result (once per unique geo for TRENDING_NOW). Only the first row of each fetched unit is charged; the remaining rows in that unit (e.g. the rest of a comparison group's keywords, or all of one region's trending items) are pushed for free. Empty-result error rows are never charged.

Yes β€” it is callable as an HTTP endpoint by any agent framework via the Apify API and apify_client. Every response is typed JSON with stable field names, so it can be passed to an LLM context window, indexed into a vector store, or routed through an agent tool without a parsing step.

The Actor auto-escalates proxy tiers (none β†’ datacenter β†’ residential) on a 429/403/302/quota response, rotates to a fresh proxy IP for up to maxRequestRetries attempts within each tier, and applies exponential backoff (honoring a Retry-After header when Google sends one). For the quota-limited related-queries and related-topics endpoints, it also rotates the request's referer header across attempts, since Google's embed quota for those endpoints is keyed to the referer.

See the comparison table above. In short: it is the only one of the top-3 ranked Google Trends scrapers on the Apify Store (as observed 2026-07-26) documented to compute derived statistics locally, bill each data family separately, and push unbilled error rows for empty results.

Yes. Typed, normalized JSON with stable field names β€” no HTML, no selectors, no parsing required before passing it to an LLM.

Yes β€” enable proxyConfiguration and the Actor handles proxy acquisition and tier escalation itself via Apify Proxy; you never source or rotate IPs manually. Note that proxy is off by default (prefill: {"useApifyProxy": false}), so turn it on explicitly for reliable results.

The Actor is maintained, and the output schema stays stable β€” field names and types don't change on your end when Google's backend does. No numeric turnaround time is promised for any given break.


πŸ’¬ Your feedback

Found a bug or missing a field? We want to know. Report it on the Actor's Issues tab in Apify Console, or reach out through your Apify account's support channel β€” active maintenance is how this Actor keeps working against Google Trends' current endpoints.