Google Trends Scraper & API avatar

Google Trends Scraper & API

Pricing

from $0.60 / 1,000 keyword results

Go to Apify Store
Google Trends Scraper & API

Google Trends Scraper & API

Google Trends interest over time, by region, related queries and topics as JSON, CSV or Excel. Pay only for keywords that return data. No browser, never hangs, unlimited keywords on one scale, daily data over years, works with AI agents (MCP).

Pricing

from $0.60 / 1,000 keyword results

Rating

0.0

(0)

Developer

Abhishek Anand

Abhishek Anand

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a day ago

Last modified

Share

Interest over time, interest by region, related queries and related topics from Google Trends, for one keyword or ten thousand. $1.50 per 1,000 keywords (down to $0.60 on paid Apify plans), compute included, and keywords that fail are free.

I built this after watching browser-based Trends scrapers run for twenty minutes and come back empty. This one talks to the same data endpoints the Trends website uses, so a keyword with all four sections usually takes 2 to 5 seconds and the run never hangs.

  • Pay for results, not attempts. Every keyword gets a status row (ok, partial or failed). Only ok keywords are charged.
  • Compare more than 5 keywords on one scale. Google caps comparisons at 5. Normalize mode puts any number of keywords on a single 0–100 scale.
  • Several countries in one run. List them in geos and every keyword runs in each one.
  • Daily data over years. Google switches to weekly data after about 9 months. Daily mode stitches overlapping windows into one daily series.
  • Bring your existing input. It accepts the input format of the official Apify Google Trends scraper, Trends URLs, and plain English ("United Kingdom", "past 90 days").
  • Works from AI agents like Claude, ChatGPT and Cursor through Apify's MCP server.

How it compares

Typical browser-based Trends scraperThis actor
How it gets dataLoads trends.google.com in a headless browserCalls Trends' data endpoints directly
Typical time per keyword30 s to several minutes, sometimes never2–5 s
Memory per run4 GB256 MB
Charged when a keyword failsOftenNever
Keywords on one comparable scale5Unlimited (normalize mode)
Countries per run1Up to 50
Daily data for ranges over 9 monthsNoYes (daily mode)
Compute costAdded on topIncluded in the price

What it costs

You runYou pay
1 keyword, all sections$0.0015, plus $0.001 if related topics come back
100 keywords$0.15
1,000 keywords$1.50
10,000 keywords$15
10 keywords in 5 countries$0.075 (each keyword × country counts once)
A keyword that fails$0

A few details, so nothing surprises you:

  • Paid Apify plans pay less: $1.20 per 1,000 keywords on Bronze, $0.90 on Silver, and $0.60 on Gold, Platinum and Diamond. The table above uses the Free plan price.
  • Related topics cost an extra $1 per 1,000 keywords, and only when Google actually returned topics. Fetching them needs a heavier request. If you don't need them, untick "Related topics" and you pay only the keyword price.
  • Rows output (one row per date or region, for spreadsheets) adds $0.01 per 1,000 rows. The default nested output has no row charge.
  • Max cost per run. Set one and the actor only starts keywords that fit inside it, then stops cleanly and tells you how many it skipped.
  • Apify adds a tiny standard start fee, well under $0.001 per run.

Quick start

The simplest input:

{ "searchTerms": ["web scraping", "ai agents"], "geo": "US", "timeRange": "today 12-m" }

Compare streaming services on one scale (add as many as you like):

{ "searchTerms": ["netflix", "hulu", "disney plus", "max", "peacock", "paramount plus"], "mode": "normalize", "geo": "US", "sections": ["timeline"] }

The same keywords in three markets:

{ "searchTerms": ["electric bike", "cargo bike"], "geos": ["US", "GB", "Germany"], "timeRange": "today 12-m" }

Three years of daily data:

{ "searchTerms": ["black friday"], "customTimeRange": "2023-09-01 2026-09-30", "dailyResolution": true, "geo": "US" }

Paste Google Trends URLs:

{ "startUrls": [{ "url": "https://trends.google.com/trends/explore?q=tea,coffee&geo=GB&date=today%203-m" }] }

Plain English works too: "geo": "Germany", "timeRange": "past 7 days", "sections": ["timeline", "region"].

What you get

SectionContents
Interest over timeA 0–100 value per hour, day, week or month
Interest by regionCountries, states, US metro areas (DMA) or cities
Related queriesTop and rising, including Breakout terms
Related topicsTop and rising Knowledge Graph topics
Statusok, partial or failed for every keyword, with the reason

Sample item (default nested output)

Real output, trimmed to one entry per list:

