Google Trends Scraper & API avatar

Google Trends Scraper & API

Pricing

from $1.70 / 1,000 keyword reports

Go to Apify Store
Google Trends Scraper & API

Google Trends Scraper & API

Google Trends scraper and API in bulk: interest over time, compare up to 5 keywords, daily trending searches, states, metros and cities, rising and Breakout queries. A pytrends alternative that handles 429 errors for you. You pay only for complete results, plus a tiny start fee.

Pricing

from $1.70 / 1,000 keyword reports

Rating

0.0

(0)

Developer

SusLabs

SusLabs

Maintained by Community

Actor stats

1

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

Share

Google Trends Scraper gets Google Trends data for any number of keywords in one run: interest over time, interest by state, metro area or city, related and rising queries, keyword comparisons on one shared scale, and daily trending searches by country. No browser, no Google account, no code: it works like a Google Trends API you can use today.

Why people choose it:

  • ✅ Result charges require complete data. Blocked keywords, no-data keywords and reports missing requested base panels have no result event charge. The platform startup fee still applies; daily estimates charge per complete baseline/window.
  • ⚡ Automatic connection fallback. Requests try direct connections first and switch to rotating residential proxies when needed. Runtime varies with refusals and panels: a saved full-panel three-term comparison on 21 Oct 2026 took about 21 seconds; a 20-keyword run took about two minutes.
  • 🛡️ Built for Google's rate limits. A refused panel is retried on its own over a fresh connection. In our stress tests (100 keywords, 20 at a time) 200 of 200 reports came back complete.
  • 🔁 Monitoring that doesn't charge you for noise. Scheduled runs mark keywords UNCHANGED (free) unless something really changed, such as a newly completed week or a new Breakout query.
  • 🐍 A pytrends replacement that handles the 429 Too Many Requests errors for you. Most pytrends methods have a direct equivalent (see below).
  • 🤖 Ready for AI agents: compact output, an MCP setup, and a clear output schema.

Export to JSON, CSV or Excel, call it from the API, or connect it to Make, Zapier, n8n, Google Sheets or an AI agent.

What you get in the example comparison

The default input compares ChatGPT vs Gemini vs Claude in the US over the past 12 months. A real run on 20 Oct 2026 returned:

KeywordShare within this comparisonAverage interestFirst vs last quarterStrongest state
ChatGPT62%75 / 100stable (−10%)Mississippi
Gemini22%27 / 100rising (+31%)California
Claude16%19 / 100rising (+207%)District of Columbia

Shares use the sum of Google's average indices for these selected terms, not AI usage or market share. Change percentages compare the first and last quarters of complete observations in the range, not year-over-year growth.

Top rising searches for Claude included the Breakout queries "claude cowork" and "claude opus 5.5".

The prefilled demo compares ChatGPT, Gemini and Claude in the US with weekly timelines, regional interest and related queries. Click Start to try it.

  • 📈 Interest over time: the same 0–100 timeline you see on trends.google.com, from the past hour to 2004–present, or any custom date range.
  • 🆚 Compare keywords on one scale: up to 5 keywords per group, like the Trends compare view. Longer lists are split into groups of 5 automatically. You get the winner, share of search and ranking.
  • 🗺️ Google Trends by region: countries, US states, metro areas (DMA) or cities with coordinates, optionally including low-volume regions.
  • 🔍 Related and rising queries: top and rising searches, with Breakout queries flagged.
  • 🔥 Daily trending searches for any country, with approximate traffic ("200K+"), news articles and images.
  • 🌍 Many countries in one run: every keyword in US, GB, IN and more.
  • 🧭 Compare one keyword across countries or periods, e.g. 2025 vs 2026.
  • 📺 YouTube, Google Shopping, News and Image search trends, plus 25 categories.
  • 🧮 Ready-made insights for every keyword: average, peak and peak date, trend direction, change %, year-over-year change, volatility, spikes, top regions and a one-sentence summary.
  • 🔗 Paste Google Trends URLs or import keywords from a Google Sheet or CSV.
  • 📄 Nested or flat output: flat gives one row per data point, perfect for Excel and BI tools. Compact output is available for AI agents.

