# Changelog of Google Ads Transparency API — Real-time Ad Lookup (`foxlabs/google-ads-transparency-api`) Actor

- **URL**: https://apify.com/foxlabs/google-ads-transparency-api/changelog.md
- **Full Actor documentation**: https://apify.com/foxlabs/google-ads-transparency-api.md

## Changelog

### 0.1.11 — 2026-09-27

Same code as Google Ads Transparency Scraper 0.1.15.

- README: OCR takes 0.6–7.5 s per picture, depending on how busy the platform's server is (it said about 3–4 s; measured in four runs of Google Ads Transparency Scraper on 2026-09-27, same code and memory). No code change.

### 0.1.10 — 2026-09-27

Same code as Google Ads Transparency Scraper 0.1.14.

- **Minimum memory is 512 MB** (was 256 MB). With OCR, memory use peaked at about 240–340 MB, and a run at 256 MB was stopped for lack of memory. The API's Standby runs use 1 GB and are not affected.
- The input form of a batch run starts at 10 ads per query (`maxAdsPerQuery`). Requests to the API are not affected.

### 0.1.9 — 2026-09-26

Same code as Google Ads Transparency Scraper 0.1.13.

- **Text of image-only ads (OCR).** Google keeps many ads only as a picture. The API now reads the text in the picture (Tesseract; English, German, French, Spanish, Portuguese, Italian, Dutch, Polish, Turkish; the models ship with the Actor). Such items get the text in `adTexts`, `adCopyStatus: "ocr"` and `ocrConfidence` (0–100); pictures that hold no ad get `"image-placeholder"`. On by default; turn it off with `ocr=false`. Text read this way counts as ad copy.

### 0.1.8 — 2026-09-26

Same code as Google Ads Transparency Scraper 0.1.9 (fixes from the pre-publication checks). For this API:

- **Invalid parameters are answered with HTTP 400 and the reason** instead of being dropped: an unknown `region`, `adFormat`, `platform` or `datePreset`, a malformed or reversed date, a non-numeric `maxAds` / `maxAdvertisers`, or a blank `query`. Before, an unknown filter returned unfiltered ads, and a non-numeric `maxAds` paged through the whole account and returned nothing.
- **Dates:** `dateFrom` / `dateTo` sent without `datePreset` (or with `any`) are applied as a custom window. A fixed period such as `last30` takes precedence, and the response's `dateNote` says so.
- **Brand names:** when no advertiser carries the exact name, `report.note` says that the closest match was used (Google's name lookup is accent-sensitive).
- **Shopping items have a `price` field**, and `merchantName` no longer holds a price or a condition label (34 of 111 values in the scraper's test runs).
- **Creative URLs** return `format`, the advertiser name and the YouTube ID; the video player's notice is no longer reported as ad text.
- **Not ad content anymore:** Material icons and Google Maps pins in `imageUrl`, and invisible direction marks around text lines. Previews refused with HTTP 429 get a second proxy attempt.

### 0.1 — 2026-09-23

First version: the Google Ads Transparency Scraper's logic as a real-time HTTP API (Standby mode).

- `GET /ads` — ads of a domain, brand, advertiser ID or Transparency Center URL, up to 100 per request, with the same fields as the batch Actor's dataset (ad copy, landing page, YouTube ID, per-country impressions for the EEA and Turkey, platforms, targeting, topic, advertiser legal name).
- `GET /advertisers` — advertiser lookup by name, best match first. Not billed.
- Same pay-per-event events as the batch Actor: `ad`, `ad-detail`, `ad-copy`.
- OpenAPI 3 description of the endpoints.
- Brand-name queries pick among the brand's advertiser entities by the requested region, then by ad volume: "Nike" → Nike, Inc., "Decathlon" in France → Decathlon France SASU (the Decathlon case was measured on the platform; both are covered by tests).
- Ad previews are read in all three shapes seen on the platform (HTML, renderer config with app fields, video without HTML); previews refused with HTTP 429 are retried and then fetched through a proxy.
- On the proxy a new session is used whenever Google refuses the current one; eight ads are processed at a time. Google Maps preview buttons are not reported as ad copy.
- Targeting: `topicsOfInterest` and `customerLists` were swapped in private test builds 0.1.1–0.1.5; fixed in 0.1.6 and cross-checked against Google's BigQuery dataset. Previews Google cannot draw are reported as `adCopyStatus: "preview-unavailable"`.