{
"keyword": "pixel phone", "geo": "GB", "timeRange": "today 3-m", "status": "ok", "resolution": "DAY",
"interestOverTime_averages": [58.66],
"interestOverTime_timelineData": [{ "time": "1784332800", "date": "2026-07-18", "value": [53], "formattedValue": ["53"], "hasData": [true] }],
"interestBy": [{ "geoCode": "GB-ENG", "geoName": "England", "value": [100], "formattedValue": ["100"], "hasData": [true] }],
"relatedQueries_top": [{ "query": "google phone", "value": 100, "formattedValue": "100", "link": "https://trends.google.com/trends/explore?q=google+phone&date=today+3-m&geo=GB" }],
"relatedQueries_rising": [{ "query": "google pixel phone price increase", "value": 12850, "formattedValue": "Breakout", "link": "https://trends.google.com/trends/explore?q=google+pixel+phone+price+increase&date=today+3-m&geo=GB" }],
"relatedTopics_top": [], "relatedTopics_rising": [],
"errors": [], "notes": [], "durationMs": 3032
}

A Breakout query shows up as "formattedValue": "Breakout". Rows output adds an isBreakout column and an isPartial column, which flags the current, still-incomplete day or week.

Pick rows output if you're going straight into Excel, Google Sheets or a BI tool. You get one row per date, region or related item, with a type column to filter on.

Every run also saves a SUMMARY record with the success rate, requests, retries, proxy used and keywords charged.

Measured, not promised

Test (Oct 2026, on Apify)Result
500 keywords, all sections500 of 500 returned data, about 0.6–0.9 s per keyword with 10 in parallel
Google throttling during that run35–39 rate limits out of about 3,200 requests, all retried automatically. It switched to residential proxies on its own when needed
MemoryPeak about 180 MB, even for 5 years of daily data
Platform restartsFinished keywords are skipped on restart, unfinished ones resume, nothing is charged twice

Switching from the official Apify scraper

Paste your existing input. These fields work the same: searchTerms, isMultiple, timeRange, customTimeRange, geo, category, startUrls, maxItems, viewedFrom, maxConcurrency, maxRequestRetries. skipDebugScreen and pageLoadTimeoutSecs are ignored because there's no browser. spreadsheetId isn't supported yet, so paste the terms instead.

Three output differences to check before you switch a pipeline:

  • Region data is always in interestBy (the official scraper splits it into interestBySubregion, interestByCity or interestByMetro).
  • Timeline points carry date (YYYY-MM-DD or an ISO time) instead of formattedTime.
  • Related-item link values are full URLs.

Use it from code, AI agents and other tools

API. Start a run and get the results in one call:

curl -X POST "https://api.apify.com/v2/acts/curiousanand~google-trends-scraper/run-sync-get-dataset-items?token=$APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{"searchTerms": ["tea", "coffee"], "geo": "GB", "timeRange": "past 90 days"}'

Python:

from apify_client import ApifyClient
client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("curiousanand/google-trends-scraper").call(run_input={"searchTerms": ["tea", "coffee"], "geo": "GB"})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item["keyword"], item["interestOverTime_averages"])

Claude, ChatGPT, Cursor and other agents (MCP). Add Apify's MCP server with just this tool:

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

Then ask something like "Compare interest in Notion, Obsidian and Evernote in Germany over the past 5 years."

No code. Apify's integrations can send results to Google Sheets, Slack, Zapier, Make, n8n or a webhook when a run finishes. Add a Schedule for weekly tracking.

Want what's trending right now instead? Google Trends Trending Now Scraper with News returns the full Trending Now list for any country, with the news behind each trend.

FAQ

Is there an official Google Trends API? Google has an alpha API with limited access. Most people use the Trends website or a scraper like this one, which reads the same data the website shows.

How do I export Google Trends data to CSV or Excel? Run the actor, open the dataset and click Export. Choose rows output for one row per date or region, which opens cleanly in Excel and Google Sheets.

Why are related topics sometimes empty? Since September 2026 Google withholds related topics from automated requests. The actor fetches them through Google's embed widget instead, which has a per-IP quota. In my tests, residential proxies got topics for 10 of 10 keywords and the default datacenter proxies got them for 0 of 30. When topics are missing, the keyword's notes say why and the topics charge isn't applied. If topics matter to you, set the proxy to Residential.

Do I need a proxy or a Google account? You don't need a Google account. On Apify the default proxy is included in the price, and the actor switches to residential proxies by itself if Google starts blocking. If you run it somewhere without a proxy, Google will rate-limit you after a handful of keywords.

Can I compare countries? Yes. Put them in geos and each keyword runs in every country, with country in the geo field. Each country has its own 0–100 scale, as on the Trends website, so compare shapes and timing across countries rather than raw numbers. In normalize mode every country gets its own anchor unless you set anchorTerm.

How does normalize mode work? Your keywords go to Google in batches of 4, plus one anchor keyword that appears in every batch. The anchor's value in each batch puts all batches on one scale. Google rounds to whole numbers, so a keyword about 50 times smaller than the biggest one can't be measured precisely; those rows are marked precisionWarning: low-precision rather than showing false precision. Pick a medium-popular anchorTerm for the best results.

Is the data the same as on the Trends website? Yes, for the same query on the same day. Google samples its data, so values can move a little from one day to the next.

Is scraping Google Trends legal? The actor collects public, aggregated, anonymized data that anyone can see on trends.google.com. It doesn't touch personal data or log in anywhere. How you use the results is up to you.

Something isn't working? Open an issue on the Issues tab with your run link and I'll take a look.