How it compares

This ActorTypical Google Trends scrapers
Keywords per runAny number, in parallelVaries; some take one keyword per run
ChargingComplete reports or daily baseline/windows; startup fee also appliesVaries by Actor
Compare on one scaleUp to 5 per group, automatic grouping, optional chaining for moreOften up to 5, grouped by hand
RegionsCountries, states, metros, cities with coordinatesOften one level
Trending searchesDaily RSS with news, plus the full Trending Now feedOften one of the two
MonitoringBuilt in; unchanged keywords have no result event chargeImplementation dependent
InsightsAverage, peak, direction, change %, YoY, spikes, breakouts, summary sentenceRaw numbers
Related topicsNot offered: Google returns them empty to automated clientsOften listed; frequently empty in practice
  1. Choose What to scrape: keyword trends, compare keywords, daily trending searches, or topic suggestions.
  2. Add your keywords (one per line). Topic IDs like /m/0k8z work too.
  3. Optionally set a country or region, a time range and which data to collect.
  4. Click Start, then download the results as JSON, CSV or Excel, or fetch them through the API.

Leave the advanced settings alone unless you need them. The defaults (residential proxies, a fresh IP for every request, automatic retries) are tuned for reliability.

You pay per result, and only for complete results: every panel you asked for has to be there. Platform usage and residential proxies are included in the price. There is also an Actor start fee of $0.00005 per GB, with a one-event minimum: $0.00005 per run at 512 MB, including runs with no charged result. The table lists Free-tier event prices checked on 21 Oct 2026.

ResultPriceExample
Keyword report (timeline + regions + related queries)$2.00 per 1,000100 keywords ≈ $0.20
Comparison group (up to 5 keywords on one scale)$5.00 per 1,000100 groups = 500 keywords ≈ $0.50
Trending search (one trend with its news)$1.00 per 1,000A country's daily list (~10 trends) ≈ $0.01
Topic suggestions (per keyword)$1.50 per 1,000100 keywords ≈ $0.15

Higher Apify plans get automatic discounts. Result exemptions do not waive the start fee. Optional daily estimates charge for the complete baseline and each usable fitted window; a missing daily window does not make other complete units free. No result event charge: keywords Google blocked after all retries, keywords with no data, reports missing any requested panel (delivered free, marked partial), invalid input, the extra rows in flat output, the end-of-run summary, and raw explore widgets. Max results limits report tasks, not dollars. Use the platform maximum cost per run for an event-spending cap.

Input example

{
"mode": "compare",
"searchTerms": ["ChatGPT", "Gemini", "Claude"],
"geo": "US",
"timeRange": "today 12-m",
"sections": ["interestOverTime", "interestByRegion", "relatedQueries"]
}

More examples:

  • Trends by US metro area: "regionResolution": "DMA"
  • YouTube trends: "property": "youtube"
  • Daily trending searches in India and Brazil: "mode": "trending", "geos": ["IN", "BR"]
  • The same keyword in several countries: "geos": ["US", "GB", "DE"]
  • This year vs last year: "comparePeriods": true, "periods": ["2025-01-01 2025-06-30", "2026-01-01 2026-06-30"]
  • Switch an existing pipeline: "outputFormat": "apify-compatible"
  • Full Trending Now: "mode": "trending", "geo": "US", "trendingSource": "full", "trendingHours": 24, "activeOnly": true, "maxTrendsPerCountry": 50
  • Watch for changes: "monitorMode": true, "monitorName": "weekly-brands", "onlyChanges": true
  • Compare more than five on an estimated common scale: "mode": "compare", "chainComparisons": true, "anchorTerm": "coffee"
  • Several region panels: "regionLevels": ["REGION", "CITY"] (additional requests)
  • Different settings per query: "advancedQueries": [{"terms": ["coffee", "tea"], "geo": "GB", "timeRange": "today 3-m"}]
  • Seasonal content planning: "timeRange": "today 5-y", "includeSeasonality": true, "seasonalityLeadDays": 30
  • A recent result when Google blocks: "cachedResultOnRefusal": true, "cacheName": "brand-history"
  • Reduce sampling noise: "sampleCount": 3, "sampleAggregation": "mean" (up to three times the normal requests and report/group charges)
  • Daily Sheets digest input: "mode": "trending", "geo": "US", "monitorMode": true, "monitorName": "daily-digest", "onlyNew": true, "maxItems": 20

