Google Trends live feed polling via API

The Google Trends live leaderboard updates on a rolling schedule. Polling it through get_top_trends returns ranked query strings, an as_of_ts freshness stamp, and pagination controls. This page covers poll intervals, request budgeting, snapshot diffing, and when to escalate a spotted term to historical growth checks.

The Google Trends website shows a ranked list of queries gaining traction right now. The same leaderboard is available programmatically through get_top_trends with type set to Google Trends. Unlike keyword history calls, this mode needs no keyword argument. One request returns the current board.

For the broader Google Search integration and MCP setup, see Google Trends data for AI assistants.

Request shape and response fields

REST call:

{
  "mode": "get_top_trends",
  "type": "Google Trends",
  "limit": 25,
  "offset": 0
}

MCP equivalent: get_top_trends(type="Google Trends", limit=25).

A live response on 2026-07-25 returned:

{
  "as_of_ts": "2026-07-25T04:01:42.229953+00:00",
  "type": "Google Trends",
  "limit": 10,
  "offset": 0,
  "count": 10,
  "data": [
    [1, "kaylee hottle"],
    [2, "tropical storm bertha"],
    [3, "shakira"],
    [4, "andrew tate"],
    [5, "avengers doomsday"],
    [6, "alaska airlines boeing 787-9 emergency"],
    [7, "tornado watch"],
    [8, "weather"],
    [9, "masters of the universe"],
    [10, "nivea"]
  ]
}

Each data row is [rank, query_string]. Ranks are 1-indexed. The query string is the exact text to pass as keyword on downstream get_growth or get_time_series calls.

FieldTypeUse
as_of_tsstring (ISO 8601 UTC)Freshness stamp for the snapshot
typestringEcho of the feed requested
limitintegerMax rows returned (default 25, max 200)
offsetintegerRows skipped for pagination (default 0)
countintegerRows in this response
dataarrayRanked [position, term] pairs

Pagination beyond the top 25

Default limit is 25. Raise it to 50 or 100 when monitoring long-tail entries that enter below rank 25 before breaking into the visible board. Use offset to page deeper:

{"mode": "get_top_trends", "type": "Google Trends", "limit": 50, "offset": 50}

Each paginated call still costs one request. A job that fetches ranks 1-50 in two 25-row pages spends two requests per poll cycle. Prefer a single call with limit: 50 when the quota allows.

Poll interval selection

The upstream Google Trends board refreshes on its own schedule, not on every API call. Polling faster than the feed updates wastes quota without adding signal.

IntervalRequests/dayRequests/month (30 days)Best for
5 minutes2888,640Paid plans, breaking news desks
30 minutes481,440Newsroom monitoring with growth confirmation
1 hour24720Daily brief automation
6 hours4120Free-tier discovery with manual follow-up
1 per day130Free-tier trend scanning

Store each response keyed by as_of_ts. If a new poll returns the same as_of_ts as the prior poll, skip diff logic until the timestamp advances.

Snapshot diffing between polls

Compare the data array from poll N against poll N-1:

New entry rule: Flag any query absent from the previous snapshot.

Rank jump rule: Flag any query that moved up five or more positions.

Exit rule: Note terms that dropped off the board. They may still hold elevated volume but lost relative rank to faster-rising queries.

Persist diffs in a table with columns for term, prior_rank, current_rank, as_of_ts, and alert_status. This table feeds downstream growth confirmation without re-polling the leaderboard.

Escalation to historical checks

Leaderboard presence alone does not prove sustained demand. After diffing, escalate flagged terms:

Step 1: growth snapshot

{
  "mode": "get_growth",
  "source": "google search",
  "keyword": "tropical storm bertha",
  "percent_growth": ["7D", "30D", "12M"]
}

One request returns all three periods. If google search returns data_unavailable, the upstream pipeline may be temporarily empty for that term. Retry on the next poll cycle or check news volume and google news for the same keyword.

Step 2: time series context

{
  "mode": "get_time_series",
  "source": "google search",
  "keyword": "tropical storm bertha"
}

Five years of weekly points (~261 rows) show whether the spike is novel or a seasonal replay. Skip this step when quota is tight and the 7D growth already looks flat.

For spike threshold math and false-positive filters, see Google Trends breakout detection via API.

Error handling during polls

Status / errorMeaningAction
200 with new as_of_tsFresh snapshotRun diff logic
200 with same as_of_tsNo upstream refreshBack off interval
401Invalid or missing API keyFix Authorization header
429Monthly quota exhaustedUpgrade plan or pause polls
data_unavailable on growth follow-upTemporary pipeline gapQueue term for retry

Production schedulers should treat data_unavailable as retryable, not as proof that interest is zero.

MCP prompts for ad-hoc polling

Inside Claude, Cursor, or ChatGPT with Trends MCP connected:

The assistant routes to get_top_trends and chains growth calls in one session. Cron jobs should use REST directly to avoid LLM latency on each poll.

Quota planning for multi-feed monitors

Teams polling Google Trends alongside X, Reddit, and TikTok feeds multiply costs linearly. Each feed type is a separate get_top_trends call:

{"mode": "get_top_trends", "type": "X (Twitter) Trending", "limit": 25}

Four feeds polled hourly cost 96 requests per day. Batch feeds into one cron window and share the diff table schema across platforms. For cross-feed architecture, see the real-time trends API.

Common questions

Send POST to https://api.trendsmcp.ai/api with mode get_top_trends, type Google Trends, and an optional limit up to 200. One successful call returns the current ranked list, an as_of_ts timestamp, and counts. On MCP, pass the same type string to get_top_trends. The feed label is case-sensitive and must match Google Trends exactly.
as_of_ts is the ISO 8601 UTC timestamp when the upstream leaderboard snapshot was captured. Compare it across polls to detect stale caches. If two consecutive polls return the same as_of_ts and identical data arrays, the upstream feed has not refreshed yet. Back off the poll interval until as_of_ts advances.
One get_top_trends call counts as one request regardless of limit or offset. Polling every 30 minutes uses about 48 requests per day, or roughly 1,440 per month. Polling once per hour uses 24 per day, about 720 per month. The free tier allows 100 requests per month, so continuous polling requires a paid plan or a slower cadence.
Run get_growth on google search when a term enters the top 25 for the first time or jumps five or more rank positions between polls. If google search returns data_unavailable, retry later or cross-check on tiktok, youtube, or news volume. Follow with get_time_series when the term needs five-year context before an alert fires.