Google Trends Scraper avatar

Google Trends Scraper

Pricing

from $1.75 / 1,000 results

Go to Apify Store
Google Trends Scraper

Google Trends Scraper

Scrape Google Trends for keywords or topic IDs: interest over time, interest by region, related queries and related topics as flat rows, or current Trending Now searches per country. Compare up to five terms on one 0-100 scale. Filter by country, time range, category and property.

Pricing

from $1.75 / 1,000 results

Rating

0.0

(0)

Developer

Axiom Works

Axiom Works

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

12 hours ago

Last modified

Share

Returns: one row per term and time bucket, region, related result or trend with type, searchTerms, geo, date, value, query, sourceUrl. Input: {"searchTerms":["bitcoin"],"geo":"US","timeRange":"today 3-m","outputs":["interestOverTime","relatedQueries"],"maxItems":100} Best for: keyword research, regional comparisons, monitoring search interest using Google Trends scraper API output.

{"type": "trending_now", "title": "interpol", "geo": "FR", "approxTraffic": "200+", "approxTrafficNumber": 200, "pubDate": "2026-10-12T23:00:00.000Z", "sourceUrl": "https://trends.google.com/trending/rss?geo=FR"}

Google Trends Scraper saves public explore data and Trending Now searches as flat dataset rows:

  • Interest over time: Google's 0-100 popularity index for each term, per hour, day, week or month depending on the time range you pick.
  • Interest by region: the same index broken down by country, state, metro area (DMA) or city.
  • Related queries: the top and rising searches related to each term, with Google's value and label (for example +1,700% or Breakout).
  • Related topics: the top and rising related Knowledge Graph topics, when Google returns them.
  • Trending Now: the current trending searches for one or more countries, with approximate search volume, publish time, a picture and related news articles.
  • News for your terms: when a current Trending Now story matches the term, explore rows also carry its news articles and picture; otherwise these fields are null.

You can give it plain keywords (bitcoin), Google topic IDs (/m/05p0rrx), or Google Trends explore URLs that you copied from your browser. Up to 5 terms can be compared in one request so their values share the same scale.

The type column identifies the row kind for spreadsheet or database workflows.

Each dataset row contains these fields.

FieldWhat it contains
typeinterest_over_time, interest_by_region, related_query, related_topic or trending_now
searchTermsThe terms in the request (the comparison group), or the trending search
geoThe geo code of the request, '' for worldwide
timeRangeThe time range of the explore request, e.g. today 12-m
dateISO start of the data point or window, or the publish time of a trending search
formattedTimeGoogle's label for the period, e.g. Sep 6 – 12, 2026 or Past 12 months
valuesMap of term to value, e.g. {"bitcoin": 19, "ethereum": 2}
isPartialtrue when the period includes today and the value can still change
rank, isBreakoutPosition in Google's top or rising list and whether a rising row is a 'Breakout' (related queries and topics rows only; null elsewhere)
geoCode, geoNameThe region of the row (e.g. US-CA, California) or of the request
keywordThe search term the row belongs to
listTypetop or rising for related rows; timeline, region or trending otherwise
queryRelated query text, topic title, search term or trending search
topicTitle, topicType, topicMidGoogle Knowledge Graph topic for the row (related topic, or the best match for the keyword)
value, formattedValueThe row's number and Google's label for it
exploreLinkGoogle Trends explore URL for the row's term or related item
titleRow label: search term, related query or topic, or trending search
approxTraffic, approxTrafficNumberApproximate search volume such as 1000+ (trending_now rows only; null on explore rows, use value there)
pubDatePublish time of the trending search (trending_now rows only; null on explore rows, use date)
pictureImage URL of the trending search, or of the first news article on explore rows
newsItemsNews articles from Google Trends Trending Now: title, url, source, picture
newsTrendThe Trending Now story the picture and news come from
newsMatchterm when a Trending Now story matches the search term, none when no story matched (then picture, newsItems and newsTrend are null)
sourceUrlThe Google Trends endpoint the row was read from
idStable row ID, unique within the run
scrapedAtWhen the row was saved

