Meta Ads Library Scraper (Pay per Event)
Pricing
from $1.00 / 1,000 results
Meta Ads Library Scraper (Pay per Event)
Scrape Meta Ad Library by keyword or Facebook page URL. Get ad text, CTA, headlines, platforms, languages, targeting, reach data, and delivery dates. Supports all countries, languages, and filters. Works with any Ad Library search URL. Lightning fast, structured JSON output.
Pricing
from $1.00 / 1,000 results
Rating
0.0
(0)
Developer
Eimantas V
Maintained by CommunityActor stats
3
Bookmarked
347
Total users
35
Monthly active users
8 days ago
Last modified
Categories
Share
Meta Ads Library Scraper
See what a competitor is running on Facebook and Instagram right now.
Give it a keyword, up to 10 Facebook page URLs, or an Ad Library URL with your filters intact. It calls Meta's official Graph API ads_archive endpoint, not a browser, and returns one row per ad: the copy itself — ad text, headline, description, CTA caption, deduplicated across variants — plus how many variants sit behind it, platforms, languages, start date, live status, and a snapshot link to the ad in the Ad Library. Sort by start date and the longest-running creatives rise to the top, the closest public proxy for what is working.
Targeting, demographics and reach are returned for EU and UK ads only; elsewhere they are null. Spend and impressions exist only on political, election and social-issue ads — set Ad category to Political and issue ads to get them. Meta does not publish what an ordinary advertiser spent, and this Actor will not invent a number in place of one it was never given.
What data you get
Every ad, everywhere:
- Ad text — full copy, deduplicated across creative variants
- Headline, description, CTA caption — the link preview and button text
- Creative variants — how many versions of this ad Meta reported, before deduplication. Six variants of near-identical copy is an advertiser running a test
- Publisher platforms — facebook, instagram, messenger, audience_network, threads
- Languages — detected ad languages
- Dates and status — creation date, delivery start and stop, active or not
- Snapshot URL — a direct link to view the ad, images and all, in the Ad Library
- Advertiser — page name, page ID, page URL, and bylines
EU and UK ads only, under the DSA transparency rules:
- Targeting — target ages, gender, locations
- Reach breakdown — age, country and gender reach
- EU total reach and beneficiary/payer declarations
Political, election and social-issue ads only, with Ad category set accordingly:
- Spend — the range Meta publishes
- Impressions — impression count range
- Currency, estimated audience size, demographic distribution, delivery by region
Anything outside its bracket comes back null, never zero and never an empty
object. A null here means Meta does not publish it, which is a fact about the
ad worth recording.
Pricing
$2.00 per 1,000 ads ($0.002 per ad), or $0.01 per query in count-only mode.
No start fee. A keyword that matches nothing returns nothing and costs nothing; a query that fails returns an error row and costs nothing. Full workings in docs/PRICING.md.
Input
Search Queries / Keywords
Search across all ads by keyword. Keywords are matched against ad text, images, and CTA buttons.
Loop EarplugsNike running shoesAG1 supplement
You can also paste full Ad Library URLs here — all filters from the URL are preserved:
https://www.facebook.com/ads/library/?active_status=active&ad_type=all&country=US&q=Loop+Earplugshttps://www.facebook.com/ads/library/?active_status=active&content_languages[0]=en&publisher_platforms[0]=instagram&publisher_platforms[1]=facebook&view_all_page_id=15087023444&media_type=image
Supported URL parameters: q, view_all_page_id, content_languages[N], publisher_platforms[N], media_type, active_status, country, search_type.
Page URLs (max 10)
Facebook page URLs to scrape all ads from. The page ID is automatically resolved from the page HTML.
https://www.facebook.com/nikehttps://www.facebook.com/SHEIN/https://www.facebook.com/profile.php?id=123456789
You can provide up to 10 page URLs (API limit for search_page_ids).
Filter parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
| Max Results | integer | 50 | Maximum number of ads to return (across all inputs combined) |
| Only Total Count | boolean | false | Return only the count of matching ads — no ad data fetched |
| Keyword Match Type | select | Unordered | KEYWORD_UNORDERED treats each word independently and finds ads containing all words in any order. KEYWORD_EXACT_PHRASE matches the exact phrase — separate multiple phrases with commas to match all of them |
| Delivery Date From | string | — | Only return ads delivered after this date (inclusive). Format: YYYY-MM-DD |
| Delivery Date To | string | — | Only return ads delivered before this date (inclusive). Format: YYYY-MM-DD |
| Publisher Platforms | multi-select | (all) | Filter by platform: Facebook, Instagram, Audience Network, Messenger, WhatsApp, Oculus, Threads |
| Active Status | select | ALL | ALL, ACTIVE, or INACTIVE. Overridden if already set in an Ad Library URL |
| Countries | multi-select | US | Countries where ads were delivered. 250+ supported |
| Languages | multi-select | (all) | Filter by language: English, Spanish, French, etc. (80+ languages) |
| Proxy Configuration | object | disabled | Optional proxy configuration |
Example input
{"searchQueries": ["Loop Earplugs"],"pageUrls": ["https://www.facebook.com/nike","https://www.facebook.com/SHEIN/"],"maxResults": 100,"activeStatus": "ACTIVE","countries": ["US"],"searchType": "KEYWORD_UNORDERED"}
Output
Each ad is pushed as a separate item to the default dataset:
{"adId": "1926905081295969","adArchiveId": "1926905081295969","adCreationTime": "2026-03-28","advertiserName": "AG1 by Athletic Greens","advertiserPageId": "130735813680498","advertiserPageUrl": "https://www.facebook.com/130735813680498","adText": "AG1 is the daily supplement trusted by thousands. One scoop covers your bases with 75 vitamins, minerals and whole food sourced nutrients.","ctaCaption": "drinkag1.com","headline": "AG1 Supplement by Athletic Greens","description": "Try AG1 and get a free Welcome Kit with your first order.","publisherPlatforms": ["facebook","instagram","audience_network","messenger"],"languages": ["en"],"startDate": "2026-03-29","endDate": "","isActive": true,"impressions": null,"snapshotUrl": "https://www.facebook.com/ads/library/?id=1926905081295969","ageCountryGenderReachBreakdown": [{"country": "US","age_gender_breakdowns": [{"age_range": "25-34","male": 1200,"female": 980},{"age_range": "35-44","male": 850,"female": 720}]}],"bylines": "","targetAges": ["25", "65"],"targetGender": "All","targetLocations": [{"name": "United States","num_obfuscated": 0,"type": "countries","excluded": false}],"euTotalReach": null,"beneficiaryPayers": null,"scrapedAt": "2026-04-08T11:15:36.400Z"}
Output fields
| Field | Type | Description |
|---|---|---|
adId | string | Unique ad identifier (Library ID) |
adArchiveId | string | Same as adId |
adCreationTime | string | Date the ad was created |
advertiserName | string | Name of the Facebook page running the ad |
advertiserPageId | string | Numeric page ID |
advertiserPageUrl | string | Link to the advertiser's Facebook page |
adText | string | Full ad creative body text (multiple variations joined with newlines) |
ctaCaption | string | CTA link caption (e.g. domain name) |
headline | string | Link preview headline |
description | string | Link preview description |
publisherPlatforms | string[] | Platforms the ad runs on (facebook, instagram, messenger, audience_network, threads) |
languages | string[] | Detected ad languages (ISO 639-1 codes) |
startDate | string | Delivery start date |
endDate | string | Delivery end date (empty if still active) |
isActive | boolean | Whether the ad is currently running |
impressions | object/null | Impression count range ({lowerBound, upperBound}). Only available for political/issue ads. Returns null for commercial ads |
snapshotUrl | string | Link to view the ad in the Ad Library |
ageCountryGenderReachBreakdown | array/null | Reach by age, country, and gender. Available for UK & EU ads and political ads in Brazil |
targetAges | string[] | Targeted age range. Available for UK & EU ads |
targetGender | string | Targeted gender (Women, Men, or All). Available for UK & EU ads |
targetLocations | array/null | Targeted locations with inclusion/exclusion. Available for UK & EU ads |
bylines | string | "Paid for by" disclosure. Available for political/issue ads only |
euTotalReach | number/null | Estimated reach across the EU. Available for EU ads only |
beneficiaryPayers | array/null | Beneficiary and payer info. Available for EU ads only |
scrapedAt | string | ISO timestamp when the data was collected |