Output example

One keyword from the demo comparison above (real data, arrays shortened):

{
"searchTerm": "Claude",
"geo": "US",
"timeRange": "today 12-m",
"averageInterest": 18.865,
"peakInterest": 34,
"peakDate": "2026-04-12T00:00:00+00:00",
"trendDirection": "rising",
"changePercent": 207.23,
"topRegion": "District of Columbia",
"topRegionCode": "US-DC",
"summaryText": "Interest is rising; complete-period average 18.9/100, peak 34 on 2026-04-12.",
"shareOfSearchPct": 15.702,
"rankInComparison": 3,
"interestOverTime": [
{ "date": "2026-10-18T00:00:00+00:00", "formattedAxisTime": "Oct 18, 2026", "value": 22, "isPartial": true }
],
"interestByRegion": [
{ "geoCode": "US-DC", "geoName": "District of Columbia", "value": 23, "formattedValue": "23%" }
],
"relatedQueries": {
"top": [
{ "query": "ai claude", "value": 100 },
{ "query": "claude code", "value": 77 }
],
"rising": [
{ "query": "claude cowork", "formattedValue": "Breakout", "isBreakout": true },
{ "query": "claude opus 5.5", "formattedValue": "Breakout", "isBreakout": true }
]
},
"exploreUrl": "https://trends.google.com/trends/explore?q=ChatGPT%2CGemini%2CClaude&geo=US&date=today+12-m",
"status": "ok",
"scrapedAt": "2026-10-20T18:34:26+00:00"
}

In a comparison, region values are each keyword's share of searches in that region (here, Claude's share in DC).

Comparison rows also include winner, ranking, shareOfSearchPct and a wide timeline with one column per keyword. Every run ends with a free _summary row listing what was delivered, what failed and why, and how many results were charged. Use the Overview, Timeline, Regions, Related, Comparison, Trending, Status / errors, Flat and Summary views, plus Topic suggestions, Daily estimates and Related top. Views project fields; they do not filter row types. Open the ERRORS or SUMMARY key-value record for errors only or one summary. Compact output removes panel arrays: use Overview or disable compact output for panel views. For flat output use Flat and select row type (timeline, region, related); daily estimates have series:daily_estimate. Panel projections can also contain other row types. Comparison members are informational; the envelope carries the group charge.

Google Trends values are relative. Each keyword on its own is scaled 0–100 against its own peak, so separate reports can't be compared with each other. Choose Compare keywords on one scale to put up to 5 keywords on the same scale, exactly like the compare view on trends.google.com. Lists longer than 5 are split into groups of 5. Each group has its own scale, and one group costs one result.

Turn on chainComparisons to link comparison groups through an anchor keyword. The extra free _chainedComparison row contains normalizedValue on an estimated common scale and lowPrecision warnings. Each underlying group is charged as a normal comparison: 11 keywords need three groups. For very small terms, choose bridgeTerm and bridgeTerms with bridgeRemeasurement:true to add closer comparisons. Integer rounding and Google sampling still limit precision; the scale applies within this run.

Choose Daily trending searches by country and enter one or more country codes. Each trend comes with approximate traffic (for example 200K+), publication time, an image and the related news articles. This uses Google's public trending feed: it is current and country-level only, with no history.

