Facebook Ads Library Scraper: every ad version, no login avatar

Facebook Ads Library Scraper: every ad version, no login

Pricing

from $0.25 / 1,000 ads

Go to Apify Store
Facebook Ads Library Scraper: every ad version, no login

Facebook Ads Library Scraper: every ad version, no login

Pricing

from $0.25 / 1,000 ads

Rating

0.0

(0)

Developer

Alex Morain

Alex Morain

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a day ago

Last modified

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 Actor345
Total returned1,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?

FieldTypeDescription
adArchiveIdstringAd Library ID of the ad
adLibraryUrlstringPublic page of the ad
pageName, pageId, pageUrlstringAdvertiser page
pageLikeCountintegerLikes of the advertiser page
isActivebooleanRunning now or stopped
startDate, endDate, daysRunningstring, integerWhen it ran, in days
publisherPlatformsarrayFACEBOOK, INSTAGRAM, MESSENGER, THREADS, AUDIENCE_NETWORK
displayFormatstringIMAGE, VIDEO, CAROUSEL, DCO (dynamic creative), DPA (catalog)
body, title, linkDescriptionstringAd text, headline, link description
linkUrl, captionstringLanding page and displayed domain
ctaText, ctaTypestringCall to action
imageUrls, videos, cardsarrayCreatives, carousel and dynamic cards
collationId, collationCountstring, integerVersion group and its size
fromVersionGroupbooleantrue when the ad was hidden in a version group
spend, impressions, currencyobject, stringPolitical and issue ads only
input, inputTypestringWhich line of your input found the ad

How to scrape Facebook ads

  1. Open the Actor and type a brand in Advertisers, for example Decathlon, or paste its Facebook page URL.
  2. Pick a country if you want the ads shown there only. Leave it empty for all countries.
  3. Choose active ads, inactive ads or both.
  4. Set Max ads per search, or 0 for everything.
  5. 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 startDate in 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 in body when the ad text is only a template; the full cards are in cards.

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.

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.