Google Trends Scraper - Trends & Keywords avatar

Google Trends Scraper - Trends & Keywords

Pricing

from $0.75 / 1,000 trend reports

Go to Apify Store
Google Trends Scraper - Trends & Keywords

Google Trends Scraper - Trends & Keywords

Analyze Google Trends keywords, compare terms, collect Trending Now data, and monitor stable trend changes for research, SEO, automation, and AI workflows.

Pricing

from $0.75 / 1,000 trend reports

Rating

0.0

(0)

Developer

Amadeusz

Amadeusz

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

6 hours ago

Last modified

Share

Analyze keyword interest, compare search terms on one shared scale, collect current Trending Now searches, or monitor stable changes between runs. The Actor returns compact, typed results for Apify Console, API, exports, and AI agents using Apify MCP.

Google Trends Scraper uses live Google Trends data. It is not affiliated with or endorsed by Google.

Quick start

  1. Choose Analyze keywords, Compare terms, Trending now, or Monitor changes.
  2. Enter search terms or a country, depending on the selected mode.
  3. Set Maximum result rows to control output and product charges.
  4. Click Start.
  5. Open All results, a mode-specific view, or the machine-readable run summary.

An empty API input runs one bounded demo report for Google; it never starts a large crawl.

Ready-to-use recipes

Analyze keywords

Each keyword produces one report when at least one selected data surface has data. Empty surfaces are explicit in missingDataTypes; all-empty results and technical failures remain free.

{
"mode": "analyze",
"searchTerms": ["ChatGPT", "/m/0dl567"],
"dataTypes": ["timeline", "regions", "relatedQueries", "suggestions"],
"timeframe": "today 12-m",
"geo": "US",
"maxItems": 2
}

Literal phrases and Google topic IDs are both supported. Topic IDs can aggregate spellings and languages more consistently than literal search terms.

Compare two to five terms

All terms share one Google Trends request and one relative 0–100 scale.

{
"mode": "compare",
"searchTerms": ["ChatGPT", "Claude", "Gemini"],
"timeframe": "today 12-m",
"geo": "US",
"searchProperty": "web"
}

Do not compare scores from separate runs as if they were absolute search volumes. Changing any term can rescale every series.

RPC supplies ranked growth and relative-volume metrics. RSS supplies ranked searches with approximate traffic and news articles. The Actor fetches both by default, preserves each source's metrics, and deduplicates exact normalized titles.

{
"mode": "trending",
"geo": "PL",
"language": "pl-PL",
"trendingSources": ["rpc", "rss"],
"trendingWindow": 8,
"maxItems": 50
}

When a small limit is used with both sources, shared rows are returned first, then RPC-only and RSS-only rows are interleaved. rpc.rank and rss.rank preserve the source positions.

Monitoring compares one stable Trending Now population between runs. The first complete run creates a free baseline. Later runs return only NEW, UPDATED, and ENDED records; a run without stable changes returns a free NO_CHANGES status.

{
"mode": "monitor",
"monitorId": "pl-daily",
"geo": "PL",
"language": "pl-PL",
"trendingSources": ["rpc", "rss"],
"trendingWindow": 8,
"maxItems": 50
}

Keep monitorId, geo, language, trendingSources, trendingWindow, and maxItems unchanged between runs. A scope change intentionally creates an independent baseline. For automation, save this input as an Actor Task and run it from an Apify Schedule with isExclusive: true. Do not overlap manual and scheduled runs of the same monitor.

One complete population turnover can emit at most 2 × maxItems paid changes. At maxItems: 50, the maximum user charge is 100 × $0.00055 = $0.055. Set the Schedule or run maximum charge accordingly. Baseline and no-change runs have no product-event charge.

Paste an Explore or Trending Now URL as an advanced alternative to structured fields. Each URL owns its complete query and conflicting structured fields are ignored.

{
"startUrls": [
"https://trends.google.com/trends/explore?date=today%2012-m&geo=PL&q=Google,ChatGPT"
]
}

Up to 50 URLs can be processed sequentially. Explore URLs with one term create analysis reports; two to five terms create comparison reports.

Call the synchronous API

curl -X POST \
"https://api.apify.com/v2/acts/ziomixshot~google-trends-scraper/run-sync-get-dataset-items?token=$APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"mode": "analyze",
"searchTerms": ["Google"],
"dataTypes": ["timeline", "regions"],
"geo": "US",
"maxItems": 1
}'

For longer runs, start the Actor asynchronously and paginate the default dataset.

Use the Actor through Apify MCP

AI agents should follow this sequence:

  1. Fetch Actor details to inspect the current input and output schemas.
  2. Call the Actor with structured input.
  3. Read the returned dataset ID with get-dataset-items.
  4. Read OUTPUT when counters, route usage, or final run status are needed.

call-actor returns run and storage identifiers, not dataset rows. Use "searchProperty": "web" for Web Search. The legacy empty value remains accepted for existing integrations. For monitoring, an agent must reuse the same monitorId and scope, wait for one run to finish before starting another, and treat ENDED as leaving the configured top-N population rather than the end of global interest.

Input reference

FieldPurpose
modeanalyze, compare, trending, or monitor.
searchTermsOne to 50 terms for analyze; two to five for compare.
dataTypesAnalyze surfaces: timeline, regions, related queries, and suggestions.
maxItemsHard cap for paid reports or deduplicated trending rows.
timeframeGoogle preset or YYYY-MM-DD YYYY-MM-DD UTC range.
geoCountry, region, or empty worldwide scope; RSS requires a country.
languageGoogle interface language such as en-US or pl-PL.
categoryNumeric Google Trends category; 0 means all categories.
searchPropertyweb, images, news, youtube, or froogle; legacy "" is accepted.
resolutionCountry, region, or city granularity for regional interest.
trendingSourcesRPC metrics, RSS articles, or both.
trendingWindowVerified RPC values: 4–10 plus 12; 11 is rejected.
monitorIdLowercase slug identifying one independent monitor.
startUrlsUp to 50 copied Google Trends Explore or Trending URLs.

