Facebook Ads Library Scraper — Meta Ad Creatives & Advertisers avatar

Facebook Ads Library Scraper — Meta Ad Creatives & Advertisers

Pricing

from $3.50 / 1,000 ad scrapeds

Go to Apify Store
Facebook Ads Library Scraper — Meta Ad Creatives & Advertisers

Facebook Ads Library Scraper — Meta Ad Creatives & Advertisers

Scrape ads from the public Meta (Facebook) Ad Library by keyword, advertiser page or Ad Library URL: ad text, creatives, CTA, platforms, dates, active status and political spend.

Pricing

from $3.50 / 1,000 ad scrapeds

Rating

0.0

(0)

Developer

Trevor Ortega

Trevor Ortega

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

0

Monthly active users

9 days ago

Last modified

Share

Scrape ads from the public Meta Ad Library (facebook.com/ads/library) by keyword, by advertiser (Facebook page ID, page URL or name) or straight from an Ad Library URL you copied from your browser. You get the ad text, title, link, call to action, image and video URLs, carousel cards, the platforms the ad runs on (Facebook, Instagram, Messenger, Audience Network, Threads), start and end dates, whether it is still running, and how many versions it has. For ads about social issues, elections or politics you also get spend and impression ranges and "Paid for by", and with Include ad details the age/gender split and the regions the ad reached.

No Facebook account, no login, no Meta API token: the Actor reads the same public pages any visitor sees.

What data does Facebook Ads Library Scraper extract?

FieldExampleNotes
adArchiveId1228023139489736Ad Library ID of the ad
adLibraryUrlhttps://www.facebook.com/ads/library/?id=1228023139489736Link to the ad
pageId, pageName, pageUrl15087023444, Nike, https://www.facebook.com/nike/The advertiser's Facebook page
pageLikeCount, pageCategories, pageProfilePictureUrl39504313, ["Sportswear Store"]As shown on the ad
isActivetrueStill running
startDate, endDate2026-09-02, 2026-10-05endDate only once the ad has stopped (for running ads Meta just shows "today")
publisherPlatforms["facebook", "instagram", "messenger"]Where the ad is shown
displayFormatIMAGE, VIDEO, CAROUSEL, DPA, DCOCreative type
body, title, caption, linkDescriptionad text, headline, domainFor catalog ads whose top-level text is a template ({{product.name}}), the first card's text
linkUrl, ctaText, ctaTypehttps://www.nike.com/..., Shop now, SHOP_NOWLanding page and button
imageUrls["https://scontent...jpg"]Full-size creative images
videos[{"hdUrl", "sdUrl", "previewImageUrl"}]Video files and thumbnail
cards[{"title", "body", "linkUrl", "imageUrl", "ctaText", ...}]Carousel / catalog cards
extraTexts, extraLinksAlternative texts and links of dynamic ads
collationId, collationCount726473194573350, 2Ads that share this creative ("N ads use this creative and text")
categories["POLITICAL"]Meta's ad category
paidForBy, disclaimerLabelFacebook, Inc., PAID_FOR_BYPolitical and issue ads
currency, spend, impressions, reachEstimate{"text": "$800K - $900K", "lower": 800000, "upper": 900000}Political and issue ads; ranges as Meta shows them, plus numbers
containsSensitiveContent, containsAiGeneratedMediafalseFlags shown by Meta
searchInputrunning shoesWhich search or advertiser produced the ad

With Include ad details (one extra request per ad, separate details event):

FieldNotes
demographicDistributionPolitical/issue ads: share of impressions by age range and gender
regionDistributionPolitical/issue ads: share of impressions by region (state / province), largest first
euTotalReach, euTargeting, euReachBreakdownAds shown in the EU (Digital Services Act data): total EU reach, targeted locations, gender and ages, reach by country, age and gender
ukTotalReach, ukTargeting, ukReachBreakdownThe same for the UK when Meta shows it
payerBeneficiaryEU ads: who paid for the ad and who benefits
advertiserPage alias, category, verification, likes, Instagram username, followers and verification, page "about" text
pagePoliticalSpendLifetimePages with political ads: lifetime spend per "Paid for by" disclaimer

