# Changelog of Google Ads Transparency Scraper + Creative Monitor (`produkdigitalali/google-ads-transparency-creative-intelligence-monitor`) Actor

- **URL**: https://apify.com/produkdigitalali/google-ads-transparency-creative-intelligence-monitor/changelog.md
- **Full Actor documentation**: https://apify.com/produkdigitalali/google-ads-transparency-creative-intelligence-monitor.md

## Changelog

### v0.1.8

- Added a stable direct-advertiser `prefill` so Apify Store automated quality tests never start the Actor with an empty target set.
- Added `maxAdsPerAdvertiser` prefill of 10 to keep the Store QA run fast and comfortably below the 5-minute test limit.
- Kept API/integration defaults unchanged (`advertiserIds` default remains empty and `maxAdsPerAdvertiser` default remains 100).
- Added an automated-QA input fixture and validator assertions to prevent this regression from returning.

### v0.1.7

- Added Pay Per Event monetization readiness after successful Cloud 10/50/100 full-detail benchmarks.
- Added `ad-processed` at $0.0008 per successfully processed creative.
- Monitoring comparisons are billable even when `emitChangesOnly` suppresses unchanged rows; failed creative-detail fetches are not billed.
- Added spending-limit preflight, per-unit charging, paid-prefix protection, incomplete-crawl safety, and aggregate billing diagnostics in `RUN_SUMMARY`.
- Added regression tests for zero budget, preflight truncation, runtime charge races, quiet baselines, unchanged monitoring, failed details, and previous-state preservation.

### v0.1.6

- Normalize HTTPX transport/protocol failures such as `RemoteProtocolError: incomplete chunked read` into retryable Google session/RPC errors instead of allowing them to crash the Actor.
- Reinitialize the Google public session and rotate the current proxy session when a transient transport failure occurs.
- Apply the same transport-error normalization to optional public media/landing-page fetches.
- Added Cloud-regression coverage proving an exhausted session transport failure is emitted as an advertiser-level error while the Actor itself finishes cleanly.

### v0.1.5

- Added `NEWLY_OBSERVED_AD` for creative IDs first seen after an incomplete baseline, preventing rotating Top-N Google result windows from being mislabeled as proven `NEW_AD`.
- `NEW_AD` is now reserved for creatives absent from a previous complete advertiser baseline.
- Reader/intelligence mode no longer reports synthetic `NEW_AD` counts when monitoring is disabled.
- Updated Store schema descriptions and README monitoring semantics for partial-crawl confidence.

### v0.1.4

- Rotate Apify Proxy sticky sessions across Actor runs instead of pinning the same target to one proxy IP indefinitely.
- Detect Google `google.com/sorry` redirects explicitly as `GOOGLE_BLOCKED` and rotate to a fresh proxy session before retrying.
- Rotate proxy sessions on HTTP 429 rate limits when a proxy provider is available.
- Skip the unnecessary Google session-initialization request when the input already contains a direct AR advertiser ID or Transparency URL.
- Reuse the final healthy Google proxy for optional media and landing-page enrichment after an in-run rotation.

### v0.1.3

- Reduced `SearchCreatives` page requests to a conservative 40 creatives per RPC page after a live 1,000-ad inventory run returned HTTP 302 HTML when the Actor requested 100.
- Added explicit 3xx handling for Google session/RPC calls so redirects are classified as `GOOGLE_SESSION_REDIRECT` / `GOOGLE_RPC_REDIRECT` instead of misleading `GOOGLE_INVALID_JSON`.
- Refresh the public session before retrying an RPC after a redirect.
- Expanded pagination ceiling for the 5,000-ad input limit and added 1,000-ID/25-page regression coverage.
- Fixed crawl-completeness bookkeeping when the final page exactly fills the requested limit, and keep empty pages with continuation tokens conservative/incomplete for stop safety.

### v0.1.2

- Canonicalize Google display preview wrapper URLs so volatile `htmlParentId` and `responseCallback` values do not create false `AD_UPDATED` events.
- Recompute previous-state creative hashes with current canonicalization rules to migrate v0.1.0/v0.1.1 state without a one-time update burst.
- Exclude first/last-shown date roll-forward from `AD_UPDATED`; those observation dates may advance while creative content is unchanged.
- Preserve stable Google preview query identity instead of collapsing every `content.js` preview to the same family path.
- Added regression tests from the first live Cloud monitoring runs.

### v0.1.1

- Fixed Apify Proxy session IDs so target-derived IDs are sanitized to the platform-accepted character set instead of silently falling back to direct connections.
- Added regression coverage for proxy session sanitization.

## Changelog

### 0.1.0

- Initial Google Ads Transparency reader and monitor.
- Keyword/domain/direct advertiser resolution with visible candidate ambiguity.
- Creative listing/detail extraction and deterministic creative hashes.
- Creative-family fingerprinting for text, image, and video creatives.
- Optional image SHA-256 + perceptual dHash enrichment.
- Deterministic advertiser intelligence summary without LLM costs.
- Optional public landing-page HTTP/SEO audit and monitoring.
- Persistent per-advertiser monitoring: NEW\_AD, AD\_UPDATED, POSSIBLY\_STOPPED, AD\_STOPPED, AD\_REACTIVATED, ADVERTISER\_ERROR/RECOVERED.
- Conservative stop detection: no stop inference from truncated, incomplete, or failed crawls.
- Public-network SSRF and redirect protections.
