Google Trends Scraper: Compare Keywords, Trending Now, API avatar

Google Trends Scraper: Compare Keywords, Trending Now, API

Pricing

$1.00 / 1,000 results

Go to Apify Store
Google Trends Scraper: Compare Keywords, Trending Now, API

Google Trends Scraper: Compare Keywords, Trending Now, API

Google Trends scraper and API: interest over time, interest by region, related queries and Trending Now for any number of keywords. Compares more than 5 terms on one scale. $1 per 1,000 results, pay per result, no rental. No login, no browser.

Pricing

$1.00 / 1,000 results

Rating

0.0

(0)

Developer

Data Gleaner

Data Gleaner

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

7 days ago

Last modified

Share

Google Trends Scraper and API: compare keywords, related queries, Trending Now

Give it any number of keywords and countries and get Google Trends interest over time, interest by region, related queries and topics, and the Trending Now list as JSON, CSV or Excel. No login, no browser, no Google account. $1 per 1,000 results, charged per result: no monthly rental.

Why this one

  • Compare more than 5 keywords. Google compares at most 5 terms at once. Give this Actor 50: it splits them into groups of up to 5, keeps the first term in every group as an anchor, and rescales each group so the values stay comparable (scaledToAnchor; the unscaled number is kept in rawValue).
  • You pay for results, not for waiting. One flat price per dataset item. A related-queries or topics result that comes back empty is skipped and not charged, and an output type that fails entirely is not charged. maxItems and the run's maximum charge cap the bill.
  • Built for Google's rate limits. Paced requests, then exponential backoff with a fresh session on HTTP 429 (maxRetries, default 6). One failing term never fails the run. A heavily throttled run can take a couple of minutes; the status message names any output that failed.
  • Trending Now in one call. Current trending searches for a country with start time, search volume, growth and related queries, sorted by volume or start time, over 4, 24, 48 or 168 hours.
  • Paste a Google Trends link. A trends.google.com/trends/explore?q=... URL in searchTerms runs with its terms, location, range, category and property.

Minimal input

{"searchTerms": ["python", "javascript"], "geo": ["US"]}

Sample output rows

Interest over time, from a platform run on 2026-10-11 (timeline shortened to two of its weekly points):

{
"outputType": "interestOverTime",
"searchTerm": "chatgpt",
"geo": "US",
"timeRange": "today 12-m",
"category": 0,
"property": "web",
"average": 76.22,
"peakValue": 100,
"peakDate": "2025-10-19T00:00:00+00:00",
"latestValue": 77,
"groupIndex": 1,
"scaledToAnchor": null,
"timeline": [
{
"date": "2025-10-05T00:00:00+00:00",
"value": 94,
"rawValue": 94,
"hasData": true,
"isPartial": false
},
{
"date": "2025-10-12T00:00:00+00:00",
"value": 92,
"rawValue": 92,
"hasData": true,
"isPartial": false
}
],
"scrapedAt": "2026-10-11T06:10:10+00:00"
}

Trending Now ("mode": "trendingNow", related queries shortened):

{
"outputType": "trendingNow",
"rank": 1,
"title": "arch manning",
"geo": "US",
"startedAt": "2026-10-10T15:30:00+00:00",
"searchVolume": 1000000,
"growthPercent": 1000,
"relatedQueries": [
"ut vs ou",
"oklahoma vs texas",
"texas football"
],
"categoryIds": [
17
],
"windowHours": 24,
"input": {
"geo": "US",
"trendingHours": 24,
"trendingSortBy": "searchVolume"
},
"scrapedAt": "2026-10-11T06:10:02+00:00"
}

Price

$1 per 1,000 results ($0.001 each). 40 terms x 2 countries x 2 outputs = 160 results = $0.16. A Trending Now run is 20 to 500 results depending on the window.

Limits

Google decides what it answers: relatedTopics is beta and often empty for automated requests, and Google can slow or block bursts of requests. Values are relative (0 to 100 per comparison), not search counts.

Why use it

  • Compare more than 5 keywords. Google compares at most 5 terms at once. Give this Actor 50 and it splits them into groups of up to 5, puts the first term (the anchor) in every group, and rescales each group to the first group's scale using the anchor's peak, so values from different groups can be compared. Each item says which group it came from and whether it was rescaled (scaledToAnchor); the unscaled number is kept in rawValue.
  • Handles Google's rate limits. Requests are paced (requestDelaySeconds), and on HTTP 429 the Actor backs off and retries (maxRetries). One failing term never fails the run.
  • Trending Now mode. The current trending searches for a country, with start time, search volume, growth and related queries, ordered by search volume or start time (trendingSortBy).
  • YouTube, News, Images and Shopping. Set property to measure those Google surfaces instead of web search.
  • Paste a Google Trends URL. A trends.google.com/trends/explore?q=... link in searchTerms runs with the terms, location, time range, category and property from that URL.
  • No browser. Plain HTTP requests, so runs are light and fast.
  • Easy to consume. camelCase fields, ISO 8601 dates, numbers as numbers, scalar summary columns (average, peakValue, peakDate, latestValue, topRegion, topQuery) next to the arrays.

