Google Trends API — Pay Per Result, No Empty Charges avatar

Google Trends API — Pay Per Result, No Empty Charges

Pricing

from $5.00 / 1,000 keyword results

Go to Apify Store
Google Trends API — Pay Per Result, No Empty Charges

Google Trends API — Pay Per Result, No Empty Charges

Google Trends via a resilient API: interest over time, cross-term compare (one 0–100 scale), related, interest by region, realtime trending. Pay per result — never charged for empty data.

Pricing

from $5.00 / 1,000 keyword results

Rating

0.0

(0)

Developer

Sergei Peleskov

Sergei Peleskov

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

0

Monthly active users

2 days ago

Last modified

Share

Google Trends data through a resilient API: interest over time, cross-term compare (2–5 keywords on one shared 0–100 scale), related queries & topics, interest by region, and realtime trending. You pay per result — and never for empty data.

Built for people who tried the official Google Trends API and hit its walls: alpha status, quotas, Google Cloud auth, and no recent/realtime data.


Why this Actor

This ActorTypical / official Trends API
Pay for empty results❌ Never — empty = no_data, not billed✅ You pay for the call regardless
Realtime windows (now 1-Hnow 7-d)✅ Yes❌ Official alpha has no recent data
Retries + residential rotation✅ Built in — survives the first 429, doesn't fall over❌ You handle 429s / IP bans yourself
Cross-term scaling (up to 5 keywords, one 0–100 scale)✅ Yes❌ Single-keyword scales only
Related + interest-by-region✅ One Actor, one contract⚠️ Fragmented / partial
Pricing✅ Pay-per-event, pay for what you use❌ Quota tiers / rental subscription

Reliability (retries, residential IP rotation, backpressure with Retry-After) is handled server-side — you just get stable results that don't break on the first rate-limit.


Scrape types

Pick one via scrapeType:

  • interestOverTime — popularity of each keyword over time (independent 0–100 scale per keyword).
  • compare — 2–5 keywords on one shared 0–100 scale (cross-term scaling). One request, one price — comparable numbers across terms.
  • related — top & rising related queries and topics.
  • interestByRegion — geographic breakdown (COUNTRY / REGION / CITY / DMA).
  • trendingNow — realtime trending searches for a location.

Input

{
"scrapeType": "interestOverTime",
"keywords": ["bitcoin", "ethereum"],
"geo": "US",
"timeRange": "today 3-m",
"category": 0
}
FieldTypeNotes
scrapeTypeenuminterestOverTime | compare | related | interestByRegion | trendingNow
keywordsstring[]1–50; exactly 2–5 for compare; not required for trendingNow
geostring"" = worldwide, US, US-CA
timeRangeenumnow 1-Hnow 7-d, today 1-mtoday 5-y, all, custom
customTimeRangestringwhen timeRange=custom: YYYY-MM-DD YYYY-MM-DD
categoryintegerGoogle category id, 0 = all
resolutionenuminterestByRegion only: COUNTRY/REGION/CITY/DMA

No proxy configuration — residential rotation is included.


Output

One dataset item per keyword × scrape type (compare = one item for the group). Data mirrors the normalized API schema, plus the request fields (kw/keywords, geo, time) for easy filtering.

interestOverTime

{ "scrapeType": "interestOverTime", "kw": "bitcoin", "geo": "US", "time": "today 3-m",
"points": [{ "date": "Jun 1, 2026", "value": 52, "isPartial": false }] }

compare (one shared 0–100 scale, order preserved)

{ "scrapeType": "compare", "geo": "US", "time": "today 3-m",
"keywords": ["btc", "eth", "doge"],
"points": [{ "date": "Jun 5, 2026", "isPartial": false,
"values": { "btc": 100, "eth": 26, "doge": 13 } }],
"keywords_meta": {} }

Low-volume terms come back with values: 0 and a keywords_meta[kw]: "low_volume" flag — the run never fails on them.

No data / failed (never billed)

{ "scrapeType": "related", "kw": "asdfqwerzxcv", "geo": "US", "status": "no_data" }

Pricing (pay per event)

You are charged only for delivered non-empty results:

EventWhenPrice
keyword-resultone keyword returned data (iot / related / region)$0.005
compare-resultone 2–5 keyword comparison returned data (once, not ×5)$0.005
trending-pageone realtime trending page returned data$0.005

Never charged: empty results (no_data), failed requests, or any error. Compare is one event for the whole group — that's the point of batching.


FAQ

How is this different from the official Google Trends API? The official API is alpha: quota-limited, requires Google Cloud auth, and has no recent/realtime data. This Actor gives realtime windows (now 1-Hnow 7-d), needs only an Apify token, and bills per delivered result instead of per quota unit.

Why did I get no_data for a keyword? Google returned a valid response with no data for that term (too low volume, or no coverage in the geo). It's in the dataset with status: "no_data" and is not billed.

What happens under heavy load? The backing service applies backpressure (503 + Retry-After); the Actor honors it — waits and retries automatically, so your run doesn't drop requests.

Can I compare keywords on the same scale? Yes — scrapeType: "compare" with 2–5 keywords puts them on one shared 0–100 scale (cross-term scaling), so the numbers are directly comparable.


Integrations

Works with the Apify API, n8n, Make, and MCP — run it and pull results from the dataset like any Actor.

Example (API run input):

{ "scrapeType": "compare", "keywords": ["btc", "eth", "doge"], "geo": "US", "timeRange": "today 3-m" }

Notes for operators

  • Requires two secret environment variables on the Actor: GATEWAY_URL and GATEWAY_API_KEY (never in input, never hardcoded).
  • Optional env: ACTOR_CONCURRENCY (default 8), GATEWAY_RETRY_503 (default 6).