# Changelog of Google Trends Scraper : related queries, by region, CSV/JSON (`tallyrake/google-trends-scraper`) Actor

- **URL**: https://apify.com/tallyrake/google-trends-scraper/changelog.md
- **Full Actor documentation**: https://apify.com/tallyrake/google-trends-scraper.md

## Changelog

All notable changes to this Actor are documented in this file.

### 0.1.11 - 2026-09-09

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.

### 0.1.5 - 2026-09-09

- Store copy rewrite.

### 0.1.2 - 2026-09-08

- 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.

### 0.1.0 - 2026-09-08

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.