Use cases

Keyword and content research, SEO seasonality, market and product timing, news and PR monitoring, comparing regions, feeding trend data into an LLM or a dashboard.

Input

{
"mode": "search",
"searchTerms": ["python", "rust", "go", "java", "kotlin", "swift"],
"geo": ["US", "GB"],
"timeRange": "today 12-m",
"category": 0,
"property": "web",
"outputs": ["interestOverTime", "interestByRegion", "relatedQueries", "relatedTopics"],
"regionResolution": "REGION"
}
FieldMeaning
modesearch (default) or trendingNow.
searchTermsAny number of terms. Duplicates are removed.
geoCountry or region codes (US, DE, US-CA). Empty means worldwide. Each location is run separately.
timeRangeDefault today 12-m. 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.
customStartDate, customEndDateYYYY-MM-DD. When both are set they replace the preset.
categoryGoogle Trends category ID. 0 is all.
propertyweb, youtube, news, images, froogle.
outputsAny of interestOverTime (default), interestByRegion, relatedQueries, relatedTopics. One item is written per term, location and output. A related queries or topics result that comes back empty is skipped and not charged. relatedTopics is beta and often empty: Google withholds the data from automated requests.
regionResolutionCOUNTRY, REGION, CITY, DMA. Applies to country-level locations; worldwide and sub-country searches use Google's native level.
includeLowSearchVolumeRegionsAlso list regions with too little data.
trendingHoursTrending Now window: 4, 24, 48 or 168 hours (default 24).
trendingSortByTrending Now order: searchVolume (default, biggest first) or startedAt (newest first).
maxItemsStop after this many dataset items, each one charged. 0 (default) means no limit. Useful in Trending Now mode, where one country can return several hundred trends.
languageInterface language for related query and topic names, such as en-US (default), de, ja.
requestDelaySeconds, maxRetriesPacing (default 1.5 s) and attempts per request (default 6, maximum 15; a request is given up after that many tries). On 429 or a network error the wait starts at about 8 s and doubles up to about 45 s (with jitter), with a fresh session each time, so a throttled run can take a couple of minutes. If large batches keep hitting 429, raise requestDelaySeconds or turn on a residential proxy.
proxyConfigurationOptional. Off by default, which works best: Apify's shared datacenter proxy is throttled by Google. Use a residential proxy only if a large batch keeps hitting 429.

Output

Interest over time (outputType: "interestOverTime"):

{
"outputType": "interestOverTime",
"searchTerm": "rust",
"geo": "US",
"timeRange": "today 3-m",
"category": 0,
"property": "web",
"average": 41.3,
"peakValue": 66.2,
"peakDate": "2026-08-14T00:00:00+00:00",
"latestValue": 52.1,
"groupIndex": 2,
"scaledToAnchor": "python",
"timeline": [
{"date": "2026-07-07T00:00:00+00:00", "value": 39.0, "rawValue": 39, "hasData": true, "isPartial": false}
],
"input": {"searchTerm": "rust", "geo": "US", "timeRange": "today 3-m", "category": 0, "property": "web"},
"scrapedAt": "2026-10-07T15:54:54+00:00"
}

Other output types: interestByRegion (resolution, topRegion, regions: [{geoCode, name, value}]), relatedQueries and relatedTopics (top and rising arrays; rising entries have isBreakout), and trendingNow (rank, title, startedAt, searchVolume, growthPercent, relatedQueries, categoryIds, windowHours).