Related queries need a range of at least seven days. Invalid combinations fail before a Google request is sent. startUrls cannot be combined with mode: "monitor".

Output contract

Every default-dataset item has a recordType discriminator:

  • trendReport - one keyword analysis, with explicit partial metadata when needed;
  • comparisonReport - one comparison on a shared scale;
  • trendingResult - one deduplicated current trend;
  • trendChange - one NEW, UPDATED, or ENDED monitoring event;
  • status - a free baseline, no-change, no-data, preservation, or error row.

All successful records include operationId, fetchedAt, and provenance with the direct or residential route and attempt count. The run summary in OUTPUT contains final status, counters, retry usage, free status counts, and charged event counts. CRAWL_STATE supports safe platform migration and resume without reprocessing completed operations.

Every timeline point includes isPartial. A value of true means Google marked the current time bucket as incomplete, so its score must not be interpreted as a finished-period decline. Analyze status rows include keyword so no-data and error results remain attributable in multi-keyword runs.

Every analysis report also includes top-level isPartial and missingDataTypes. Region rows preserve Google's localized label plus geoCode for country/region rows or coordinates for city rows when Google returns them. Related queries expose raw numeric value, localized formattedValue, and locale-independent isBreakout; the legacy breakout text remains for compatibility.

Trending rows deliberately keep RPC and RSS in separate nested objects because their traffic fields have different meanings. isPartial: true means a selected source failed; a row that naturally appears in only one successful source is not a transport failure.

A trendChange contains top-level identity fields plus nullable previous and current states and changedFields. UPDATED is intentionally limited to changes in sorted sources or rss.startedAt. Rank, growth, volume, traffic, articles, display casing, timestamps, provenance, and row order do not trigger alerts. Partial, empty, failed, corrupt-state, and budget-exhausted runs never replace the last complete snapshot.

Pricing

Pay per event. All-empty results, technical errors, status rows, monitoring baselines, no-change runs, and cross-source duplicates are not product events. A partial analysis with at least one useful selected surface is one keyword-report event. Actor users are charged only the fixed event prices; Apify platform usage is included in those prices.

EventPrice
Keyword analysis report$0.75 per 1,000 reports
Shared-scale comparison report$3.75 per 1,000 reports
Deduplicated Trending Now result$0.55 per 1,000 rows
Trending monitor change$0.55 per 1,000 changes

maxItems caps paid output. Apify's maximum-cost-per-run setting can add an account-level spending limit. Before monitoring writes a transition, it checks that the remaining event budget covers every change. If not, it writes one free STATE_PRESERVED status, charges no transition row, and keeps the previous snapshot. Other modes stop writing paid rows when the limit is reached.

Data quality and reliability

  • Google Trends scores are relative and sampled. Repeating the same query can produce different values.
  • A timeline containing only zeroes can be a valid low-volume result.
  • Direct HTTP is used first. After a network error, 403, or 429, the whole logical operation is retried through at most five new sticky Apify residential sessions. Retries after the first residential attempt use bounded backoff.
  • Cookies, request parameters, and IP stay together for one logical operation.
  • Unknown RPC responses fail closed as contract drift instead of being hidden by proxy rotation.
  • A naturally empty analyze surface is reported in missingDataTypes without discarding other useful surfaces. A technical surface failure still produces a free error row after transport fallback.
  • Trending RPC and RSS are independent sources. One can produce explicit partial output when the other fails.
  • Monitor state is a single versioned SNAPSHOT in an isolated named key-value store. It is saved only after every transition row is written.

On 2026-09-26, the access R&D matrix completed 36/36 HTTP checks on Apify: 30/30 direct and 6/6 through sticky residential proxy. Local production smoke tests also completed analyze, compare, and dual-source trending flows. These are dated observations, not a guarantee against future Google changes or rate limits.

On 2026-09-27, raw-contract probes confirmed region identifiers for 16/16 Polish regions and 250/250 countries, coordinates for 200/200 US cities, and numeric growth for 42/42 sampled rising queries. Browser research completed 0/17 successful Related topics sessions, including 0/3 with Camoufox on independent residential IPs.

Current limitations

  • Related topics are not exposed. Related queries and topic suggestions are available and are different Google Trends surfaces. Chrome, Firefox, and Camoufox did not provide a reliable production path on the tested Apify proxy pool.
  • Google does not provide a supported public production API for this exact output. Endpoint changes can require an Actor update.
  • RSS Trending Now requires a two-letter country and returns fewer, news-focused rows than RPC.
  • The Actor does not provide absolute keyword search volume.
  • Long-running results can change while Google updates its live index.
  • Monitoring has no built-in webhook and requires one writer per monitor.
  • ENDED means absent from the configured top-N snapshot, not globally ended.

Use the Actor in accordance with Google terms, applicable law, and your own data processing obligations.

Development

Runtime and CI use Node.js >=20.19.

npm ci
npm run quality

npm run quality:audit runs the core stateless cloud matrix, npm run quality:audit-extended runs the conditional pairwise and boundary matrix, npm run quality:audit-invalid confirms invalid inputs remain free, and npm run quality:audit-monitor verifies a sequential baseline/no-change lifecycle. A manual release also runs the 50-term benchmark and npm run quality:audit-public for sync API, async API, views, OUTPUT, MCP, and Store before publication. Product decisions and live evidence are tracked in docs/backlog.md; architecture is in docs/diagram.md.