Scrape Meta's Ad Library across Facebook, Instagram, WhatsApp, Threads, Messenger and Audience Network: ad copy, image and video URLs, landing page, platforms and days running. Switch on EU transparency for per-ad reach with an age, gender and country breakdown.
Added: UK reach and audience on ads shown in the UK (uk_total_reach, uk_age_country_gender_reach, uk_gender_audience, uk_age_audience, uk_location_audience), alongside the existing EU columns. Needs includeDetails.
Added: the advertiser identity published with political and issue ads (advertiser_verified_info: email, phone, website, address, committee id, treasurer, promoter) and advertiser_country_code. Empty on ordinary commercial ads.
Added: branded_content_page_id, branded_content_page_name, branded_content_page_url for partnership ads, and (with includeDetails) is_political_page plus the page's lifetime and weekly spend by disclaimer.
No existing field changed.
2026-10-12
Improved: when Meta briefly refuses a connection while fetching an ad's details, the run now asks again on a fresh connection before giving up on it, so more ads keep their details during busy periods. Output fields are unchanged.
2026-10-11
Improved: runs on the smaller memory settings now keep their memory use within the run's limit, so large runs at 256 MB no longer risk stalling near the limit. Output is unchanged.
Fixed: the filter inputs (Started After / Started Before, media type, ad type, active status, search type, platforms, languages) now also apply to Start URLs that do not set that filter themselves. A filter written into the URL still wins.
Fixed: a date the run cannot read (in the date inputs or in a Start URL) now stops the run with a clear message asking for YYYY-MM-DD, instead of silently searching without a date window.
Changed: Search Term(s) and Start URLs given together now both run. Links that are not Ad Library links get a warning naming them, and the run stops if none of the Start URLs is valid. Output fields are unchanged.
Fixed: a search could occasionally fail at its very first page when Meta briefly refused the connection, even though the same search worked a moment later. The run now tries once more on a fresh connection before giving up. Output fields are unchanged.
2026-10-10
Fixed: searches with a start-date window could leave out some ads from the start of the window while still reporting the search as complete. Every ad in the window is now returned. Output fields are unchanged.
Faster: searches with a start-date window (start_date[min] / start_date[max] in a Library URL, or the date inputs) now ask Meta for that window directly, so a run reaches maxResults in far fewer result pages instead of paging past older ads. Output fields are unchanged.
2026-10-09
Fixed: an advertiser page whose ads Meta does not show publicly could end the run as failed with "Could not read the results". The run now finishes normally and reports that no ads are available. Output fields are unchanged.
2026-10-08
Fixed: keyword searches could stop well before maxResults (for example at 150 of 300) even though more ads were available. They now continue to the limit you set. Output fields are unchanged.
2026-10-07
Fixed: a brief connection failure while reading further result pages could end that search early, so a run returned fewer ads than were available. The page is now read again on a fresh connection and the search continues from where it was. Output fields are unchanged.
Fixed: on runs covering several advertiser pages with includeDetails on, some ads could be delivered without their detail fields and some pages could stop early. Detail is now fetched reliably for every ad of the run. Output fields are unchanged.
Fixed: a run that is stopped before it finishes, by you or because a usage limit was reached, now closes cleanly and frees its saved-state reservation right away, so a restart is no longer turned away. Output is unchanged.
Fixed: pasting a Facebook page link (for example facebook.com/yourpage) instead of an Ad Library link ended the run with an internal error. It now stops with a clear message: open the page's ads in the Facebook Ad Library and paste that link, or search by the page name.
Fixed: when a run fails for a reason the actor can explain (an input it cannot use, or results it could not read), the run's status now shows that explanation instead of a generic "unexpected error, please try again later".
Fixed: an advertiser page whose ad count Meta shows but whose ads it withholds no longer fails the run; it reports zero ads for that page.
Fixed: a date-range run that stopped before it reached the range no longer says that no ads matched.
2026-09-30
Improved: runs with includeDetails whose first page needed an extra attempt now fetch the per-ad detail the same, cheaper way as every other run. Output is unchanged.
0.1.0 — 2026-09-01
First release.
Keyword and advertiser-page search across Meta's Ad Library, for any country the library serves.
Full creative per ad: copy, headline, caption, call to action, images, video, carousel cards, landing page and landing domain.
Ad lifecycle: start date, end date, whether it is still running, and how many days it has been live.
Dynamic-creative ads have their {{token}} copy resolved from the rendered variant.
Optional EU transparency enrichment (includeDetails): total EU reach per ad, the age / gender / country breakdown of who saw it, the targeting the advertiser set, plus the advertiser's Instagram handle, follower count and page description.
Filters matching the Ad Library UI: ad status, ad category, media type, platform, language, keyword matching and start-date window.
Incremental mode: after the first run, deliver only ads that are new or changed.