# Changelog of Facebook Ads Library Scraper · No Login · $0.3/1k (`alfalfa/facebook-ads-library-scraper`) Actor

- **URL**: https://apify.com/alfalfa/facebook-ads-library-scraper/changelog.md
- **Full Actor documentation**: https://apify.com/alfalfa/facebook-ads-library-scraper.md

## Changelog

### 2026-10-02 (newest first, faster watchlist runs)

- **Date sorting is now newest first**: `sortBy: "date"` (the default) uses the Ad Library's *Most recent* order, newest ads first by the month they started. Before, it returned Facebook's relevance order across all years. Ads that share a creative come as a group and Facebook lists only part of each group, so the same search can now return a different (often larger) set of those ads. A watchlist with *New ads only* receives those additional ads once, on its first run after this change.
- **Watchlist runs read only what can be new**: with `newAdsOnly` and date sorting, each search is read to the end once a day; the runs in between stop when they reach ads older than that complete pass, so frequent schedules finish after a few pages. An older ad that newly matches the search arrives with the next complete pass. The watchlist store keeps the time of each complete pass in the record `full-passes`.
- A search whose ads were all delivered before is no longer reported as "no ads match this search" when Facebook ends the list with an empty page.

### 2026-10-01 (reliability)

- When Facebook briefly refuses the Ad Library, the scraper now retries with a fresh connection instead of repeating the refused one, so such runs recover instead of failing after a minute.

### 2026-09-23 (run log)

- Network error messages in the run log no longer include the address of the request that failed (the 2026-09-14 change removed server addresses only).

### 2026-09-17 (watchlist, page URLs, sorting, languages, relative dates)

- **Only new ads**: `watchlistId` names a watchlist (a key-value store `watchlist-<name>` in your account) that remembers every delivered ad; with `newAdsOnly` on, ads delivered by an earlier run with the same name are skipped, not charged, and counted in the log ("N ads already delivered on this watchlist skipped"). Made for schedules.
- **Page URLs as input**: `startUrls` accepts plain Facebook page URLs such as `https://www.facebook.com/Nike` (also `m.facebook.com`, a tab like `/Nike/about`, `profile.php?id=...`, with or without a trailing slash or query) next to Ad Library URLs and page IDs. The advertiser page ID is looked up from the page. A page that does not exist is reported and skipped without failing the run.
- **Sort by impressions**: `sortBy` = `impressions` returns the most viewed ads first (the Ad Library's "Impressions: high to low"), useful for issue, election and political ads, which are the ones with impression ranges. `sort_data[mode]=total_impressions` in an Ad Library URL does the same.
- **Ad languages**: `contentLanguages` (ISO 639-1 codes such as `de`) returns only ads written in those languages; `content_languages[0]=de` in an Ad Library URL works too.
- **Relative dates**: `startDateMin` and `startDateMax` accept `7d`, `30 days`, `3 weeks`, `2 months`, `1 year`, `today` and `yesterday` (relative to the run start, UTC) as well as `YYYY-MM-DD`. Their descriptions now say what Facebook filters on: ads that were shown in the range (the Ad Library's "Impressions by date"), not ads that started in it.

### 2026-09-17 (prices)

- Prices lowered: $0.45 per 1,000 ads on the free plan, $0.40 / $0.35 / $0.30 on Starter / Scale / Business (was $0.50 / $0.45 / $0.40 / $0.35). Still no start fee; the price per ad is the final price, platform usage included.

### 2026-09-15 (country names)

- The country filter accepts country names (`Thailand`), three-letter codes (`THA`) and common short names (`UK`, `USA`) as well as two-letter codes. Before, a country name made the run fail.
- A country that cannot be recognized ends the run straight away with a status message that says how to fix it, and nothing is charged.
- Kosovo (`XK`) is accepted. "Congo" alone ends the run with a message asking for `CG` or `CD`, because it can mean either country; "Republic of Congo" and "Democratic Republic of Congo" are recognized.
- A country field that cannot be recognized no longer stops a run whose Ad Library URLs all set their own country.

### 2026-09-14 (run log)

- Network error messages in the run log no longer include server addresses.

### 2026-09-10 (first release)

- Search the Meta Ad Library by keyword, advertiser page ID or Ad Library URL (keyword, page or single ad), without a login.
- Filters: country, ad status, media type, special ad category, platforms, keyword matching, start date range.
- Same output fields as the official Facebook Ads Scraper, including the `snapshot` creative block; optional `ad_details` with advertiser info, payer and beneficiary and the EU transparency reach breakdown, at no surcharge.
- $0.50 per 1,000 ads, no start fee. Run budget honoured before an ad is fetched, so a run never overshoots the limit you set.
- Bad inputs (wrong URL, page without ads, unknown page ID) end the run with a status message instead of a failure.
