Facebook Ads Library Scraper: every ad version, no login
Pricing
from $0.25 / 1,000 ads
Facebook Ads Library Scraper: every ad version, no login
Pricing
from $0.25 / 1,000 ads
Rating
0.0
(0)
Developer
Alex Morain
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
a day ago
Last modified
Categories
Share
What does Facebook Ads Library Scraper do?
It scrapes the Meta Ad Library and returns every Facebook, Instagram, Messenger and Threads ad of a brand: text, headline, images, videos, carousel cards, landing page, call to action, start and end dates, platforms. You give it a brand name, a Facebook page URL, a keyword or a pasted Ad Library URL. No login, no cookies, no Meta developer token: it works as a Facebook Ad Library API alternative that covers commercial ads in every country, which the official API does not (it only returns political ads, plus ads delivered in the EU and UK).
The difference with other Ad Library scrapers is the version groups. The Ad Library list groups near-identical ads and shows one ad per group, with a "This ad has multiple versions" link. Other scrapers return that one ad and a collation_count. This Actor opens each group and returns every version as its own row, with its own ID, dates and text.
Measured on 18 October 2026, page Decathlon France, all ads in France, first 1,000 ads:
| Ads | |
|---|---|
| Listed by the Ad Library (one per group) | 655 |
| Hidden in 149 version groups, unfolded by this Actor | 345 |
| Total returned | 1,000 |
On that page, a scraper that reads the list only misses one ad in three. It matters most for competitor monitoring: a new version added to an existing group never shows up in the list, so a "new ads only" check built on the list does not see it.
Why scrape the Meta Ad Library?
- Competitor monitoring: what a brand runs right now, since when, on which platforms, with which offers and landing pages.
- Creative research: build a swipe file of ad texts, images and videos for a market.
- Agency reporting and pitches: export a prospect's ads in one click before a meeting.
- Alerts: schedule the Actor daily in New ads only mode and get a webhook when a competitor launches something.
What you get with this Actor:
- Brand names resolved to the right Facebook page, the way the Ad Library search box does it for your country. Searching a brand as a keyword returns resellers and fan pages too (20% of the results for "decathlon" in France), searching by page does not.
- Every version of every ad, hidden versions marked
fromVersionGroup: true. - All the Ad Library filters: country, active or inactive, ad category, media type, platform, language, date range.
- New ads only mode with a persistent registry, and an optional webhook at the end of the run.
- Plain HTTP requests, no browser, so runs are fast and cheap. Apify scheduling, API, integrations and monitoring come with it.
What data can it extract?
| Field | Type | Description |
|---|---|---|
adArchiveId | string | Ad Library ID of the ad |
adLibraryUrl | string | Public page of the ad |
pageName, pageId, pageUrl | string | Advertiser page |
pageLikeCount | integer | Likes of the advertiser page |
isActive | boolean | Running now or stopped |
startDate, endDate, daysRunning | string, integer | When it ran, in days |
publisherPlatforms | array | FACEBOOK, INSTAGRAM, MESSENGER, THREADS, AUDIENCE_NETWORK |
displayFormat | string | IMAGE, VIDEO, CAROUSEL, DCO (dynamic creative), DPA (catalog) |
body, title, linkDescription | string | Ad text, headline, link description |
linkUrl, caption | string | Landing page and displayed domain |
ctaText, ctaType | string | Call to action |
imageUrls, videos, cards | array | Creatives, carousel and dynamic cards |
collationId, collationCount | string, integer | Version group and its size |
fromVersionGroup | boolean | true when the ad was hidden in a version group |
spend, impressions, currency | object, string | Political and issue ads only |
input, inputType | string | Which line of your input found the ad |
How to scrape Facebook ads
- Open the Actor and type a brand in Advertisers, for example
Decathlon, or paste its Facebook page URL. - Pick a country if you want the ads shown there only. Leave it empty for all countries.
- Choose active ads, inactive ads or both.
- Set Max ads per search, or 0 for everything.
- Press Start, then download the results as JSON, CSV, Excel or HTML, or read them through the API.
To follow a market instead of a brand, use Search terms (running shoes). To reproduce a search you built on the Ad Library website, paste its URL in Ad Library URLs: the filters in the URL are kept.
How much does it cost to scrape the Facebook Ad Library?
You pay per ad returned, plus a small start fee. On the Free plan, 1,000 ads cost $0.50, and the price per ad goes down on paid Apify plans, to $0.25 per 1,000 ads from Gold. Platform usage (compute, proxies) is included in that price. Hidden versions unfolded from a group are ads and are charged as ads: turn Every version of each ad off to get only what the Ad Library list shows.
A brand with 1,000 ads takes about six minutes. New ads only runs read the whole search again but charge only the ads never returned before, so a quiet day costs the start fee.
Input
See the Input tab for every option. The ones that need a word:
- Advertisers accepts a name, a page URL (
https://www.facebook.com/brand/) or a page ID. For a name, the log prints the page chosen and the other matches with their IDs. Big brands run ads from several pages (per country, per product line): raise Pages per advertiser name, or paste the page IDs you want. - Shown from and Shown until follow Meta's rule: an ad is kept if it was shown at some point in the window, even if it started before. To filter by launch date, use
startDatein the results. - Countries: several countries are searched together and each ad comes out once.
Example input:
{"advertisers": ["Decathlon", "https://www.facebook.com/nike/"],"countries": ["FR"],"activeStatus": "active","maxAdsPerSearch": 500}
Output
You can download the dataset in various formats such as JSON, HTML, CSV, or Excel. Two items, shortened:
[{"adArchiveId": "1600894127669355","adLibraryUrl": "https://www.facebook.com/ads/library/?id=1600894127669355","pageName": "Example Sports","pageId": "122695097770591","isActive": true,"startDate": "2026-09-14","endDate": "2026-10-16","daysRunning": 33,"publisherPlatforms": ["FACEBOOK", "INSTAGRAM"],"displayFormat": "CAROUSEL","body": "Ready for the next run? New trail shoes are in.","linkUrl": "https://www.example.com/trail-shoes","ctaText": "Shop now","collationId": "1403288121396887","collationCount": 3,"fromVersionGroup": false,"input": "Example Sports","inputType": "advertiser"},{"adArchiveId": "2379460792481796","adLibraryUrl": "https://www.facebook.com/ads/library/?id=2379460792481796","pageName": "Example Sports","isActive": true,"startDate": "2026-09-20","displayFormat": "DCO","body": "Grip on every terrain","collationId": "1403288121396887","collationCount": 3,"fromVersionGroup": true,"input": "Example Sports","inputType": "advertiser"}]
Tips
- Leave the proxy on Residential. Meta refuses datacenter IPs and part of the residential ones; the Actor tries fresh IPs until one is accepted, and the price per ad does not change.
- For a daily alert, schedule a task with Mode New ads only and a Webhook URL (Slack and Discord incoming webhooks work as is).
- Image and video URLs come from Meta's CDN and are signed: they expire after a few days. Download the files you want to keep.
- Catalog and dynamic ads (
DPA,DCO) carry template text like{{product.name}}. The Actor puts the text of the first card inbodywhen the ad text is only a template; the full cards are incards.
FAQ, disclaimers and support
Does it need a Facebook account or a Meta API token?
No. It reads the public Ad Library website, like a visitor who is not logged in.
How far back does the Ad Library go?
Inactive ads stay in the library for one year, political and issue ads for seven years. Spend and impression ranges exist for political and issue ads only; Meta does not publish them for other ads.
Why did a name return the wrong page?
A name is matched the way the Ad Library search box does it for the country you chose. Check the log: it lists the other pages with their IDs. Paste the right page URL or ID in Advertisers.
Is it legal to scrape the Facebook Ad Library?
Our Actors are ethical and do not extract any private user data, such as email addresses, gender, or location. They only extract what the user has chosen to share publicly. We therefore believe that our Actors, when used for ethical purposes by Apify users, are safe. However, you should be aware that your results could contain personal data. Personal data is protected by the GDPR in the European Union and by other regulations around the world. You should not scrape personal data unless you have a legitimate reason to do so. If you're unsure whether your reason is legitimate, consult your lawyers.
Something wrong or missing? Open an issue in the Issues tab and it gets fixed. To call the Actor from your code, see the API tab. More ad libraries from the same author: LinkedIn Ad Library Scraper and Google Ads Transparency Scraper.