Facebook Ads Library Scraper — Ad Intelligence
Pricing
from $2.40 / 1,000 ad scrapeds
Facebook Ads Library Scraper — Ad Intelligence
Scrape Facebook Ads Library creatives, advertisers, copy, media, landing pages, dates, and targeting signals for competitor and campaign research.
Pricing
from $2.40 / 1,000 ad scrapeds
Rating
0.0
(0)
Developer
Muhammad Afzal
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
11 days ago
Last modified
Categories
Share
Facebook Ads Library Scraper — Meta Ad Intelligence Tool
Free-plan limit: Apify free-plan users receive at most 5 delivered records per run. Paid users may use the Actor’s configured result limit.
Scrape ads from the Meta/Facebook Ads Library by keyword, advertiser Page URL, or pre-configured Ad Library URL. Get ad copy, creatives, CTA, spend estimates, reach data, running days, winner scores, and EU transparency data — all in clean, flat, structured JSON.
No login required. No Meta API token needed.
Features
- 3 input modes: Search by keyword, advertiser Page URL, or paste an Ad Library URL with filters
- Ad intelligence signals: Winner score (0-100), winner tier, winner signals, CTA detection, ad categorization, running days
- EU transparency data: Spend ranges, impression ranges, EU total reach, demographic distribution (age/gender breakdown)
- Full creative extraction: Images, videos (HD/SD/preview), carousel cards, CTA text/type/URL
- Advertiser metadata: Page name, ID, URL, profile picture, like count, verification status, page category
- Flat, clean output: No nested API dumps — every field is at the top level, ready for spreadsheets, databases, and AI pipelines
- 52 countries supported: Or search all countries at once
- No login: Works entirely from the public Ad Library
Use Cases
- Competitor ad research: Monitor rival brands' ad creatives, copy, and strategies
- Dropshipping & product research: Find winning ads by winner score and running duration
- Agency reporting: Bulk-collect active ads for clients across countries and platforms
- Political ad monitoring: Collect DSA/transparency data (spend ranges, reach, demographics) for regulatory analysis
- Creative benchmarking: Compare CTAs, formats, and copy angles across competitors
- Market research: Track seasonal spend shifts and creative strategy changes
Input
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
searchTerms | string[] | No* | ["nike"] | Keywords to search (e.g. "skincare", "crypto trading") |
pageUrls | string[] | No* | [] | Facebook Page URLs or numeric page IDs |
adLibraryUrls | string[] | No* | [] | Full Ad Library URLs with filters pre-configured |
country | string | No | ALL | Country code or ALL for worldwide |
adActiveStatus | string | No | ALL | ACTIVE, INACTIVE, or ALL |
adType | string | No | ALL | ALL, POLITICAL_AND_ISSUE_ADS, HOUSING_ADS, EMPLOYMENT_ADS, CREDIT_ADS |
mediaType | string | No | ALL | ALL, IMAGE, VIDEO, MEME, NONE |
maxResults | integer | No | 100 | Maximum ads to collect across all sources |
proxyConfiguration | object | No | Residential | Proxy settings (residential recommended for deep pagination) |
*At least one of searchTerms, pageUrls, or adLibraryUrls must be provided.
Output
Each ad is returned as a flat JSON record:
| Field | Type | Description |
|---|---|---|
adId | string | Meta Ad Library archive ID |
pageName | string|null | Advertiser page name |
pageId | string | Advertiser page ID |
pageUrl | string|null | Facebook Page URL |
pageLikeCount | number|null | Page like count |
pageVerified | boolean|null | Page verification status |
adText | string|null | Ad body copy |
headline | string|null | Ad headline |
ctaText | string|null | CTA button text |
ctaType | string|null | CTA type code |
ctaUrl | string|null | Landing page URL |
displayFormat | string | image, video, carousel, or unknown |
mediaType | string | image, video, or meme |
imageUrls | string[] | Direct CDN image URLs |
videoUrls | object[] | Video objects with hd, sd, preview URLs |
carouselCards | object[] | Carousel card data |
platforms | string[] | Platforms (facebook, instagram, etc.) |
isActive | boolean | Currently running? |
startDate | string|null | Start date (YYYY-MM-DD) |
endDate | string|null | End date (YYYY-MM-DD) |
daysRunning | number|null | Days the ad has been running |
winnerScore | number | 0-100 score (longer running + active + more variants = higher) |
winnerTier | string | high (>=70), medium (>=40), low (<40) |
winnerSignals | string[] | Signals: long_running, still_active, high_variants, etc. |
detectedCtas | string[] | CTA phrases detected in ad text |
hashtags | string[] | Hashtags in ad text |
emojiCount | number | Emoji count in ad text |
wordCount | number | Word count of ad body |
adCategory | string | Auto-detected: ecommerce, lead_gen, app_install, etc. |
spend | object|null | EU spend range: {lower, upper} |
impressions | object|null | EU impression range: {lower, upper} |
euTotalReach | number|null | Total EU reach estimate |
demographicDistribution | array|null | Age/gender breakdown |
containsAiMedia | boolean | AI-generated content flag |
scrapedAt | string | ISO 8601 scrape timestamp |
sourceUrl | string | Source Ad Library URL |
Winner Score
The winner score helps identify proven, high-performing ads:
| Score | Tier | Meaning |
|---|---|---|
| 70-100 | high | Long-running, active, with multiple creative variants — likely a winner |
| 40-69 | medium | Established ad with some signals of success |
| 0-39 | low | New or inactive ad — unproven |
Signals: long_running (60+ days), still_active, high_variants (3+ carousel cards), multiple_variants, proven_active (30+ days AND active).
Pricing
This Actor uses pay-per-event pricing. These are the current Apify Store event prices:
| Event | Price (USD) | When it is charged |
|---|---|---|
apify-actor-start | $0.00005 | Actor Start — Charged when the Actor starts running. Number of events charged depends on Actor memory (one event per GB, minimum one event). |
result-item | $0.001 | Ad Scraped — One Facebook/Meta ad extracted from the Ad Library with ad copy, creatives, CTA, platforms, dates, page info, winner score, and EU transparency data. |
Apify platform usage for this Actor run is included alongside the event prices above; no separate per-run platform-usage fee is passed to users.
This covers Apify platform usage for this Actor run. Other Apify products or usage outside this Actor run may still follow your account plan.
Proxy Requirements
The actor defaults to Apify residential proxies (RESIDENTIAL group), which are required for:
- Scraping more than ~30 ads per search (Facebook rate-limits pagination per IP)
- Accessing country-specific Ad Library content
For heavy bulk scraping, consider providing your own premium residential proxy via the proxyConfiguration field.
Limitations
- The Meta Ad Library is a dynamic SPA — occasional rate limiting may reduce result counts
- EU transparency data (spend, reach, demographics) is only available for ads targeting EU/UK markets
- Instagram follower counts and page "About" data require visiting individual pages (not included in base scraping for speed)
- The Ad Library may not show ads from pages that have been deleted or restricted
Example Input
{"searchTerms": ["running shoes", "fitness app"],"country": "US","adActiveStatus": "ACTIVE","mediaType": "VIDEO","maxResults": 200}
{"pageUrls": ["https://www.facebook.com/nike"],"country": "ALL","adActiveStatus": "ALL","maxResults": 500}
Export scraped data
Export scraped data, run the scraper via API, schedule and monitor runs, or integrate with other tools.
# Run via Apify CLIapify run USERNAME/facebook-ads-library-scraper --input='{"searchTerms":["nike"],"maxResults":50}'# Get resultsapify dataset get-default --format=json