A note on the numbers: Google Trends values are relative, not absolute. For each request, Google scales the results so the highest point is 100. Values from two separate requests are therefore not on the same scale. If you want to compare terms with each other, turn on compareTerms so they are sent together (up to 5 per request).

  1. Open the Actor in Apify Console and go to the Input tab.
  2. Choose a mode. explore gives time series, regions and related searches for your terms. trendingNow gives today's trending searches.
  3. For explore, type your search terms (one per line) or paste Google Trends explore URLs into Start URLs.
  4. Pick a geo (for example US, GB or US-CA, or leave it empty for worldwide) and a time range.
  5. Choose which outputs you need. Fewer outputs means fewer rows and a faster run.
  6. Set maxItems to cap the number of rows.
  7. Click Start. When the run finishes, open the Output tab to view the rows, or export them as JSON, CSV, Excel or HTML.

For trendingNow, set Trending Now countries to the country codes you want, such as US, GB, DE and IN. Each country usually has 10 to 20 current trending searches.

Input

FieldTypeDescription
searchTermsarrayKeywords or topic IDs, e.g. ["bitcoin", "ethereum"]. Required in explore mode unless startUrls is set
modestringexplore (default) or trendingNow
compareTermsbooleanSend up to 5 terms per request so their values are comparable. Default false
startUrlsarrayGoogle Trends explore URLs. The Actor reads their q, geo and date parameters
geostringCountry or subregion code, e.g. US or US-CA. Empty means worldwide
geosarrayOptional list of geo codes, e.g. ["US", "GB", "DE"], to run every term in each location in one run. Overrides geo when set
timeRangestringnow 1-H, now 4-H, now 1-d, now 7-d, today 1-m, today 3-m, today 12-m (default), today 5-y, all, or YYYY-MM-DD YYYY-MM-DD
outputsarrayAny of interestOverTime, interestByRegion, relatedQueries, relatedTopics. Default: all four
categoryintegerGoogle Trends category ID. 0 (default) means all categories
propertystringweb (default), images, news, froogle (Shopping) or youtube
regionResolutionstringCOUNTRY, REGION, DMA or CITY. Empty lets Google choose
trendingGeosarrayCountry codes for trendingNow. Default ["US"]
trendingMinTrafficintegerMinimum RSS approxTrafficNumber; 0 disables filtering
trendingMaxAgeHoursnumberMaximum RSS publication age in hours; 0 disables filtering
resolveTrendingTopicsbooleantrue by default; false skips Trending Now topic lookups
maxItemsintegerMaximum number of rows for the whole run. Default 1000
languagestringLanguage code for labels, e.g. en-US (default)
timezoneOffsetintegerTimezone offset in minutes. Default 0 (UTC)
proxyConfigurationobjectProxy settings. Apify residential proxy is the default

Example input for explore mode:

{
"mode": "explore",
"searchTerms": ["bitcoin", "ethereum"],
"compareTerms": true,
"geo": "US",
"timeRange": "today 12-m",
"outputs": ["interestOverTime", "interestByRegion", "relatedQueries", "relatedTopics"],
"maxItems": 500
}

Example input with an explore URL:

{
"mode": "explore",
"startUrls": [{ "url": "https://trends.google.com/trends/explore?q=iphone&geo=GB&date=now%207-d" }],
"outputs": ["interestOverTime", "relatedQueries"]
}

Example input for Trending Now:

{
"mode": "trendingNow",
"trendingGeos": ["US", "GB", "DE", "IN"]
}

Invalid input names the field to correct. Valid targets with no data succeed with zero rows and a status suggesting broader terms, geography or timeRange. Blocked targets retry with fresh sessions; slow targets stop after a bounded attempt. Other targets continue.

For a recent-news shortlist, set trendingMaxAgeHours to 24 and trendingMinTraffic to a lower-bound search count. Both default to 0, which disables filtering. Age means RSS publication age, not when interest first started. Enabled filters exclude rows missing the relevant value and run before the shared maxItems cap. A restrictive filter can legitimately return no rows.

