# Changelog of Pinterest Ad Library Scraper — Ad Search & Export (`devilscrapes/pinterest-ad-library-scraper`) Actor

- **URL**: https://apify.com/devilscrapes/pinterest-ad-library-scraper/changelog.md
- **Full Actor documentation**: https://apify.com/devilscrapes/pinterest-ad-library-scraper.md

## Changelog

### 0.2.0 — 2026-09-22

- **Fixed a dead output column.** The fleet-wide dead-field sweep found
  `advertiser_name` null on 90/90 rows of a live run. Root cause: it was
  never scraped data — it only ever echoed the customer's own
  `advertiser_name` input filter back, so on the common no-filter search it
  was always null. Live re-probing (227+ rows, 9 countries, multiple date
  windows, including `DISAPPROVED`/violation records, plus a warmed session
  hitting Pinterest's separate `advertiser_names` lookup endpoint) confirmed
  the Ads Repository payload itself never carries advertiser identity for
  anonymous callers — `ad_details.advertiser_names` is `null` on every
  sampled record, and the lookup endpoint 401s without a real Pinterest
  login.
- Real advertiser identity IS reachable, one level down: each pin's public
  detail page (`pinterest.com/pin/<id>/`) embeds the outbound `linkDomain`
  object (merchant domain + verified-merchant display name) as literal JSON.
  Added `fetch_advertiser_details` (default `false`) — an opt-in, paced,
  per-pin enrichment step that resolves the real name from that page.
  Off by default because it costs one extra ~1 MB request per unique ad and
  Pinterest visibly throttles rapid repeat hits to that page (a fresh
  session's 2nd/3rd request in quick succession already returns a smaller
  page missing the field) — verified live, not assumed.
- `advertiser_name` now resolves in priority order: (1) Pinterest's own
  `ad_details.advertiser_names`, read defensively in case it's ever
  populated for a request shape not yet observed; (2) the opt-in per-pin
  fetch above; (3) an echo of the `advertiser_name` input filter, same as
  before. Field kept for schema stability — no breaking change to existing
  integrations.

### 0.1.0 — 2026-09-13

- Initial build. Searches Pinterest's public Ads Repository
  (`GET /ads/v4/ads_repository/ad_library`) by country and date window,
  with optional advertiser name / gender / ad vertical filters. No login,
  cookies, or proxy required for a 200 — verified live from an EU IP on
  both `chrome131` and `firefox133` impersonation
  (`research/RECON-ad-library-round2-2026-09-13.md`).
- Walks the top-level `bookmark` pagination cursor, deduplicating by
  `pin_id` (recon measured ~33% cross-page repeats). Handles the sliding
  rate-limit window with a dedicated 45s backoff that resumes from the
  same bookmark, separate from the generic 408/503 transport retry.
- PPE pricing: `actor-start` $0.20 + `ad-result` $0.003 (~$3.20/1K ads),
  matching the fleet's other ad-library Actors.
- Scope is EU27 + Brazil + Turkey — not a global/US ad library. Stated
  plainly in the README; `country` input has no silent default.
