Apify Actor · early access
Meta Ad Library Scraper
Facebook and Instagram ads from the public Meta Ad Library as clean dataset rows. Search by keyword or by advertiser page and get the ad text, start date, platforms, call to action and destination domain. No login, no browser. A free status row says why when a search finds nothing or is blocked.
Early access: no Actor fee yet. You pay only Apify platform usage.
- 200 / 200Ads delivered for “running shoes” (US, active) in one run on Residential, 41 s (a small test)
- 186Unique ads from the Nike page in Brazil, all statuses, one run
- 10 / 10Searches that returned ads on Residential; 8 of 10 reached 50
- Early accessNo Actor fee yet
What it does
The Meta Ad Library, as rows.
Reads the public Meta Ad Library (ads on Facebook, Instagram, Messenger and Audience Network) and returns one dataset row per ad. Search by keyword, by advertiser page (numeric page ID), or paste an Ad Library URL with your filters already applied. No login and no Facebook account.
Each row carries adArchiveId, adUrl, pageId, pageName, isActive, startDate, endDate, platforms, displayFormat, text, title, ctaText, linkUrl, linkDomain, the image and video links, cards (carousel items), variations, searchCountry and scrapedAt.
Example: the Nike page in Brazil, all statuses, returned 186 unique ads in one run. The first, ad 1702938977100376, is active since 2025-04-07 on Facebook, Instagram, Audience Network and Messenger, says “Bring sports more fully into your day with the Nike App.”, has the call to action “Install now” and points to itunes.apple.com.
Free status rows. no_results, blocked, error and invalid_input, with a reason. A made-up search term came back as no_results in our tests.
Inputs
- searchTerms
- Keywords or brand names, one search each (e.g.
nike,tênis de corrida). - pages
- Numeric Facebook page IDs,
profile.php?id=links or Ad Library links withview_all_page_id=. Returns the ads of that advertiser. - libraryUrls
- Links copied from the Ad Library with filters already applied.
- country
- Two-letter code where the ads ran (
USby default,BR,GB...) orALL. - activeStatus
active(default),inactiveorall.- mediaType
all(default),image,video,memeornone(text only).- maxAds
- Ads per search, 50 by default. Volumes above 200 per search are not tested.
- proxyConfiguration
- Apify Proxy, Residential group by default. See “Why Residential” below.
Use cases
What it is built for.
-
Competitor ad research
See which ads a brand runs, since when, on which platforms and where they point.
-
Copy and offer swipe files
Collect ad text, headlines and calls to action for a keyword and country.
-
Campaign snapshots
Run the same search again later and compare the two datasets yourself.
-
Datasets for analysis and LLMs
Structured ad rows to sort, group and summarise, or feed to a model.
-
Matching advertisers across libraries
Use
pageNameandlinkDomainto line up the same advertiser with Google Ads data.
Proxy
Why Residential is the default.
The first page of results (about 27–30 ads) comes with the page itself. The next pages come from Meta’s own paging request, and Meta rate-limits it (“Rate limit exceeded”, code 1675004). Without a proxy or from datacenter IPs, that paging failed in every attempt of our comparison, so only the first page came back.
That is why proxyConfiguration defaults to the Residential group, also for API runs and Store tests that send no proxy input. On a rate limit the Actor waits, retries and switches to a new exit IP. Residential traffic (about 1 MB per 200 ads in our volume test) is part of your Apify platform usage.
These are small tests, not a guarantee. Even on Residential, 2 of 10 searches stopped around 30 ads.
Our tests, 9 Nov 2026
- No proxy
- 3 of 3 searches returned ads, but only the first page (27–30 each)
- Datacenter proxy
- 3 of 3 returned ads, only the first page (27–30 each)
- Residential (default)
- 10 of 10 searches returned ads; 8 of 10 reached the 50 requested
- Volume on Residential
- “running shoes”, US, active, 200 requested: 200 of 200 unique ads, 21 requests, 0 retries, 41 s. Nike page, BR, all statuses: 186 ads, the run ended without a status row (probably that page’s total for the filter; not confirmed)
Pairs with
Google Ads Transparency, side by side.
The Google Ads Transparency Scraper covers Google’s ad library. This Actor returns pageName and linkDomain; the Google one returns the advertiser name and, for search ads, the display URL. You can line up the same advertiser in the two libraries yourself, for example by brand name or by a domain such as nike.com.
There is no automatic cross-matching and no monitor mode in this version: each run is a fresh search, and the comparison is up to you.
Fields to match on
- pageName
- The advertiser’s name as Meta shows it (partnership ads show the creator’s name;
isBrandedContentmarks them). - linkDomain
- The domain the ad points to, e.g.
nike.com.br; missing when the ad has no link. - pageId
- Meta’s numeric page ID, to repeat a search for the same advertiser.
Price
Early access, no Actor fee yet.
Early accessno Actor fee yet
Early access: no Actor fee yet. You pay only standard Apify platform usage, including the Residential proxy (in our tests on 9 Nov 2026: about US$ 0.05–0.08 per 1,000 ads). Pay-per-result pricing may be introduced later; Apify notifies users 14 days in advance.
Open on ApifyWhat you pay
- Actor fee
- None yet
- Apify platform usage
- Standard Apify rates, including Residential proxy
- Status rows
- Free rows that say why a search returned no ads
Good to know
Limits, stated plainly.
What the rows can and cannot tell you.
- Not affiliated with Meta. Independent tool.
- Public Ad Library data only, no login. Respect Meta’s terms of use and check what you may do with the data.
- Meta rate-limits the paging: some searches stop around 30 ads even on Residential. Volumes above 200 ads per search were not tested.
- Page names such as facebook.com/nike cannot be resolved without a login: use the numeric page ID, found in the advertiser’s Ad Library link.
- The Actor depends on undocumented Ad Library internals (including a query ID that Meta can change). When that happens, runs fail with a clear status and the Actor needs maintenance.
- The Residential proxy is the default and adds to your Apify platform usage.
- Meta does not show spend or reach for non-political ads, so those figures are not in the rows.
- Information only, not legal or advertising advice.
More from Errand Code
Other products.
- GEOAI visibility auditView product →
- Google Sheets add-onCNPJ & CEP for Google SheetsView product →
- MCP serverBrazil Company Due DiligenceView product →
- MCP serverBrazil Public ProcurementView product →
- MCP serverEU VAT & Peppol E-Invoicing CheckView product →
- Apify ActorAmericanas Product ScraperView product →
- Apify ActorGoogle Ads Transparency ScraperView product →
- Apify ActorCNPJ Due DiligenceView product →
- Apify ActorBuscapé Price ScraperView product →
- Apify ActorGoogle Trends ScraperView product →
- Apify ActorYouTube TranscriptsView product →