Set resolveTrendingTopics to false for an RSS-only run. This skips each title's autocomplete lookup while retaining traffic, publication dates, pictures and news. Topic fields can be absent. Its default remains true for compatibility. This option changes only Trending Now; explore topic lookups keep their existing behavior. Each country still supplies Google's RSS shortlist, not the full Trending Now list.

Output

These rows come from a local test run (sourceUrl shortened). An interest-over-time row (no Trending Now story matched this term, so the news fields are null):

{
"type": "interest_over_time",
"searchTerms": [
"bitcoin"
],
"geo": "US",
"timeRange": "today 3-m",
"date": "2026-06-30T00:00:00.000Z",
"formattedTime": "Jun 30, 2026",
"values": {
"bitcoin": 100
},
"isPartial": false,
"geoCode": "US",
"geoName": "United States",
"keyword": "bitcoin",
"listType": "timeline",
"query": "bitcoin",
"topicTitle": "Bitcoin",
"topicType": "Cryptocurrency",
"topicMid": "/m/05p0rrx",
"value": 100,
"formattedValue": "100",
"approxTraffic": null,
"approxTrafficNumber": null,
"exploreLink": "https://trends.google.com/trends/explore?q=bitcoin&date=today+3-m&geo=US",
"title": "bitcoin",
"pubDate": null,
"picture": null,
"newsItems": null,
"newsTrend": null,
"newsMatch": "none",
"sourceUrl": "https://trends.google.com/trends/api/widgetdata/multiline?...",
"id": "15367e74168d5a1bc483",
"scrapedAt": "2026-09-30T05:42:28.653Z"
}

A rising related query (news columns left out for brevity):

{
"type": "related_query",
"searchTerms": ["iphone"],
"geo": "GB",
"timeRange": "now 7-d",
"date": "2026-09-23T05:28:41.000Z",
"formattedTime": "Past 7 days",
"pubDate": null,
"isPartial": true,
"geoCode": "GB",
"geoName": "United Kingdom",
"keyword": "iphone",
"listType": "rising",
"value": 450,
"formattedValue": "+450%",
"approxTraffic": null,
"approxTrafficNumber": null,
"exploreLink": "https://trends.google.com/trends/explore?q=iphone+16+review&date=now+7-d&geo=GB",
"query": "iphone 16 review",
"title": "iphone 16 review",
"values": { "iphone 16 review": 450 },
"topicTitle": "iPhone",
"topicType": "Mobile phone",
"topicMid": "/m/027lnzs",
"sourceUrl": "https://trends.google.com/trends/api/widgetdata/relatedsearches?...",
"id": "82e88f5126c17d787f55",
"scrapedAt": "2026-09-30T05:28:49.368Z"
}

A Trending Now row from a local RSS-only run in France (news shortened to one article):

{
"type": "trending_now",
"searchTerms": [
"interpol"
],
"geo": "FR",
"title": "interpol",
"approxTraffic": "200+",
"approxTrafficNumber": 200,
"pubDate": "2026-10-12T23:00:00.000Z",
"sourceUrl": "https://trends.google.com/trending/rss?geo=FR",
"id": "6eee9d1f48e8fc52d802",
"scrapedAt": "2026-10-13T00:24:20.173Z",
"newsItems": [
{
"title": "TRON: Post-Quantum Cryptography Hits Testnet",
"url": "https://blockchain.news/flashnews/tron-post-quantum-cryptography-hits-testnet",
"source": "Blockchain News",
"picture": "https://encrypted-tbn3.gstatic.com/images?q=tbn:ANd9GcSuuKwuXZ9t5V5UuEidNyxqezmLxXcqdYbDKpO0e34yTDZ_3kb19yxgGZI34f4"
}
]
}

The Actor uses pay-per-event pricing. You pay one result event per dataset row. See the Pricing tab of the Actor page for the current rate.

To keep costs down, request only the outputs you need, because interest by region and related queries add many rows per term. The maxItems input puts a hard limit on how many rows one run can return, so you never pay for more rows than you asked for. You can also turn on compareTerms to send up to 5 terms in one request; each row then lists the whole group in searchTerms and its own term in keyword.