Choose trendingSource:"full" in trending mode for the full current feed. Each search includes its volume bucket lower bound, reported growth percentage, start and end times, active status, categories and breakdown searches. Choose a 4, 24, 48 or 168 hour window; filter active or ended trends, category IDs or minimum volume; sort by volume, newest or name. trendingLanguage sets the feed language. RSS remains the default when you want a short list with news and images.

Google only returns daily values for ranges up to about 9 months; longer ranges come back weekly or monthly. Enable Daily estimates over long ranges (dailyResolution). It fetches a normal report plus N overlapping 240-day windows with 21 shared days, then fits daily values to Google's weekly or monthly curve. A year needs 2 windows plus the baseline; five years needs about 9; 2004–present needs about 38, so up to 39 keyword-report charges per keyword (about $0.08 at the standard price). Timeline-only takes at least 3(N+1) HTTP requests and up to N+1 normal keyword-report charges. Daily windows contain more points, so data transfer need not scale like request count. Each delivered window is charged; failed windows are free and don't block the rest. A window where the keyword had no interest yet is returned as zeros. The full event budget is reserved before work. Use separate keyword mode with a timeline; it cannot be combined with comparison, sampling, monitoring or caching. The dailySeries estimates can exceed 100 on the coarse reference scale. Missing days are not filled in.

Turn on Remember results between runs (monitorMode), give the monitor a name, and schedule the Actor. Each run compares every keyword with what it reported last time:

  • NEW or UPDATED keywords are charged as normal reports.
  • UNCHANGED keywords are free.

Google Trends numbers wobble a little from request to request, because Google samples searches. Those wobbles are ignored, so you don't pay for noise. In our tests, repeat runs minutes apart came back 97–100% UNCHANGED.

What counts as a change:

  • New data. A newly completed week (or day, or hour, depending on the time range). This is the usual reason a scheduled run reports UPDATED; for example, a daily run on a 12-month range updates once a week.
  • A real jump. A value moving more than the tolerance (normal: the larger of 12 points or 15%), or a clear change in the top regions.
  • A new rising or Breakout query. It's confirmed on a second check at least an hour later before it counts, because Google's rising list reshuffles between requests. Expect new-query alerts one schedule interval later than they first appear.

Sensitivity:

  • normal (default) suits most monitors.
  • low ignores more.
  • high reports smaller moves, but it will also report ordinary sampling noise, so expect more UPDATED (charged) results.

Every changed row lists changedFields and a plain reason in changeReasons (for example "new complete period"), plus the previous values.

Keyword reports are always compared with their last saved result, however long ago it was. Trending searches not seen again within the retention window (default 7 days) expire with a free EXPIRED row. Use a separate monitor name per task or schedule, and avoid overlapping runs of the same monitor.

Use regionLevels for several regional panels in one report; each additional level adds a widget request. advancedQueries lets each group have its own country, dates, category or search type. For content planning, includeSeasonality adds a monthly profile and heuristic peak-month dates when at least two years of data are available. Shorter histories return null with an explanation.

Can I get a saved result if Google refuses a request?

Enable cachedResultOnRefusal and choose a cacheName. Complete successful reports are saved for later runs. If Google then blocks a request, an eligible recent snapshot is returned free with freshness:"CACHED" and cacheAgeSeconds. Its original scrape time is preserved. The maximum is 24 hours, with tighter limits for short charts.

Set sampleCount to 2–5 to repeat the report through fresh rotating residential connections. Choose sampleAggregation:"mean" or "consensus". Numeric points include valueStdError, sampleCount and sampleAgreement; related lists use the most frequent returned panel. N samples can cost N times the normal report or comparison price, with failed samples free. All samples must fit your maximum charge before work starts. Pool rotation cannot guarantee that every exit IP is unique, and standard error does not capture Google's rounding or systematic bias.

Use a scheduled run with a named monitor to send new trends or changed keyword reports into Google Sheets, Slack or a database:

  1. Create a task with monitorMode on and onlyChanges on, and schedule it (for example daily at 9:00).
  2. Add an integration (Google Sheets, Slack, webhook to n8n or Make) that fires when the run succeeds.
  3. In the workflow, skip rows whose type is _summary or status, and upsert the rest by their stable id.

