Facebook Ads Library Scraper (Meta Ad Library)
Pricing
from $3.00 / 1,000 ad scrapeds
Facebook Ads Library Scraper (Meta Ad Library)
Facebook Ads Library scraper for the Meta Ad Library. Export Facebook, Instagram and Messenger ads by keyword, advertiser page ID or Ad Library URL: ad text, images, videos, links, run dates and platforms. No login needed.
Pricing
from $3.00 / 1,000 ad scrapeds
Rating
0.0
(0)
Developer
PulseData
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 hours ago
Last modified
Categories
Share
This actor exports ads from the Meta Ad Library for Facebook, Instagram, Messenger, Threads and Audience Network. You search by keyword, by advertiser page ID, or by pasting an Ad Library search URL, and get one JSON row per ad with the ad text, headline, link, call to action, image and video URLs, carousel cards, start and end date, the platforms it ran on and the advertiser page. It costs $3.00 per 1,000 ads plus $0.01 per run.
The actor works logged out, the same way the public Ad Library page does. It needs no Facebook account, no cookies and no Meta API token.
Features
- Scrape all Facebook ads of an advertiser by numeric page ID, active and inactive.
- Search the Meta Ad Library by keyword in one country or all countries. Wrap the keyword in double quotes for the exact phrase.
- Scrape a Facebook Ad Library URL you set up in the browser. The filters in the URL are used as they are.
- Filter Facebook ads by country, status and media type: active or inactive, images, videos, memes or text only.
- Export political and issue ads with spend and impressions ranges, plus the "paid for by" disclaimer.
- Search housing, employment and credit ads, the special ad categories Meta files separately.
- Export Meta Ad Library data to CSV, Excel or JSON through the Apify dataset.
Use cases
- Competitor ad research: every creative a competitor runs on Facebook and Instagram, when each ad started, and whether it is still live. Ads that have been running for months are usually the ones that convert.
- Creative and copy research: ad text, headlines, calls to action and media URLs for a swipe file, or as input for an LLM that groups ads by angle or offer.
- Agency pitches and audits: bring a prospect's current Meta ads and run dates to the first meeting.
- Market scans by country: which brands advertise a product category in Germany, France or the US right now.
- Political ad monitoring: spend and impression ranges and the paying entity for political and issue ads.
- Lead generation: check which companies advertise on Meta at all. Pass a list of page IDs and set
maxAdsPerQueryto 1.
Input
| Field | What it does |
|---|---|
queries (required) | One search per line. A keyword such as running shoes, "running shoes" for the exact phrase, a numeric page ID such as 15087023444 for every ad of one advertiser, or a URL copied from facebook.com/ads/library. |
country | ISO code (US, DE, GB), a country name such as Germany, or ALL. Default ALL. |
activeStatus | all (default), active or inactive. |
mediaType | all (default), image, video, meme or none (text only). |
adType | all (default), political_and_issue_ads, housing_ads, employment_ads or credit_ads. |
maxAdsPerQuery | Stop after this many ads per line. Default 100, 0 for no limit. |
proxyConfiguration | Residential Apify Proxy by default. Leave it as is; Meta keeps datacenter IPs on its challenge page. |
Example input:
{"queries": ["nike", "\"running shoes\"", "15087023444"],"country": "US","activeStatus": "active","mediaType": "all","adType": "all","maxAdsPerQuery": 200}
A pasted Ad Library URL keeps its own filters. For example https://www.facebook.com/ads/library/?active_status=active&ad_type=all&country=FR&q=decathlon&search_type=keyword_unordered&media_type=video returns active video ads for "decathlon" in France, whatever the country and media type fields say. URLs with view_all_page_id= return every ad of that advertiser.
How to find a page ID
Facebook page names and vanity URLs such as facebook.com/nike cannot be resolved without logging in, so an advertiser search needs the numeric page ID. Open the advertiser in the Ad Library in your browser and copy the number after view_all_page_id= in the address bar, or read it from the page's transparency section. Lines the actor cannot use are skipped with a note in the log, and the other lines still run.
Output
One item per ad:
{"query": "adidas","country": "GB","adArchiveId": "1654579272491885","adLibraryUrl": "https://www.facebook.com/ads/library/?id=1654579272491885","pageId": "182162001806727","pageName": "adidas","pageUrl": "https://www.facebook.com/adidas/","pageLikeCount": 43588716,"pageCategories": ["Product/service"],"isActive": true,"startDate": "2026-05-21","endDate": "2026-09-26","daysActive": 128,"publisherPlatforms": ["FACEBOOK", "INSTAGRAM"],"displayFormat": "DPA","title": "Copa Mundial","body": "Refresh your wardrobe with adidas icons.","linkUrl": "https://www.adidas.co.uk/","ctaText": "Shop now","ctaType": "SHOP_NOW","imageUrls": [],"videos": [],"cards": [{"title": "Copa Mundial Boots","linkUrl": "https://www.adidas.co.uk/copa-mundial-boots/015110.html","imageUrl": "https://scontent..."}],"collationCount": null,"categories": ["UNKNOWN"],"disclaimer": null,"spend": null,"impressions": null,"currency": null,"reachEstimate": null,"scrapedAt": "2026-09-26T17:10:00.000Z"}
For a political ad in the US, the same row carries the ranges Meta publishes:
{"categories": ["POLITICAL"],"disclaimer": "Facebook, Inc.","spend": ">$1M","impressions": ">1M","currency": "USD","reachEstimate": ">1M"}
Items also include caption, linkDescription, pageProfilePictureUrl, collationId, targetedOrReachedCountries and containsSensitiveContent. Each video has hdUrl, sdUrl and previewImageUrl; each carousel card has its own text, link, call to action and media. collationCount is the number of near-identical versions Meta groups under one ad.
What Meta publishes
Meta shows the creative, the advertiser and the run dates for every ad in the library. Spend, impressions and reach are published as ranges for political and issue ads, and those are the only ads where these fields are usually filled. For ordinary commercial ads they come back as null. The actor reads the Ad Library search results and does not open each ad's detail page, so the EU reach and targeting breakdown Meta shows there is not included.
Pricing
| Event | Price |
|---|---|
ad-scraped, per ad returned | $0.003 |
apify-actor-start, per run | $0.01 |
That is $3.00 per 1,000 ads plus $0.01 per run. Worked example: 300 active Nike ads in the US cost 300 × $0.003 + $0.01 = $0.91. A search that finds no ads costs only the $0.01 start.
If you set a maximum cost per run in the run options, the actor stops cleanly at that amount and keeps everything collected up to that point, so the dataset is never lost to a budget abort.
FAQ
Do I need a Facebook account or a Meta API token? No. The actor reads the public Ad Library logged out. It never logs in and cannot see anything a logged-out visitor cannot see.
Why is my search by page name skipped?
Page names and URLs like facebook.com/somebrand only resolve to an advertiser when you are logged in. Use the numeric page ID or an Ad Library URL with view_all_page_id=. See "How to find a page ID" above.
Can I get all ads of an advertiser, not just 100?
Set maxAdsPerQuery to 0. The actor follows the Ad Library's own pagination until the last page. Large advertisers have thousands of ads and each one is charged, so set a maximum cost per run.
How fast is it? In our test runs 50 to 300 ads took 20 to 80 seconds, and 1,200 ads of one advertiser took about 15 minutes. All searches in one run share a single browser session.
How long do the image and video links work? Meta signs media URLs and they expire after some days. Download the files soon after the run if you need them.
Does the country filter mean the ad targeted that country?
It means the ad was shown there, as in the Ad Library's own country filter. ALL searches every country.
How current is the data? Each run reads the Ad Library live at that moment.
Can I schedule it or use it via API? Yes. Save a task with your queries, add an Apify schedule, and pull the dataset as JSON, CSV or Excel through the API, or send it to Google Sheets, Make, Zapier or n8n.
What can it not do? It does not return clicks, conversions, audience targeting or the EU reach breakdown from ad detail pages, and it does not download media files. Spend and impressions are ranges, and only where Meta publishes them.
Is it legal to use this data? The actor returns public ad data only. If you process ads from individuals or political "paid for by" disclaimers, you are responsible for handling that personal data lawfully, for example under the GDPR.
Example pages
- Export every ad a Facebook page has run
- Nike ads in the Facebook Ad Library in the US
- Active adidas ads on Facebook and Instagram in the UK
- US political ads about the election with spend and impressions
- Video ads for running shoes shown in Germany
- Scrape a Meta Ad Library search URL
- Find the Facebook ads an advertiser has stopped running
- Job ads in the Meta Ad Library in the US
- Loan and credit ads on Facebook in the US
- Temu ads on Facebook and Instagram in Germany
Related actors
- Google Ads Transparency Center Scraper: the same competitor view for Google Search, YouTube, Shopping, Maps and Play ads.
- LinkedIn Ad Library Scraper: B2B ads with impressions per country and targeting for EU ads.
- TikTok Ad Library Scraper: TikTok video ads shown in Europe, with run dates and audience size.
- Website Tech Stack Detector: what an advertiser's landing pages are built with.