Use with AI agents (MCP)

AI agents and assistants can run this Actor through the Apify MCP server. Add this server to your MCP client (Claude Desktop, Cursor, VS Code and other clients that support MCP):

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

The hosted server at https://mcp.apify.com authenticates with your Apify account using OAuth. The tool name is axiomworks/google-trends-scraper. The agent then sees the input schema of this Actor and can start runs and read the results.

Example prompts:

  • "Use Google Trends Scraper to compare interest in bitcoin and ethereum in the US over the past 12 months, and tell me in which weeks ethereum was highest relative to bitcoin."
  • "Get the rising related queries for 'electric car' in Germany for the past 3 months and group them by brand."
  • "What is trending right now in the US, UK and India? List each trending search with its approximate traffic and one news headline."
  • "Which US states search most for 'pickleball' this year?"

Use it from an AI agent

Connect to Apify’s hosted MCP server at https://mcp.apify.com with OAuth and select axiomworks/google-trends-scraper. Read both the dataset and the linked RUN_SUMMARY record. This uncharged JSON array records each explore group/location, URL or Trending Now country with input, status, reason, and itemCount. Status is ok for returned rows, 0-items for empty or skipped targets, blocked after exhausted block retries, or invalid for failed validation. Comparison groups count all their terms. Reasons identify skipped targets and partial widget failures. Malformed input fails the run.

For API calls, set APIFY_RUN_CAP to your spending cap. Pass it as a run query parameter, outside Actor input:

curl -X POST "https://api.apify.com/v2/acts/axiomworks~google-trends-scraper/runs?maxTotalChargeUsd=${APIFY_RUN_CAP}" \
-H "Authorization: Bearer $APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{"searchTerms":["bitcoin"],"outputs":["interestOverTime"],"maxItems":7}'

Integrations and API

You can start the Actor and read its results from your own code with the Apify API. Set your Apify API token in the APIFY_TOKEN environment variable.

Python (pip install apify-client):

import os
from apify_client import ApifyClient
client = ApifyClient(os.environ["APIFY_TOKEN"])
run = client.actor("axiomworks/google-trends-scraper").call(run_input={
"searchTerms": ["bitcoin", "ethereum"],
"compareTerms": True,
"geo": "US",
"timeRange": "today 12-m",
"outputs": ["interestOverTime"],
})
for row in client.dataset(run["defaultDatasetId"]).iterate_items():
print(row["date"], row["keyword"], row["value"])

JavaScript (npm install apify-client):

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('axiomworks/google-trends-scraper').call({
mode: 'trendingNow',
trendingGeos: ['US', 'GB'],
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
for (const row of items) console.log(row.geo, row.title, row.approxTraffic);

cURL (runs the Actor and returns the rows in one call):

curl -X POST "https://api.apify.com/v2/acts/axiomworks~google-trends-scraper/run-sync-get-dataset-items" \
-H "Authorization: Bearer $APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{"searchTerms": ["bitcoin"], "geo": "US", "timeRange": "today 3-m", "outputs": ["interestOverTime", "relatedQueries"], "maxItems": 100}'

The Actor also works with Apify Console integrations such as schedules, webhooks, Google Sheets, Slack, Make and Zapier.

FAQ

Why are the values between 0 and 100? Google Trends does not publish search counts for explore data. It publishes an index where 100 is the peak popularity within the request. The Actor returns exactly what Google returns.

Can I compare more than 5 terms? Google accepts at most 5 terms per request. With compareTerms on, the Actor splits longer lists into groups of 5. Values are comparable within a group, but not across groups.

What do traffic and news fields contain on explore rows? Traffic fields are null. News fields contain articles and a picture only for a matching Trending Now story; otherwise they are null and newsMatch is none.

What if Google throttles a request? The Actor retries with backoff, then moves on to the next term.

Google Trends data is public and aggregated. This independent Actor reads public endpoints without login.

Check Google's terms and local laws before republishing the data. This Actor is an independent tool and is not affiliated with, endorsed by or sponsored by Google.

Feedback

Report bugs through the Actor’s Issues tab with input and run ID.