Need a ready-made n8n or Make template? Ask on the Issues tab and we'll share one.

  • SEO and content: find rising and Breakout queries before competitors, and plan content around seasonal peaks.
  • Market and product research: compare brands, products or features by country, state or city.
  • E-commerce: track Google Shopping demand and spot rising product searches.
  • Marketing: choose regions and timing for campaigns, and measure launch buzz.
  • Data and AI pipelines: feed clean, structured trend data into dashboards, notebooks, LLM agents or alerts.

A pytrends alternative that handles rate limits

pytrends, the popular unofficial Python library, was archived in 2025, and it regularly fails with 429 Too Many Requests. This Actor uses the same Google Trends data but manages the proxies, cookies and retries for you.

pytrendsThis Actor
build_payload(kw_list, geo, timeframe, cat, gprop)searchTerms, geo, timeRange, category, property
interest_over_time()interestOverTime
interest_by_region(resolution, inc_low_vol)interestByRegion, regionResolution, includeLowVolumeRegions
related_queries()relatedQueries.top / relatedQueries.rising
suggestions()mode Topic suggestions
trending_searches()mode Daily trending searches
related_topics()Not offered by this Actor

Inputs from apify/google-trends-scraper work here: searchTerms, isMultiple, timeRange, geo, viewedFrom, startUrls, spreadsheetId, category, customTimeRange and maxItems. With isMultiple:true, a comma-separated entry such as "coffee,tea" is one comparison. Numeric category strings are accepted.

Set outputFormat:"apify-compatible" for interestOverTime_timelineData, interestOverTime_averages, interestBySubregion, interestByCity, interestByMetro, interestBy and relatedQueries_top / relatedQueries_rising. The usual status and charge fields stay available. Related topics are empty with an explanation; this scraper does not supply them. Extra region levels require the optional region-level setting. Check your downstream field mapping before switching a production workflow.

from apify_client import ApifyClient
import os
from decimal import Decimal
# Install apify-client>=3,<4; set APIFY_TOKEN in your environment.
client = ApifyClient(os.environ["APIFY_TOKEN"])
run = client.actor("suslabs/google-trends-scraper").call(run_input={
"mode": "compare",
"searchTerms": ["coffee", "tea", "matcha"],
"geo": "US",
}, memory_mbytes=512, max_total_charge_usd=Decimal("0.05"))
if run is None or run.status != "SUCCEEDED":
raise RuntimeError("Run did not succeed; inspect status and log.")
for item in client.dataset(run.default_dataset_id).iterate_items():
if item.get("type") not in {"_summary", "status", "checkpoint"}:
print(item)
curl -X POST "https://api.apify.com/v2/acts/suslabs~google-trends-scraper/run-sync-get-dataset-items?memory=512&maxTotalChargeUsd=0.05" \
-H "Authorization: Bearer $APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{"searchTerms": ["coffee"], "geo": "US"}'

For big jobs, start the run asynchronously and read the dataset when it finishes. Results can go straight to Google Sheets, Slack, Make, Zapier, n8n, Airbyte or a data warehouse through Apify integrations.

Use with AI agents (MCP)

Add this Actor to Claude, Cursor or any MCP client through the Apify MCP server:

{ "mcpServers": { "apify": { "url": "https://mcp.apify.com?tools=suslabs/google-trends-scraper" } } }

