# Changelog of Ad Library Scraper — No Login, Bulk CSV API (`apivault_labs/ad-library-scraper-facebook-tiktok-google-ads`) Actor

- **URL**: https://apify.com/apivault_labs/ad-library-scraper-facebook-tiktok-google-ads/changelog.md
- **Full Actor documentation**: https://apify.com/apivault_labs/ad-library-scraper-facebook-tiktok-google-ads.md

## Changelog

### \[0.12]

#### Added — keyword discovery and agent-first defaults

- Added explicit `competitor` and `discovery` modes. Discovery searches multiple
  Google advertisers and preserves keyword results across Meta and TikTok.
- Added `maxAdvertisers` to control discovery breadth and cost.
- Added query provenance to output rows and stable MCP retry guidance.

#### Changed

- Deploy now always targets the existing public Actor ID, preserving users,
  Tasks and run history while changing the SEO slug.
- Fast first-run defaults: 100 results, media rehosting off, zero media downloads.
- Store metadata now leads with the high-intent `Ad Library Scraper` category.

### \[0.11]

#### Changed — SEO name and worldwide default

- New technical slug: `ad-library-scraper-facebook-tiktok-google-ads`.
- Store title prioritizes the highest-intent category terms while staying inside Apify's hard 63-character limit: `Ad Library Scraper — Facebook, Meta, TikTok & Google Ad Spy`.
- The full long-form keyword title remains the README H1 and first paragraph, including Instagram and the complete category wording.
- Region now has an explicit `Worldwide — all available countries` default in the input UI.

#### Verified

- A live run with the `region` field completely omitted returned Google as `anywhere`, Meta as `ALL`, and swept every TikTok country supported by its transparency library.

### \[0.10]

#### Added — TikTok ads (EU/UK)

- New source: TikTok ads across EU/EEA + UK + CH + TR — videos, covers, first/last shown dates, impressions and audience size. No login needed.
- TikTok media can be saved as permanent copies (`rehostTikTokMedia`, default on; the platform's own links expire in ~24h).
- TikTok rows carry the same ecommerce fields (`resolvedBrand`, `matchConfidence`, `daysRunning`, status rows).

### \[0.9]

#### Changed — ecommerce/Shopify positioning + input UX

- Repositioned squarely for ecommerce & Shopify competitor research: new title, description, SEO title/description and categories.
- Input form organized into collapsible sections (Competitors / Filters / Sources / Media / Advanced) with chip-style multiselect fields, value suggestions and a region dropdown.
- Six focused dataset views: Ads overview, Creatives & media, Winning signals, Copy & offer, Landing pages, Run status.

### \[0.8]

#### Added — stable Meta media, freshness filter, per-brand status

- Meta images/videos can be saved as permanent copies in run storage (the platform's own links expire within days). Disable with `rehostMetaMedia`.
- New `startedWithinDays` input returns only ads launched in the last N days.
- Every ad now carries `daysRunning` — whole days the creative has been live.
- Brands with no delivered ads now produce a free, uncharged status row (`status`: `no_ads` / `no_confirmed_match` / `no_advertiser_found` / `fetch_failed`) so empty results are explainable.

#### Performance

- Media saving and brand discovery now run with bounded parallelism. Runs with many videos are several times faster.
- Improved retry handling for transient network errors.

### \[0.7]

#### Added — playable ad media

- Google video ads are resolved into real MP4 files (`sourceVideoUrl`, `videoId`, `videoDurationSeconds`).
- Google MP4 files can be saved as permanent copies in run storage (default on, 100 MB per video) with token-free signed `videoUrl` / `downloadMediaUrl` links.
- Google images now expose `primaryImageUrl`, `thumbnailUrl`, `downloadMediaUrl`, and `viewAdUrl`.
- Meta carousel/image/video media is promoted into `primaryImageUrl`, `primaryVideoUrl`, `thumbnailUrl`, `mediaType`, and `downloadMediaUrl`.
- Meta placements are explicit (`facebook`, `instagram`, `messenger`, `threads`, `audience_network`) with convenience booleans.
- Dataset overview renders creative thumbnails and clickable View ad / Open media / Landing page links.

#### Reliability

- Media saving is best-effort with graceful fallback; a media failure never discards the ad row.
- Saved media links do not expose any account credentials.

### \[0.6]

#### Added — parallel competitor fetching

- Multiple ecommerce competitors are now fetched concurrently.
- New `maxConcurrency` input (1–10, default 2, selected from live benchmarks).
- Fetching is parallel, while charging and dataset delivery remain ordered and sequential.

### \[0.5]

#### Added — ecommerce brand matching

- Ecommerce domains now fall back to their brand name when the raw domain is not recognized.
- Meta keyword results are verified against the requested store domain and Page name; unrelated advertisers are filtered out.
- Unified ecommerce fields across sources: `inputDomain`, `storeDomain`, `resolvedBrand`, `matchConfidence`, `matchSignals`, `headline`, `description`, `cta`, `landingUrl`, and `destinationDomain`.
- Ecommerce-focused dataset view covering Google, YouTube, Facebook and Instagram.

#### Fixed

- Pay-per-event charging is now verified before a result is pushed to the dataset.
- A wider candidate pool is scanned before strict matching, so early unrelated results no longer hide the correct brand.

### \[0.4]

#### Changed — repositioned for ecommerce / dropshipping ad research

- Same multi-platform ad spy (Facebook, Instagram, Google, YouTube), now focused on
  ecommerce & Shopify competitor research — find winning creatives, offers and
  landing pages your competitors are scaling.

### \[0.3]

#### Added — Facebook & Instagram (Meta) ad spy, built in

- Facebook & Instagram ads are now a built-in source — no login needed.
  See a competitor's live ads: ad copy, creatives (image/video), landing URLs,
  CTA, running dates and the platforms each ad runs on.
- On by default (`includeMeta`); uses the same domains/brand queries. Optional
  `metaPageIds` for spying a specific Facebook Page. Every ad carries a `platform`
  field.

### \[0.1]

#### Added — initial release

- Spy on any advertiser's live **Google Search, Display and YouTube** ads.
- Resolve competitors by **domain**, **brand / keyword**, or **advertiser ID** (bulk).
- Per ad: format, offer copy (headline / description / sitelinks), visible &
  destination URL, first/last shown, total days running, creative preview, and
  the advertiser's total ad count.
- Region filter, per-competitor limit, pay-per-result charging.
