All notable changes to this Actor are documented in this file.
Reduce real (non-handshake) Google 429s on Apify datacenter proxies. On the 2026-09-09 v0.1.2 measurement (3 terms, datacenter proxy) 7 of 28 requests were real rate limiting (25%), above the 20% kill tripwire.
- Each unit of work (a term, or a compare-group of up to 5 terms) now starts with its own fresh cookie jar and Apify Proxy session by default, instead of a session potentially carrying over from a previous term.
requestsPerSession (default 8, unchanged) now bounds session reuse within one unit's own calls rather than across units.
- Rotating a session (on a real 429, or when
requestsPerSession is reached) always gets a new Apify Proxy session id, so a fresh cookie jar never rides on the same proxy IP as the session it replaced.
- New
pacingMs input (default 500 ms, 0 disables): a jittered delay (~0.6x-1.8x, so ~300-900ms by default) applied between every Trends request, spacing out both a session's own widget calls and the start of different terms/units rather than bursting them.
- Retry backoff (still 1s/2s/4s, capped, up to 5 attempts) is now jittered (~±15%) instead of a fixed delay, so retries from concurrent terms don't all land back on Google at the same instant.
- Explore/widget XHR calls now send the extra headers a browser sends for those calls specifically (
Accept, Accept-Language, Referer: https://trends.google.com/trends/explore, sec-fetch-*), consistent for every call in a session; got-scraping's own header generation is kept for the rest and pinned per session via sessionToken so the generated User-Agent/sec-ch-ua/TLS fingerprint no longer changes between calls in the same session.
- Sessions are now reused across all widget calls for a term, and across terms up to a configurable
requestsPerSession (default 8), instead of opening (and warming up) a fresh session for every single call. Cuts typical per-term request counts roughly in half.
- The run summary and
RequestStats now separate the expected cookie-handshake 429 (handshakes) from real rate-limiting (rate-limited) and retry attempts (retries), so requests=N no longer reads as if every 429 were Google throttling the run.
Initial release.
- Fetch Google Trends interest over time, interest by region, related queries, and related topics for 1-5 search terms per comparison (batched automatically above 5).
- Session pool with cookie-jar rotation and exponential backoff (1s, 2s, 4s, up to 5 attempts) on Google's 429 rate limiting.
- Optional Apify Proxy support via
proxyConfiguration; falls back to a direct connection when no proxy is configured.
- Configurable time range (presets or a custom
YYYY-MM-DD YYYY-MM-DD range), geo, category, search vertical (web/images/news/YouTube/Shopping), and region resolution.
compareTerms toggle: fetch terms on independent 0-100 scales (default) or as one relative comparison.
- Flat, CSV-friendly dataset rows with a stable
id, per Actor.pushData batching.
- Per-term error isolation: a term that fails after retries is logged as a warning and does not fail the run unless every term fails.