Facebook Ad Library Scraper: Meta Ads, Creatives and Dates
Pricing
from $0.97 / 1,000 ad scrapeds
Facebook Ad Library Scraper: Meta Ads, Creatives and Dates
Export ads from the Meta Ad Library across Facebook and Instagram. Search by keyword, advertiser or Page ID and get ad copy, creative type, call to action, run dates, platforms, active status and the ad snapshot link. No login, no API key.
Pricing
from $0.97 / 1,000 ad scrapeds
Rating
5.0
(1)
Developer
Oski
Maintained by CommunityActor stats
1
Bookmarked
3
Total users
1
Monthly active users
6 days ago
Last modified
Categories
Share
Facebook Ad Library Scraper
Scrape the Meta Ad Library (Facebook, Instagram, Messenger, Audience Network and Threads ads) into clean, structured data. Search by keyword or advertiser Page ID and get every ad's copy, images, videos, carousel cards, call to action, landing URL, run dates and platforms. A 200-ad pull costs about $0.24, with no login, no access token and no Meta API key.
Part of an ad-intelligence suite with the Google Ads Transparency Center Scraper and the LinkedIn Ad Library Scraper, so you can see what a competitor runs on Meta, Google and LinkedIn from one account.
What you can use it for
- Agencies: pull a prospect's live Facebook and Instagram ads before a pitch, with the exact copy and landing pages.
- Founders and marketers: monitor competitors' active ads each week and spot new offers soon after they go live.
- Creative teams: build a swipe file of images, videos and carousels with headline, body and call-to-action text.
- Media buyers: see how long an ad has run (start and end dates) and which Meta platforms it is placed on.
- Researchers and journalists: collect political and issue ads, where Meta publishes spend and impression figures.
How to use it
- Under Search terms, add brands or keywords, such as
Nike. A link copied from Facebook's Ad Library works too. - To get every ad from one advertiser, paste their Ad Library link under Advertisers.
- Set Country (a name such as
United Kingdom, a code, orALL) and click Start. - When it finishes, open the Output tab and download as CSV, Excel or JSON.
While it runs, the status line at the top of the run page shows progress (for example "Search 1 of 3: Nike. 120 ads so far."). When it finishes, the same line says what was found and explains anything that was skipped, so you never have to read the log.
How much does it cost?
You pay a $0.04 start fee (the actor runs a real browser) plus $0.001 per ad returned. You only pay for ads actually delivered.
| Ads returned | Maths | Cost |
|---|---|---|
| 100 | $0.04 + 100 x $0.001 | about $0.14 |
| 1,000 | $0.04 + 1,000 x $0.001 | about $1.04 |
| 10,000 | $0.04 + 10,000 x $0.001 | about $10.04 |
Because the start fee is paid once per run, it is cheaper to put several search terms in one run than to start many small runs. A typical 1,000-ad competitor export (five brands, 200 ads each) costs about $1.04.
Input
| Field | What it does |
|---|---|
searchTerms | Brands or keywords, one per line. A pasted Ad Library link is read for its search. |
pageIds | An advertiser's Ad Library link, or the number after view_all_page_id=. A name typed here is searched as a keyword. |
country | Country to search in: a name or code (United Kingdom, UK, US), or ALL. |
activeStatus | all, active, or inactive. |
adType | all, or political_and_issue_ads (those carry spend and impression data). |
mediaType | all, image, video, meme, image_and_meme or none. |
maxAdsPerSearch | How many ads per search term or Page ID (default 200). You pay per ad returned. |
maxScrolls | Advanced safety stop. It grows automatically to fit Max ads per search. |
proxyConfiguration | Advanced. Residential proxy, required and on by default (Meta blocks datacenter IPs). |
Example for a five-brand competitor sweep:
{"searchTerms": ["nike", "adidas", "gymshark", "puma", "under armour"],"country": "GB","activeStatus": "active","maxAdsPerSearch": 200}
Output
One record per ad:
{"ad_archive_id": "2211032446353868","page_name": "IControl: Easy Widgets Themes","page_id": "721404351056614","is_active": true,"display_format": "IMAGE","title": "a FREE and personalized APP for you","body": "Aesthetic presets for your phone","cta_text": "Install now","cta_type": "INSTALL_MOBILE_APP","link_url": "http://play.google.com/store/apps/details?id=...","start_date": "2026-06-27","end_date": "2026-07-21","publisher_platform": ["FACEBOOK", "INSTAGRAM", "AUDIENCE_NETWORK", "MESSENGER", "THREADS"],"images": [{"url": "https://...", "resized_url": "https://..."}],"videos": [],"cards": [],"page_like_count": 4210,"impressions_text": null,"spend": null,"ad_snapshot_url": "https://www.facebook.com/ads/library/?id=2211032446353868","search": "nike","search_kind": "query","country": "US","scraped_at": "2026-07-22T02:15:00+00:00"}
Records also carry caption, link_description, byline, page_profile_uri, page_profile_picture_url, page_categories, categories, collation_id, collation_count, reach_estimate, currency, contains_sensitive_content and contains_digital_created_media when Meta provides them. Videos include a preview_image, and each carousel card has its own title, body, CTA, link, image and video. Dates are converted from Meta's timestamps to YYYY-MM-DD.
Spend and impression figures are only published by Meta for political and issue ads. They come through when present and are null otherwise.
Tips for bigger runs
- Add more search terms or Page IDs. Each one is a separate search with its own
maxAdsPerSearchbudget, and the start fee is paid once. - Use Page IDs for complete advertiser coverage. A keyword search also returns other advertisers who mention the word; a Page ID pulls one advertiser's ads only.
- Going past about 400 ads in one search? Raise
maxScrollsalong withmaxAdsPerSearch: each scroll loads roughly 10 ads, so 1,000 ads needs about 100 scrolls. - Use
activeStatus: activewhen you only care about what is running now, so the budget goes on live ads. - Run one country per task and schedule several tasks if you track many markets. The Ad Library is scoped by country.
Scheduling and integrations
Save your input as a task and schedule it daily or weekly in Apify to track new ads. Results can go straight to Google Sheets, a webhook, Make, Zapier or your own code via the Apify API:
curl -X POST "https://api.apify.com/v2/acts/oski~facebook-ad-library-scraper/run-sync-get-dataset-items?token=YOUR_TOKEN" \-H "Content-Type: application/json" \-d '{"searchTerms": ["nike"], "country": "US", "activeStatus": "active", "maxAdsPerSearch": 100}'
The sync endpoint waits up to 5 minutes. For bigger runs, start the actor with the runs endpoint and fetch the dataset when it finishes.
If something looks wrong
The status line at the end of every run explains anything that was skipped or came back empty. The common messages:
| Message | What to do |
|---|---|
| Input problem: ... | Something in the input needs changing, and the message says what. The run stopped before anything was charged. |
| No ads for "..." in GB | Try another country, set Active status to All, or check the spelling. |
| "..." is not a numeric Page ID, so it was searched as a keyword | Nothing to fix, but for one advertiser's ads paste their Ad Library link. |
| The search for "..." failed | Facebook was busy. Run it again later. |
Still stuck? Open an issue on the actor page with the run link and it gets looked at quickly.
FAQ
Is it legal? It reads only the public Ad Library, which Meta publishes for transparency. No login and no private account are involved. You are responsible for how you use the data, including respecting privacy law where it applies.
Do I need a Facebook account or access token? No. The actor opens the public Ad Library in a headless browser and reads the same data the page loads.
Why did I get fewer ads than expected? The search may have fewer matching ads in that country or with your filters, or the Ad Library stopped returning new results (the actor stops after four scrolls in a row with no new ads, each retried with a longer wait). Try ALL countries, activeStatus: all, or a Page ID.
How fresh is the data? Every run reads the Ad Library live, so you get what Meta shows at that moment.
Why is spend empty? Meta only publishes spend and impressions for political and issue ads.
What if it breaks? Open an issue on the actor page. It gets fixed fast.
Other scrapers from Oski
- Google Ads Transparency Center Scraper: every Google ad an advertiser runs, with impressions and dates by country.
- LinkedIn Ad Library Scraper: B2B ads with paying entity, impressions by country and targeting.
- Website Contact Finder: emails, phones and socials from the advertisers' websites.
- App Store Reviews Scraper: what users say about the apps being advertised.