1.1 (2026-05-13): Reliability overhaul. Root cause of empty datasets fixed — Google's consent.google.com redirect was returning HTML from /trends/api/widgetdata/* on most non-warm sessions. Added pre-seeded CONSENT cookies, residential proxy with geo-matched country, HTML-response detection with session rotation, multi-attempt explore + widgetdata, explicit Actor.fail when 0 records returned, per-stage status messages, 600s timeout / 1024MB memory.
v1.2 (2026-05-13) — Reliability: bumped multi-keyword multiline endpoint retries 5→12 with exponential backoff. Diagnosed from dashboard: 2/8 recent runs failed because Google's widgetdata endpoint blocked multi-keyword queries through every retry attempt. Single-keyword queries already succeed within 3-4 attempts. The combination of more attempts + exponential backoff (1.4x growth, capped at 12s) gives the rate-limiter time to cool off without exceeding the run's timeout budget.
v1.3 (2026-05-22) — Soft-fail user-input validation: convert Actor.fail on missing/invalid input to Actor.exit with WARNING status. Prevents user-input errors from counting as actor failures and dragging down 30-day success rate.
v1.4 (2026-06-11) — Antibot-block reliability fix. Diagnosed cause: widgetdata (multiline/relatedsearches) looped on Google's consent/block HTML because the residential pool got fingerprinted and immediate same-pool rebuilds re-hit the rate-limiter (4 FAILED + 2 TIMED-OUT of last 25). Fixes: (1) longer exponential cooldown between retries (1.6x growth, cap raised 12s→30s, 429s→45s) so Google's rate-limiter relaxes; (2) per-retry rotation across DISTINCT residential pools (primary-geo → US → GB) instead of rebuilding the same country; (3) wall-clock soft deadline (540s) that stops new retry attempts before the 600s timeout so partial data is pushed and the run exits SUCCESS instead of TIMED-OUT; (4) single-keyword multiline now gets the same 8-attempt budget as multi-keyword (one FAILED run died at the old 5-attempt cap); (5) safePushData wraps every pushData to catch dataset-schema validation errors and retry a minimal-compliant record so one bad row never fails the run (fixes a trending_searches Schema-validation FAILED run). No scraping/extraction logic changed.
v1.5 (2026-06-11) — Never-FAIL hardening. Converted the two remaining Actor.fail() paths to clean SUCCESS so target rate-limits/anti-bot blocks no longer count as failures: (1) explore-API block after all retries, and (2) the targeted '0 data returned for any requested type — Google likely rate-limited this run' finalize path. Both now set a terminal WARNING status, push exactly ONE dataset_schema-valid diagnostic row (type=diagnostic, all-string fields, no nulls/nested) explaining the rate-limit + retry-later guidance, then Actor.exit() (exit 0). Bad-input branches (no keywords / >5 keywords) also now emit a diagnostic row so the dataset is never silently empty. Retry/backoff + distinct-pool rotation + safePushData from v1.4 retained unchanged. The run can now only FAIL on a genuine unrecoverable code crash.