The hosted URL uses Streamable HTTP and requires Apify authentication (OAuth where supported, or a token in the client's secret configuration). A URL alone is not an authenticated connection. The tool name verified with tools/list is suslabs--google-trends-scraper; running it can incur charges.

Tip for agents: turn on Compact output to get just the insights (average, peak, direction, top regions, Breakout queries) instead of long arrays.

FAQ

Google announced a Google Trends API alpha in July 2025. Check its current availability and eligibility before choosing an integration. This Actor gives you the data available on trends.google.com through a simple API you can use today, including Trending Now searches.

Why are values 0–100 instead of search volumes?

That's how Google Trends works. Values are relative interest: 100 is the peak for the chosen keyword, place and time, and 50 is half as popular. Google doesn't publish absolute search volumes in Trends. The 200K+ traffic on trending searches is Google's rough bucket.

Do I pay for keywords that fail?

No. If Google blocks a keyword after every retry, or returns no data, you get a free row explaining why, and nothing is charged.

What if one panel is missing?

You still get it, free. If Google refuses one panel even after retries, the report is delivered with the panels that worked, marked partial, with the missing panels listed in missingDataTypes, and not charged. A comparison is free if any panel of any keyword is missing. Partial reports are rare: a refused panel is retried on its own over fresh connections before the report gives up.

Related topics are unavailable in this Actor; automated sessions returned empty lists in our tests. Related queries (top and rising) are supported.

Why can numbers differ slightly between runs?

Google Trends is based on a sample of searches, so repeated requests can differ by a few points, especially for small keywords. For a fair comparison, compare keywords in the same group.

How accurate is it?

In a short US study of 10 keywords across three ranges with five requested samples per group, 28/30 group samples succeeded. Complete-period averages had a median sample standard deviation of 0–0.021 index points across the ranges; individual points varied by up to 3.29 points. These are measurements of short-term repeatability, not an accuracy guarantee or absolute search volume. Google can return the same cached sample repeatedly. Compare keywords together and use optional sampling to inspect variation.

This Actor only collects public, aggregated, anonymous trend data. No personal data is involved. You're responsible for how you use the results. This is not legal advice.

Can I run it on a schedule?

Yes. Use Apify Schedules to run it daily or weekly, and connect the results to Google Sheets, Slack or email through integrations.

How fast is it?

In our tests, 20 keywords took 4–70 seconds: seconds when Google answers the direct connection, around a minute when it is rate-limiting and residential retries kick in. Larger lists run several keywords in parallel.

How do you keep costs low?

Each report first tries a direct connection (no proxy cost) and switches to rotating residential proxies only if Google refuses. If Google keeps refusing, the run goes straight to residential for the rest of the keywords. You don't need to configure anything; the price you pay is the same either way.

What granularity will I get?

Longer ranges return weekly or monthly points. For daily data over a long range, see Daily Google Trends data for long ranges above.

Time rangeData points
Past hour / 4 hoursMinutes
Past day~8-minute buckets
Past 7 daysHours
Past 30 / 90 daysDays
Past 12 months / 5 yearsWeeks
2004 – presentMonths

Which category IDs can I use?

Pick a category from the Category dropdown, or enter any Google Trends category ID (including sub-categories) in Category ID. Main IDs: 0 All · 3 Arts & Entertainment · 5 Computers & Electronics · 7 Finance · 11 Home & Garden · 12 Business & Industrial · 16 News · 18 Shopping · 20 Sports · 45 Health · 47 Autos & Vehicles · 67 Travel · 71 Food & Drink · 174 Games · 958 Jobs & Education.

Limitations

  • Values are relative (0–100), not absolute search volumes.
  • No related topics (see FAQ).
  • Ordinary comparison groups and independent runs have separate scales; anchor chaining adds an estimate within one run.
  • RSS is current and country-level only. Full Trending Now also supports some subregions, including US-CA; availability varies. Neither feed provides historical backfill.
  • Very small keywords may have no data in some places or periods. You get a free no_data row for those.

Support and feedback

Found a problem or need a feature? Open an issue on the Issues tab with your run ID. We usually reply within a day or two. If this Actor saves you time, a review helps other people find it.

This is an independent tool by SusLabs, not affiliated with or endorsed by Google. Google Trends is a trademark of Google LLC. Technical details: output fields, statistics definitions and the billing rules are documented in the input field descriptions and in the free _summary row of every run.