How values work: Google scales each comparison so its highest point is 100. Interest over time is rescaled across groups with the anchor as described above (the anchor's peak must be above zero in both groups; otherwise the item keeps its raw values and scaledToAnchor is null). Region values and related-query values are always relative to that one term, so they are not rescaled. Related topics need a separate request per term because Google leaves them out of multi-term comparisons.

Pricing

Pay per event: one result event for each dataset item, at $1 per 1,000 results. The Actor stops pushing as soon as your maximum charge is reached.

With no searchTerms, the Actor runs an example: 2 terms (python, javascript), interest over time plus related queries, up to 4 items. The Console prefill is the same.

If an output type fails entirely (for example Google refuses every request), the run's status message names it, and nothing is charged for it.

Worked example: 40 terms, 2 countries, interest over time plus related queries is 40 x 2 x 2 = 160 results, about $0.16. A Trending Now run for one country is about 20 to 500 results depending on the window.

Use with Python

pip install apify-client, set the APIFY_TOKEN environment variable, and run. This input returns 5 items (one timeline per term), under $0.01.

import os
from apify_client import ApifyClient
client = ApifyClient(os.environ["APIFY_TOKEN"])
run = client.actor("datagleaner/google-trends-scraper").call(run_input={
"searchTerms": ["python", "javascript", "rust", "go", "kotlin"],
"geo": ["US"],
"timeRange": "today 12-m",
"outputs": ["interestOverTime"],
})
for item in client.dataset(run.default_dataset_id).iterate_items():
print(item["searchTerm"], item.get("average"), item.get("peakValue"), item.get("peakDate"))

Use with JavaScript / Node.js

npm install apify-client, set APIFY_TOKEN, and run it as an ES module (.mjs).

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('datagleaner/google-trends-scraper').call({
searchTerms: ['python', 'javascript', 'rust', 'go', 'kotlin'],
geo: ['US'],
timeRange: 'today 12-m',
outputs: ['interestOverTime'],
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
for (const item of items) console.log(item.searchTerm, item.average, item.peakValue, item.peakDate);

Use it from n8n, Make, Zapier or an AI agent

Actor ID: datagleaner/google-trends-scraper

Minimal input:

{"searchTerms": ["python", "javascript"], "geo": ["US"]}

Each tool below runs this Actor with your own Apify API token.

  • n8n: add the Apify node (@apify/n8n-nodes-apify). On n8n Cloud you install it from the community node registry. Choose Run an Actor and get dataset, set Actor to datagleaner/google-trends-scraper and paste the input above.

  • Make: use the Apify app's Run an Actor module, then Get Dataset Items to read the results. Watch Actor Runs can trigger a scenario when a run finishes.

  • Zapier: use the Apify action Run Actor, then the search Fetch dataset items. The trigger Finished Actor run starts a Zap when a run ends.

  • AI agents (MCP): connect to https://mcp.apify.com?tools=datagleaner/google-trends-scraper. In Claude Code:

    claude mcp add --transport http apify "https://mcp.apify.com?tools=datagleaner/google-trends-scraper"
    

    Then run /mcp to sign in to Apify in your browser. To use an Apify token instead, add --header "Authorization: Bearer YOUR_APIFY_TOKEN". Clients that take a remote server URL in an mcpServers config use {"mcpServers": {"apify": {"url": "https://mcp.apify.com?tools=datagleaner/google-trends-scraper"}}}. Then ask in plain language, for example: "Pull Google Trends interest over the past 12 months in the US for air fryer, rice cooker and slow cooker, plus their rising related queries, and tell me which one is growing fastest." An agent without the Actor preloaded can find it with Apify's search-actors tool by searching "google trends".

  • LangChain (Python):

# pip install langchain-apify, then set APIFY_TOKEN in your environment
import json
from langchain_apify import ApifyActorsTool
tool = ApifyActorsTool("datagleaner/google-trends-scraper")
result = tool.invoke({"run_input": json.loads('{"searchTerms": ["python", "javascript"], "geo": ["US"]}')})

Limits

  • Google rate-limits Trends requests. Without a proxy, a 40-term, 2-country, 3-output batch (264 requests) finished with every result in about 14 minutes, with the Actor backing off on 429. Apify's shared datacenter proxy does worse than no proxy, and a very large batch may need a residential proxy.
  • Google's data is sampled and normalised; it is a relative index, not search counts (Trending Now search volumes are Google's rounded buckets).
  • Region data for a term with very low interest can be empty.

FAQ

Is this a Google Trends API? It works as one: call it over the Apify API or from Python and Node.js (examples above) and get the same Trends data as JSON. No Google account or API key is needed; only public Trends data is read.

Can I compare more than 5 keywords in Google Trends? Yes. Give any number of searchTerms; the Actor groups them in fives around the first term and rescales every group to one scale, so all terms are comparable.

How do I export Google Trends data to CSV or Excel? Export the run's dataset as CSV or Excel. The scalar columns are flat and the arrays (such as timeline) are JSON text in their cell.

Why do values for the same term differ between runs? Google samples its data and the index depends on the other terms in the comparison. Use the anchor to compare across groups.

Is the data real time? now 1-H and Trending Now with trendingHours: 4 are close to real time.

Responsible use

The Actor collects only data that Google Trends shows publicly and contains no personal data. You are responsible for using the output lawfully and in line with Google's terms and the rules that apply to you.