How to use Facebook Ads Library Scraper

  1. Enter Search terms (e.g. running shoes), Advertiser pages (e.g. 15087023444, nike or https://www.facebook.com/nike) and/or Ad Library URLs copied from facebook.com/ads/library.
  2. Pick filters for search terms and advertisers: Country, Ad category (all ads or issues, elections and politics), Active status, Media type, Platforms, Impressions from / until dates, Exact phrase, Sort by. Ad Library URLs keep the filters already in the URL.
  3. Set Max ads (and optionally Max ads per search), then run. Download the results as JSON, CSV or Excel, or read them through the API.

Input example

{
"searchTerms": ["running shoes"],
"pageIds": ["15087023444", "https://www.facebook.com/AutoScout24"],
"startUrls": [
{ "url": "https://www.facebook.com/ads/library/?active_status=all&ad_type=political_and_issue_ads&country=US&q=senate&search_type=keyword_unordered&media_type=all" }
],
"country": "US",
"activeStatus": "active",
"platforms": ["instagram"],
"maxItems": 200,
"maxItemsPerQuery": 50
}

Output example

{
"adArchiveId": "1249575052243232",
"adLibraryUrl": "https://www.facebook.com/ads/library/?id=1249575052243232",
"pageId": "248986568895243",
"pageName": "Speechify",
"pageUrl": "https://www.facebook.com/getspeechify/",
"pageLikeCount": 99994,
"isActive": false,
"startDate": "2022-06-01",
"endDate": "2022-09-30",
"publisherPlatforms": ["facebook", "instagram", "audience_network", "messenger"],
"displayFormat": "DCO",
"caption": "itunes.apple.com",
"linkUrl": "http://itunes.apple.com/app/id1209815023",
"ctaText": "Download",
"ctaType": "DOWNLOAD",
"collationCount": 1,
"categories": ["POLITICAL"],
"currency": "USD",
"spend": { "text": "$800K - $900K", "lower": 800000, "upper": 900000 },
"impressions": { "text": ">1M", "lower": 1000000 },
"searchInput": "senate",
"demographicDistribution": [{ "ageRange": "25-34", "female": 0.15, "male": 0.15, "unknown": 0 }],
"regionDistribution": [{ "region": "California", "share": 0.11 }, { "region": "Texas", "share": 0.09 }]
}

How to scrape all ads of a Facebook page (competitor ads)?

Put the advertiser in Advertiser pages: the numeric page ID (in the Ad Library URL as view_all_page_id=..., or on the page's "Page transparency" panel), the page URL or just its name as in the URL (nike). Names are looked up with the Ad Library's own search box, so a page that has never advertised may not be found; the numeric ID always works. Set Active status to "Active and inactive" to get the ad history too.

Does it work without login or a Meta API token?

Yes. The Ad Library is a public transparency tool that anyone can browse without an account, and the Actor reads it the same way: no login, no cookies of yours, no Graph API access token (the official API only covers political ads and needs an identity-verified developer account). It does not solve CAPTCHAs; if Meta asks for one, the Actor switches to another IP.

How many ads can I get per search, and how fast?

Meta's site returns 30 ads for the first page of a search and 10 per "load more" request. The Actor pages through a search until it runs out or reaches Max ads / Max ads per search; in testing it read 900 ads from three searches in about a minute, and 2,500 ads of a single search in 10 minutes, with no failed requests (one search is read page after page, about 4 ads per second; several searches run in parallel). Very broad keywords can match tens of thousands of ads; narrow them with country, dates, platforms or media type, or use advertiser pages.

How much does it cost to scrape the Facebook Ad Library?

You pay per ad saved ($3.50 per 1,000 ads), plus $1.50 per 1,000 ads when Include ad details is on, plus the Apify platform usage of your run. Usage is small: about 2-5 MB of residential proxy traffic plus a little compute and storage per 1,000 ads, roughly $0.03-0.05 per 1,000 ads in our tests (about $0.10 more per 1,000 ads with details).

Proxy note: keep the default residential proxy. Meta serves the Ad Library page to datacenter IPs but rate-limits the "load more" requests coming from them, so a datacenter run only gets the first 30 ads of each search. The Unblocker is not needed.

Monitor changes on a schedule

Turn on Only new or changed items and the Actor remembers which ads earlier runs of the same input returned: each run outputs only ads that are new, or ads whose status changed (isActive / endDate, i.e. the ad stopped running). Unchanged ads are dropped before anything is saved, so they are not charged (nor are their details fetched). Save the input as a task, for example a competitor's page ID with Active status "Active ads" and Max ads 100, then add a Schedule to it in Apify Console (Schedules → Create new, daily). Every output ad carries changeType (new or changed), and changed ones carry previousValues, e.g. {"isActive": true, "endDate": null} for an ad that has just stopped. With "Active ads", stopped ads simply leave the list; choose "Active and inactive" if you want them reported as changed. The Ad Library orders results by relevance, not by date, so keep Max ads above the number of ads the search matches (advertiser pages and narrow searches work best); otherwise older ads moving into the checked window can show up as new. Use Monitoring key to keep several schedules on the same search separate.

The Actor collects only what Meta publishes in its public Ad Library for transparency: ads, the advertiser pages that ran them, and the spend/reach data Meta discloses. It does not log in, does not access anything behind a login, and does not collect data about people who saw or interacted with the ads. The verified address, phone and e-mail that some political advertisers disclose are left out. You are responsible for using the data in line with Meta's terms and the laws that apply to you (for example GDPR if your use involves personal data).