Google Trends Scraper | 4 Report Types, No Browser, No Key
Pricing
from $2.05 / 1,000 trend reports
Google Trends Scraper | 4 Report Types, No Browser, No Key
Scrape Google Trends: interest over time, related & rising queries, related topics, geo breakdowns. Degraded since 2026-07-30 by Google-side rate-limiting, see README — zero charge on failure either way. Multi keyword compare, all timeframes.
Pricing
from $2.05 / 1,000 trend reports
Rating
0.0
(0)
Developer
The Mine Works
Maintained by CommunityActor stats
0
Bookmarked
5
Total users
2
Monthly active users
an hour ago
Last modified
Categories
Share
From The Mine Works, makers of Threads Scraper and B2B Leads Finder, with over 140,000 runs across 170+ public actors.
Give it keywords, a country and a time range, and get Google Trends data back as JSON: interest over time, interest by region and related queries (top and rising), one record per keyword. It talks to the same endpoints the Google Trends website uses, over plain HTTP. No browser, no API key, no pytrends to maintain.
Why choose this actor?
- A full keyword report in seconds. In our test of the live build on 2 October, three keywords with every block switched on returned 3 reports in 29 seconds: 53 weekly interest points, all 51 US states and 45 to 50 related queries per keyword. Our daily check of one keyword finishes in about 5 seconds.
- One price per keyword, however many blocks you turn on. $2.50 per 1,000 keyword reports on the Free plan, down to $2.05 on Gold. There is no start fee, so a one keyword run costs a quarter of a cent.
- Never charged for empty results. A keyword Google returns no data for, a rate limited request and the run's report rows cost nothing. Our daily scheduled check returned data on 37 of 40 runs between 31 August and 2 October; the other 3 got no data and were not billed.
Part of The Mine Works Marketing, SEO and reviews family: Facebook Ad Library Scraper, Google Ads Transparency Scraper, Similarweb Scraper, Google News Scraper, Trustpilot Reviews Scraper, Semrush Scraper.
Try it in one minute
Paste this into the JSON tab of the input page and press Start:
{"keywords": ["electric vehicles", "heat pump"],"timeframe": "today 12-m","geo": "US","includeInterestOverTime": true,"includeRelatedQueries": true}
You get two records, one per keyword, each with a year of weekly interest values and the top and rising related searches, in well under a minute.
Give the search terms in keywords, one per entry, exactly as you would type them into Google Trends. Each keyword is queried on its own (this actor does not run side by side comparisons). Choose the period in timeframe, the country or region in geo (US, GB, IN, a Google sub-region such as US-CA, or an empty string for worldwide), and switch the report blocks on or off with the four include switches.
Apify's free plan includes $5 of credit every month, which covers about 2,000 keyword reports at this actor's Free plan price ($0.0025 a report, no start fee).
Copy to your AI assistant
themineworks/google-trends-pro on Apify. Fetches Google Trends data for each keyword and returns one record per keyword with interest over time, interest by region and top and rising related queries. Call ApifyClient("TOKEN").actor("themineworks/google-trends-pro").call(run_input={...}), then client.dataset(run["defaultDatasetId"]).list_items().items. Required: keywords (string[]). Optional: timeframe (one of "now 1-H", "now 4-H", "now 1-d", "now 7-d", "today 1-m", "today 3-m", "today 12-m", "today 5-y", "all"; default "today 1-m"), geo (ISO country code or Google sub-region such as "US-CA", default "US", "" = worldwide), includeInterestOverTime (default true), includeRelatedQueries (default false), includeInterestByRegion (default false), includeRelatedTopics (default false; Google returned it empty in our October tests), proxyConfiguration (optional). Values are Google's relative 0 to 100 index, not search volumes. Rows with _type "error", "summary" or "info" are never billed. Full spec: GET https://api.apify.com/v2/acts/themineworks~google-trends-pro/builds/default (Bearer TOKEN), which returns inputSchema and readme. Token: https://console.apify.com/account/integrations
Key features
- Interest over time. A dated series of Google's 0 to 100 interest index: finer points for the hour, day and week windows, daily points for one or three months (93 for
today 3-m), and weekly points for a year (53) or five years (262). - Interest by region. Countries for a worldwide run (250 rows), states for a country (51 for the US), and metro areas for a sub-region (14 California metro areas for
US-CA). - Related queries, top and rising. Up to 25 of each per keyword, with Google's own score (
100for the top query,+2,150%style growth for rising ones) and a link to open each one in Google Trends. - Nine timeframes from the past hour to all time (2004 onwards):
now 1-H,now 4-H,now 1-d,now 7-d,today 1-m,today 3-m,today 12-m,today 5-yandall. - No browser, no key. The actor asks Google Trends' explore endpoint for its widget tokens and hands them straight back to the data endpoints, the same calls the website makes. Keywords are spaced 4 to 8 seconds apart to stay under Google's rate limit, each call is retried once, and the run stops after 5 failed keywords in a row.
- Related topics, when Google sends them. The
includeRelatedTopicsswitch asks for Google's related topics too. In every test we ran on 2 October, even on very popular terms, Google answered with an empty list, so treat this block as best effort: when it is empty it is left out of the record, and you are not charged for an empty keyword.
How to use it
Basic: one keyword over the past year
{"keywords": ["padel"],"timeframe": "today 12-m","geo": "US"}
Interest over time is on by default, so this returns one record with 53 weekly values.
Several keywords at once
{"keywords": ["electric vehicles", "heat pump", "solar panels", "home battery"],"timeframe": "today 5-y","geo": "GB","includeInterestOverTime": true}
Each keyword is a separate query and a separate record. Values are indexed within each keyword (each keyword's own peak is 100), so compare the shapes of the curves, not the raw numbers across keywords.
Content and SEO research: rising related searches
{"keywords": ["ai agents", "mcp server"],"timeframe": "today 3-m","geo": "US","includeInterestOverTime": false,"includeRelatedQueries": true}
related_queries.rising lists the searches growing fastest around your keyword, with growth such as +2,150% in formatted_value (Google shows Breakout for very large jumps). These are topics people search for that have little written about them yet. Schedule it weekly to catch new ones.
Where to launch or spend: interest by region
{"keywords": ["lab grown diamonds"],"timeframe": "today 12-m","geo": "","includeInterestOverTime": false,"includeInterestByRegion": true}
With an empty geo you get every country Google lists; with US you get states; with a sub-region such as US-CA you get its metro areas. Sort interest_by_region by value yourself, because Google's order is not always by score. A 0 means too little search volume for Google to show, not literally zero searches.
Daily demand tracking for a product category
{"keywords": ["air fryer", "standing desk"],"timeframe": "now 7-d","geo": "US","includeInterestOverTime": true,"includeRelatedQueries": true}
Save it as a task and schedule it daily (for example 0 9 * * *). Each run returns the last seven days, so a spike shows up the next morning, together with the related searches driving it. The actor keeps no memory between runs; join runs on keyword and the dates inside interest_over_time.
Input parameters
| Parameter | Type | Default | What it does |
|---|---|---|---|
keywords | array of strings | required, at least one (form prefill: iphone) | Search terms, one per entry. Each is queried separately and gives one record. |
timeframe | string | today 1-m | One of now 1-H (past hour), now 4-H, now 1-d, now 7-d, today 1-m (past month), today 3-m, today 12-m, today 5-y or all (since 2004). |
geo | string | US | Two letter country code such as US, GB or IN, a Google sub-region code such as US-CA, or an empty string for worldwide. |
includeInterestOverTime | boolean | true | Adds interest_over_time. |
includeRelatedQueries | boolean | false | Adds related_queries with top and rising lists. |
includeRelatedTopics | boolean | false | Asks for a related topics block. Google returned it empty in all our October tests (see above). |
includeInterestByRegion | boolean | false | Adds interest_by_region. |
proxyConfiguration | object | none (form prefill: Apify residential proxy) | Optional. When set, every request goes through a new IP from this proxy. When left out, requests go directly from the Apify server, which is how our daily checks run. |
"Form prefill" values fill the Console form for you but are not defaults: a run started from the Console form uses the residential proxy prefill, while an API call that leaves proxyConfiguration out uses no proxy. Proxy costs are covered by the report price either way.
Run options. The default memory is 512 MB and the default timeout is 600 seconds. Each keyword takes a few seconds plus the 4 to 8 second gap before the next one, so about 50 keywords fit in the default timeout. For more, raise the timeout or split the list into several runs.
What data do you get?
One record per keyword. Blocks you did not switch on, and blocks Google returned empty, are left out of the record rather than sent as null.
The query: keyword, geo (left out for worldwide runs), timeframe, scraped_at.
interest_over_time: a list of points, each with date (ISO timestamp of the period start), value (0 to 100) and formatted_value (the same number as Google shows it).
interest_by_region: a list of regions, each with region_code (such as US-WY, a country code, or a numeric metro code like 807 for San Francisco-Oakland-San Jose), region_name and value (0 to 100).
related_queries: two lists, top and rising. Each entry has query, value (Google's score; for rising queries, the growth in percent), formatted_value (100, +350% or Breakout), link (that query in Google Trends) and topic_type (always null for queries).
Related topics: when Google returns topics, they come in a block shaped like related_queries. Google returned none in any of our October tests.
All values are Google's relative interest index, scaled so the highest point in each keyword's own result is 100. Google does not publish absolute search volumes, and neither does this actor.
Each run also adds rows that are not reports: a _type: "error" row for each keyword that failed, with keyword, message and code (NO_DATA when Google returned nothing, SCRAPE_FAILED when a request kept failing); one _type: "summary" row with keywords_requested, keywords_succeeded, keywords_failed, charged_for and failures; and one _type: "info" row with a short message. None of them is ever charged. Skip rows that have a _type field when you load reports.
Stable fields for automations
These fields were present in every report record we sampled (5 reports from local tests on 2 October and 37 scheduled platform runs since 31 August), inside the blocks that were switched on:
| Field | What it holds |
|---|---|
keyword | The keyword as you gave it |
timeframe | The timeframe used, such as today 12-m |
scraped_at | ISO timestamp when the record was captured |
interest_over_time[].date | Start of each period, ISO timestamp |
interest_over_time[].value | Interest index, 0 to 100 |
interest_over_time[].formatted_value | The same value as text |
interest_by_region[].region_code | Region code, for example US-WY |
interest_by_region[].region_name | Region name, for example Wyoming |
interest_by_region[].value | Interest index, 0 to 100 |
related_queries.top[].query | A related search |
related_queries.top[].value | Google's score for it |
related_queries.top[].link | That search opened in Google Trends |
geo is present whenever you set one. We will not rename these fields. New fields may be added over time; existing ones keep their names.
Output examples
Real records from our test of the live build on 2 October 2026 (geo: "US", timeframe: "today 12-m", every block on), with the lists trimmed to their first entries.
A keyword report for padel:
{"keyword": "padel","geo": "US","timeframe": "today 12-m","scraped_at": "2026-10-02T15:14:21.873Z","interest_over_time": [{ "date": "2026-09-20T00:00:00.000Z", "value": 39, "formatted_value": "39" },{ "date": "2026-09-27T00:00:00.000Z", "value": 37, "formatted_value": "37" }],"interest_by_region": [{ "region_code": "US-WY", "region_name": "Wyoming", "value": 100 },{ "region_code": "US-FL", "region_name": "Florida", "value": 35 },{ "region_code": "US-DC", "region_name": "District of Columbia", "value": 28 }],"related_queries": {"top": [{ "query": "padel racket", "topic_type": null, "value": 100, "formatted_value": "100", "link": "https://trends.google.com/trends/explore?q=padel+racket&date=today+12-m&geo=US" },{ "query": "what is padel", "topic_type": null, "value": 69, "formatted_value": "69", "link": "https://trends.google.com/trends/explore?q=what+is+padel&date=today+12-m&geo=US" }],"rising": [{ "query": "tom holland celebrity padel tournament", "topic_type": null, "value": 10700, "formatted_value": "Breakout", "link": "https://trends.google.com/trends/explore?q=tom+holland+celebrity+padel+tournament&date=today+12-m&geo=US" }]}}
A worldwide five year report for lab grown diamonds (geo: "", so the record has no geo field; regions sorted by value here and cut to the top three, and only the first and last weekly points shown):
{"keyword": "lab grown diamonds","timeframe": "today 5-y","scraped_at": "2026-10-02T15:15:38.665Z","interest_over_time": [{ "date": "2021-09-26T00:00:00.000Z", "value": 14, "formatted_value": "14" },{ "date": "2026-09-27T00:00:00.000Z", "value": 66, "formatted_value": "66" }],"interest_by_region": [{ "region_code": "SH", "region_name": "St. Helena", "value": 100 },{ "region_code": "SG", "region_name": "Singapore", "value": 86 },{ "region_code": "US", "region_name": "United States", "value": 79 }],"related_queries": {"top": [{ "query": "lab diamond", "topic_type": null, "value": 100, "formatted_value": "100", "link": "https://trends.google.com/trends/explore?q=lab+diamond&date=today+5-y" }],"rising": [{ "query": "lab grown diamonds hyderabad", "topic_type": null, "value": 25250, "formatted_value": "Breakout", "link": "https://trends.google.com/trends/explore?q=lab+grown+diamonds+hyderabad&date=today+5-y" }]}}
An error row from a scheduled run on 23 September, when Google returned no data for the keyword (never charged):
{"_type": "error","keyword": "iphone","message": "No data returned","code": "NO_DATA"}
Pricing
Pay per event: you pay for each keyword report delivered to your dataset. There is no start fee.
| Event | Free | Bronze | Silver | Gold and above |
|---|---|---|---|---|
trend-report, per keyword report | $0.0025 | $0.00235 | $0.0022 | $0.00205 |
trend-report, per 1,000 reports | $2.50 | $2.35 | $2.20 | $2.05 |
No start fee. This actor's pricing has no apify-actor-start or other per run event; you pay only for reports delivered. Our runs show a single trend-report charge per keyword and nothing else.
One report per keyword. A record with all blocks on costs the same as a record with one block. Worked examples on the Free plan: 1 keyword, $0.0025; 40 keywords on a daily schedule for a 30 day month, 1,200 reports, $3.00. On Gold, the same month costs $2.46.
Never charged: a keyword that returns no data (NO_DATA), a keyword whose requests keep failing (SCRAPE_FAILED), rate limited and retried requests, the summary and info rows, and any proxy use. A run that delivers no report costs nothing.
There is no scheduled price change for this actor. The Pricing tab on this page always shows the rate for your plan; if it and this table ever differ, the Pricing tab is right.
FAQ
What is Google Trends? Google Trends is Google's public tool that shows how search interest in a term changes over time and across places, and which related searches are popular or rising. Google has no official Trends API; this actor reads the same public data the Trends website shows.
What do the numbers mean?
They are Google's relative interest index, not search counts. Within each keyword's result, the busiest point (or region) is 100 and everything else is scaled to it. A 0 means too little data for Google to show. Values are not comparable across separate keywords or separate runs with a different timeframe or region.
Is this pytrends? No. pytrends is a Python library that breaks whenever Google changes its widget tokens. This actor makes the same kind of calls itself, so there is nothing for you to install or update.
How many keywords can I run? As many as you list; each takes a few seconds plus a 4 to 8 second pause before the next. About 50 fit in the default 600 second timeout. For hundreds, split them across scheduled runs.
Why did a keyword come back as an error?
Google sometimes returns no data for a term, or rate limits a request. The actor retries each call once, then writes a NO_DATA or SCRAPE_FAILED row for that keyword and moves on, without charging. Very rare or misspelled terms often have no data at all. If many keywords fail, run fewer per run or set proxyConfiguration so each request uses a fresh IP.
Why are related topics missing?
Google sends the list empty. On 2 October we asked for related topics on very popular terms (iphone, taylor swift, youtube, weather) in the US and worldwide, over 3 months, 12 months and 5 years. Google accepted every request and answered each with a valid but empty list, while the related queries request, built the same way from the same explore call, came back with full top and rising lists. Changing the language setting, the IP rotation or the HTTP client made no difference. The settings Google sends back with each request mark it as automated traffic, which is the likely reason. We keep the switch because Google may send topics again; when it does not, the block is left out, and a keyword with only that block switched on returns a NO_DATA row and is not charged.
Do I need a Google account, cookies or an API key? No. You need only an Apify account. The actor collects the session cookies Google Trends gives any visitor at the start of each run.
Do I need a proxy? No. Our daily scheduled check runs with no proxy and returned data on 37 of 40 runs. The Console form prefills Apify's residential proxy, which gives every request a fresh IP; you can keep it, switch to a datacenter proxy, or remove it. Our tests on 2 October through Apify's datacenter proxy returned data for every keyword except the related topics block. The proxy is paid by us, not you.
What geo values work?
Two letter country codes (US, GB, IN, DE), Google's sub-region codes (US-CA returned 14 California metro areas in our test), and an empty string for worldwide.
How fresh is the data?
Every run asks Google live. The now timeframes cover the last hours or days, and Google's most recent point can be partial and change later in the day.
Can I run it on a schedule?
Yes. Save your input as a task, then in Apify Console go to Schedules, Create new, and pick a time or a cron expression such as 0 9 * * *. Each run is independent; join runs on keyword and date.
How do I export the data?
From the run's Storage tab as JSON, CSV, Excel, XML or HTML, or through the Apify API. The nested lists (interest_over_time and the others) are easiest to handle as JSON; in CSV they are flattened into numbered columns.
Can I use it from Claude, ChatGPT or another AI assistant?
- Connector URL:
https://mcp.apify.com/?tools=themineworks/google-trends-pro. - Claude: Settings > Connectors > Add custom connector, paste the URL, sign in with Apify.
- ChatGPT: developer mode, add an MCP connector with the URL, sign in with Apify.
- Cursor or VS Code: add it as an HTTP MCP server with that URL.
- Claude Code:
claude mcp add -t http google-trends-pro "https://mcp.apify.com/?tools=themineworks/google-trends-pro".
Is it legal to scrape Google Trends? Google Trends data is public, aggregated and anonymous: it contains no personal data. The actor reads only what the public website shows without logging in. You are responsible for how you use the data, including Google's terms. This is general information, not legal advice. This actor is independent and not affiliated with Google.
Integrations
- Google Sheets: export a run to a sheet, or use Apify's Google Sheets integration to add each scheduled run's reports.
- Make, Zapier and n8n: use the Apify app or node to start a run and send rising queries to Slack, Notion or your content planner.
- Webhooks: have Apify call your URL when a run succeeds, then read the dataset.
- API and client libraries: start runs and read datasets from Python, JavaScript or any HTTP client. The "Copy to your AI assistant" block above has the exact call.
- MCP clients: Claude, ChatGPT, Cursor, VS Code and Claude Code can call the actor as a tool through
https://mcp.apify.com.
To see what is behind a spike, pair it with Google News Scraper for the coverage and Reddit Scraper for the discussion.
More from The Mine Works
Marketing, SEO and reviews
- Facebook Ad Library Scraper
- Google Ads Transparency Scraper
- Similarweb Scraper
- Google News Scraper
- Trustpilot Reviews Scraper
- Semrush Scraper
- App Reviews Scraper
- Trustpilot Business Search
- TripAdvisor Reviews Scraper
- E-commerce Intel MCP
- Username Checker
- Backlink Building Agent
Social media and video
Leads and business directories
Real estate
Science, health and government data
Jobs and hiring
Company and business data
E-commerce and marketplaces
Food and local services
Developer and AI tools
More tools
Support
Found a keyword or region that fails, or need a field we do not return yet? Open an issue on the Issues tab of this page with your input and the run ID, and we will reply there. To ask for a new source, email dmineworks@gmail.com. A guide for this actor also lives at themineworks.com.
Google Trends Scraper turns keywords into interest over time, interest by region and related queries as clean JSON, billed once per keyword report with no start fee.

