Facebook Ads Scraper Pro
Pricing
from $0.50 / 1,000 successful ad scrapeds
Facebook Ads Scraper Pro
Extract Facebook Ad Library data: creatives, targeting & metrics. $0.50 / 1,000 ads * cheaper & more complete. ๐ฑ
Pricing
from $0.50 / 1,000 successful ad scrapeds
Rating
4.9
(21)
Developer

FlowExtract API
Actor stats
50
Bookmarked
578
Total users
64
Monthly active users
1.6 hours
Issues response
2 days ago
Last modified
Categories
Share
๐ Facebook Ads Scraper Pro - Ad Library Intelligence
Extract comprehensive data from Facebook's Ad Library with real-time streaming, advanced filtering, and standby mode support.
Search Keywords & Advertisers โ Stream Real-Time Ad Data โ Get Complete Analytics
๐ Pricing Tiers - Choose Your Plan
FREE TIER โ
Get started with no upfront cost
Included:
- โ Full access to Facebook Ad Library data
- โ Multi-language & multi-country filtering
- โ Real-time batch pushing (results appear as they're collected)
- โ Complete media asset extraction (images & videos)
- โ All filtering options (date ranges, platforms, categories)
Trade-offs:
- โ ๏ธ Shared proxy infrastructure
- โ ๏ธ Occasional connection interruptions
- โ ๏ธ Best for small to medium projects (< 500 ads)
PAID TIER โญ RECOMMENDED FOR PRODUCTION
Upgrade for enterprise-grade reliability
All Free Tier features PLUS:
- ๐ Dedicated premium proxy - Your own reliable connection
- ๐ No rate limiting - Unlimited continuous scraping
- ๐ 90% success rate - Stable, uninterrupted operations
- ๐ Extract โ+ ads per query - No slowdowns or blocks
- ๐ Perfect for production use - Enterprise-ready infrastructure
- ๐ Consistent performance - No random connection errors
Why upgrade?
- Avoid interruptions: Your dedicated proxy won't hit Facebook's rate limits
- Reliability: No HTTP errors or temporary blocks
- Scale effortlessly: Handle large datasets with perfect stability
- Best for agencies: Reliable results for client reports and production systems
- Zero downtime: 24/7 stable scraping without worries
๐ Feature Comparison
| Feature | FREE | PAID โญ |
|---|---|---|
| Ads per query | Up to 100 | โ+ |
| Rate limiting | Yes | No |
| Connection stability | Occasional issues | Always stable |
| Best for | Testing & small projects | Agencies & production |
| Support | Standard | Priority |
๐ Quick Start
Option 1: Run as Batch Job (One-Time Execution)
Perfect for: One-off scraping tasks, scheduled runs, offline processing
$apify call dz-omar/facebook-ads-scraper-pro --input input.json
Input format (input.json):
{"searchQueries": ["nike", "adidas"],"searchAdvertisers": ["15087023444"],"maxResultsPerQuery": 50,"countries": ["US"],"activeStatus": "ACTIVE","mediaType": "IMAGE"}
Process Flow:
- Actor starts
- Processes your request
- Returns results
- Actor stops
Option 2: Run in Standby Mode (Recommended) โญ
Perfect for: Real-time applications, multiple requests, APIs, instant responses
# Actor automatically runs in standby mode# Access via: https://dz-omar--facebook-ads-scraper-pro.apify.actor
Standby Mode Advantages:
| Feature | Batch Mode | Standby Mode |
|---|---|---|
| Cold Start | 8-15 seconds | 0 seconds โก |
| Response Time | Slow (start overhead) | Instant |
| Best For | Scheduled tasks | Real-time apps |
| Concurrent Requests | Sequential | Parallel โ |
| Always Running | No | Yes (pre-warmed) |
| Cost | Lower | Higher (always on) |
| Ideal Use | Nightly scrapes | Live dashboards |
Real-World Comparison:
| Scenario | Batch Mode | Standby Mode |
|---|---|---|
| Track competitor ads daily | โ Good | โญ Excellent |
| Build a SaaS dashboard | โ ๏ธ Too slow | โ Perfect |
| One-time research project | โ Best | Overkill |
| API for other apps | โ Not viable | โ Ideal |
| Monitor 50 keywords live | โ No | โ Yes |
Example: Why Standby Mode is Better for Real-Time Dashboards
Imagine you're building a competitor monitoring dashboard that updates live:
Without Standby (Batch Mode):
User clicks "Refresh"โWait 10 seconds for cold startโWait 30 seconds for resultsโ40 seconds total โ (User closes browser)
With Standby Mode:
User clicks "Refresh"โResults instantly (pre-warmed)โ2 seconds total โ (User stays engaged)
๐ก API Endpoints
POST / - Custom Scraping with Real-Time Streaming
Send search parameters and receive ad data in real-time NDJSON stream.
Full Example:
curl -X POST https://dz-omar--facebook-ads-scraper-pro.apify.actor \-H "Content-Type: application/json" \-d '{"searchQueries": ["nike", "adidas"],"searchAdvertisers": ["Nike Football", "15087023444"],"maxResultsPerQuery": 100,"countries": ["US"],"contentLanguages": ["en"],"activeStatus": "ACTIVE","adType": "ALL","mediaType": "IMAGE","publisherPlatforms": ["FACEBOOK", "INSTAGRAM"],"sortBy": "SORT_BY_TOTAL_IMPRESSIONS","startDate": "2024-01-01","endDate": "2025-01-31"}'
Minimal Example:
curl -X POST https://dz-omar--facebook-ads-scraper-pro.apify.actor \-H "Content-Type: application/json" \-d '{"searchQueries": ["nike"]}'
Advertiser-Only Search:
curl -X POST https://dz-omar--facebook-ads-scraper-pro.apify.actor \-H "Content-Type: application/json" \-d '{"searchAdvertisers": ["Nike"], "maxResultsPerQuery": 200}'
Save Results to File:
curl -X POST https://dz-omar--facebook-ads-scraper-pro.apify.actor \-H "Content-Type: application/json" \-d '{"searchQueries": ["nike"]}' \> results.ndjson
๐ Input Parameters
| Parameter | Type | Default | Min | Max | Description |
|---|---|---|---|---|---|
searchQueries | array | [] | 0 | โ | Keywords to search (e.g., ["nike", "adidas"]) |
searchAdvertisers | array | [] | 0 | โ | Advertiser names or page IDs |
maxResultsPerQuery | integer | 10 | 10 | โ | Max ads per query/advertiser |
batchSize | integer | 30 | 10 | 100 | Ads per batch request |
countries | array/string | ["ALL"] | - | - | Country codes (e.g., ["US", "GB", "FR"]) |
contentLanguages | array | [] | 0 | โ | Language codes (e.g., ["en", "es", "fr"]) |
activeStatus | string | "ALL" | - | - | "ALL", "ACTIVE", "INACTIVE" |
adType | string | "ALL" | - | - | Ad category filter |
mediaType | string | "ALL" | - | - | Media type filter |
publisherPlatforms | array | [] | 0 | 6 | Platforms to search |
sortBy | string | "SORT_BY_TOTAL_IMPRESSIONS" | - | - | Sort method |
startDate | string | null | - | - | Start date (YYYY-MM-DD) |
endDate | string | null | - | - | End date (YYYY-MM-DD) |
โ ๏ธ Important: Input Does Not Exist
At least one of these MUST be provided:
searchQueries- Contains search keywords (required if no advertisers)searchAdvertisers- Contains advertiser names/page IDs (required if no queries)
Invalid Input Examples (Will Fail):
{"maxResultsPerQuery": 50}
โ Error: "Must provide either searchQueries or searchAdvertisers"
{"searchQueries": [],"searchAdvertisers": []}
โ Error: "Both arrays are empty - no search criteria provided"
{"countries": ["US"],"activeStatus": "ACTIVE"}
โ Error: "Input does not exist - missing searchQueries or searchAdvertisers"
Valid Input Examples:
{"searchQueries": ["nike"]}
โ Valid - Uses all defaults, searches for "nike"
{"searchAdvertisers": ["15087023444"]}
โ Valid - Searches all ads from page ID
{"searchQueries": ["marketing"],"searchAdvertisers": ["Nike", "Apple"],"maxResultsPerQuery": 100,"countries": ["US"]}
โ Valid - Searches keywords in ads from specific advertisers
Valid Values Reference
Ad Types:
ALL- All ad typesPOLITICAL_AND_ISSUE_ADS- Political/election adsHOUSING_ADS- Real estate & housingEMPLOYMENT_ADS- Job postingsCREDIT_ADS- Financial products
Media Types:
ALL- All media typesIMAGE- Static images onlyVIDEO- Video ads onlyMEME- Text-heavy imagesIMAGE_AND_MEME- Both image typesNONE- Text-only ads
Publisher Platforms:
FACEBOOK- Main Facebook feedINSTAGRAM- Instagram feed & storiesMESSENGER- Facebook MessengerWHATSAPP- WhatsApp BusinessTHREADS- Threads social platformAUDIENCE_NETWORK- Third-party apps/sites
Sort Methods:
SORT_BY_TOTAL_IMPRESSIONS- Most viewed first (default)SORT_BY_RELEVANCY_MONTHLY_GROUPED- Most recent first
๐ค Response Format (NDJSON Stream)
Each line is a JSON object representing real-time data. Process line-by-line as they arrive:
Log Messages
{"type":"log","level":"info","message":"๐ Processing 2 keyword queries","timestamp":"2026-01-25T23:14:09Z"}{"type":"log","level":"success","message":"๐ค Sent batch: 30 ads for \"nike\"","timestamp":"2026-01-25T23:14:15Z"}{"type":"log","level":"error","message":"โ Query failed: No ads found","timestamp":"2026-01-25T23:14:20Z"}
Ad Batches (Real-Time)
{"type":"batch","source":"keyword_query","query":"nike","batchSize":30,"ads":[{ad_object}, {ad_object}, ...],"timestamp":"2026-01-25T23:14:15Z"}
Completion Events
{"type":"query_complete","query":"nike","totalAds":100,"timestamp":"2026-01-25T23:14:30Z"}{"type":"advertiser_complete","advertiser":"Nike","totalAds":50,"timestamp":"2026-01-25T23:14:35Z"}
Error Events
{"type":"query_error","query":"test","error":"No ads found","timestamp":"2026-01-25T23:14:25Z"}{"type":"advertiser_error","advertiser":"invalid","error":"Could not resolve advertiser","timestamp":"2026-01-25T23:14:40Z"}
Summary Statistics
{"type":"summary","stats":{"queries":{"total":2,"success":2,"failed":0,"ads":150},"advertisers":{"total":1,"success":1,"failed":0,"ads":50}},"timestamp":"2026-01-25T23:14:40Z"}
Completion
{"type":"complete","timestamp":"2026-01-25T23:14:45Z"}
๐ Ad Data Structure
Each ad object contains:
{"id": "606497791453836","page_id": "15087023444","page_name": "Nike","page_url": "https://facebook.com/Nike","page_profile_picture_url": "https://...","page_likes": 5000000,"page_category": "Brand","text": "Just Do It campaign","title": "Ad Title","caption": "Visit our store","link_url": "https://nike.com","cta_text": "Learn More","media": {"type": "image|video","primary_thumbnail": "https://...","images": [...],"videos": [...]},"additional_assets": {"images": [...],"links": [...],"texts": [...],"videos": [...]},"start_date": "2024-01-15","end_date": "2024-02-15","is_active": true,"platforms": ["FACEBOOK", "INSTAGRAM"],"countries": ["US", "GB", "CA"],"ad_category": "MARKETING","contains_sensitive_content": false,"scraped_at": "2026-01-25T23:14:50Z"}
๐ฏ Search Modes Explained
1. Keyword Search
Search for ads by keywords or brand names:
{"searchQueries": ["nike", "adidas"],"maxResultsPerQuery": 100}
Use Case: Find all ads mentioning your keywords across all advertisers
2. Advertiser Search
Search ads from specific Facebook pages:
{"searchAdvertisers": ["Nike", "15087023444"],"maxResultsPerQuery": 100}
Use Case: Monitor what a specific brand/company is advertising
3. Combined Search
Both keywords and advertisers in one request:
{"searchQueries": ["marketing"],"searchAdvertisers": ["Nike", "Apple"],"maxResultsPerQuery": 50}
Use Case: Find specific keywords in ads from selected companies
๐ Supported Countries & Languages
Countries (200+)
ALL, US, GB, CA, AU, DE, FR, ES, IT, BR, IN, JP, DZ, and 190+ more ISO 2-letter codes
Languages (100+)
en, es, fr, de, it, pt, ja, ko, zh, ar, and 90+ more ISO 2-letter codes
๐ Standby Mode Deep Dive
What is Standby Mode?
Standby Mode keeps the actor running 24/7 as an HTTP API server, ready to handle requests instantly without startup delays.
Traditional Batch Mode:
Request โ Start Actor (8-15s) โ Process โ Stop Actor
Standby Mode:
Request โ Instant Response (pre-warmed instance)
Why Choose Standby Mode?
| Use Case | Batch Mode | Standby Mode |
|---|---|---|
| Nightly automated scrape | โ Best choice | Overkill |
| Live competitor dashboard | โ Too slow | โ Essential |
| API for external apps | โ Not viable | โ Perfect |
| Real-time alerts | โ No | โ Yes |
| Webhook integrations | โ Doesn't work | โ Works great |
| Mobile app backend | โ No | โ Great |
| Research project | โ Good | Expensive |
Technical Advantages
Cold Start Elimination:
- Batch: 10-15 seconds to start
- Standby: 0 seconds (instant)
- Difference: 10-15 seconds per request saved
Scalability:
- Batch: One request at a time
- Standby: Handle 100+ concurrent requests
- Difference: 100x throughput
User Experience:
- Batch: User waits for response
- Standby: Instant results
- Difference: User stays engaged
Example: Competitor Monitoring Dashboard
Scenario: Build a live dashboard monitoring Nike, Adidas, and Puma ads
With Batch Mode:
Dashboard loadsโUser clicks "Nike" tabโAPI call to scraperโWait 10 seconds (cold start) โโWait 20 seconds (scraping) โโDisplay resultsโTotal time: 30 seconds (user frustrated)
With Standby Mode:
Dashboard loads (scraper pre-warmed)โUser clicks "Nike" tabโAPI call to scraperโResults instantly โโDisplay resultsโTotal time: 2 seconds (user delighted)
How to Access Standby Mode
Automatic Access: Simply use the actor URL directly:
https://dz-omar--facebook-ads-scraper-pro.apify.actor
No Configuration Needed:
- Instance is always running
- Ready 24/7
- No startup delay
- Just send HTTP requests
Direct Integration Example:
Your application can make direct API calls:
POST https://dz-omar--facebook-ads-scraper-pro.apify.actorContent-Type: application/json{"searchQueries": ["nike"],"maxResultsPerQuery": 50}
Standby Mode Pricing
- Higher Cost: Actor runs continuously
- Break-even Point: ~3-4 requests per day
- Best For: High-frequency usage patterns
- Not Ideal For: Low-frequency, scheduled tasks
Cost Comparison (Example):
100 daily requests- Batch mode: 100 starts ร 30 sec = 50 min/day = $$- Standby mode: Always on = $ (often cheaper!)
Standby Mode Limitations
- Maximum continuous run: ~30 minutes idle timeout
- Reconnect is automatic if disconnected
- Not suitable for very low-frequency usage
- Higher base cost even if no requests
Standby Mode Best Practices
- Keep Connections Alive: Send heartbeat requests periodically
- Handle Reconnections: Implement retry logic on client side
- Batch Related Requests: Send multiple queries in one request when possible
- Monitor Performance: Track response times and errors
- Set Reasonable Limits: Don't request 10,000 ads if you need 100
| Aspect | Details |
|---|---|
| Requests | No hard limit, respects Facebook's rate limits |
| Batch Size | Default 30 ads, configurable 10-100 |
| Results per Query | 1-10,000 ads per query |
| Concurrent Requests | Unlimited (standby mode scales automatically) |
| Response Time | Real-time streaming - results as they arrive |
| Memory Usage | No limits - stream handles 1000s of ads |
๐ก๏ธ Error Handling & Migration
Automatic Retry Logic
- Failed queries are retried up to 3 times
- Exponential backoff prevents rate limiting
- Failed queries are logged but don't stop the job
Migration Handling
Server automatically handles Apify platform migrations:
{"type":"migrating","message":"Server is migrating to new instance","timestamp":"..."}
Connection behavior:
- Connection closes gracefully
- Reconnect to resume if interrupted
- No data loss - state is preserved
๐ ๏ธ Troubleshooting
Search Issues
- No results: Try broader keywords or check spelling
- Limited data: Increase
maxResultsPerQueryor expand date ranges - Missing recent ads: Facebook may have indexing delays
Connection Issues (Free Tier)
- Intermittent failures: Consider upgrading to Paid tier for stability
- Slow performance: Reduce batch size or split into multiple smaller runs
- Rate limiting errors: Wait a few minutes before retrying, or upgrade to Paid
Geographic Filtering
- Empty countries String: Use
"ALL"for global targeting - Wrong country codes: Use ISO 2-letter codes (US, not USA)
- Missing regional ads: Some ads may not be available in all regions
Media Access
- Missing media URLs: Some ads may have expired media
- Broken links: Media URLs may expire after extended periods
- Empty arrays: Check if media type matches your filter
Performance Optimization
- Large datasets: Use date ranges to limit scope
- Free tier limits: Consider Paid tier for 1000+ ads per query
- Better results: Upgrade to Paid tier for enterprise-grade stability
๐ Business Intelligence Applications
๐ฏ Competitive Intelligence
- Ad Strategy Analysis: Track competitor creative strategies
- Platform Presence: Monitor competitor activity across platforms
- Campaign Duration: Analyze campaign lengths and timing
๐ Campaign Optimization
- Creative Inspiration: Download high-quality assets
- CTA Analysis: Study effective call-to-action strategies
- Performance Benchmarking: Compare page engagement metrics
๐ Market Research
- Industry Trends: Filter by category for sector analysis
- Geographic Patterns: Analyze regional strategies
- Content Evolution: Track messaging changes over time
๐ค Support & Resources
๐ Support
Get Help
- ๐ Website: flowextractapi.com
- ๐ง Email: flowextractapi@outlook.com
- ๐ Apify Profile: dz_omar
- ๐ฌ GitHub Issues: FlowExtractAPI
Social Media
- ๐ผ LinkedIn: flowextract-api
- ๐ฆ Twitter: @FlowExtractAPI
- ๐ฑ Facebook: flowextractapi
๐ Related Actors by FlowExtract API
๐ฌ Video & Media
- YouTube Transcript Extractor - Extract transcripts with timestamps
- YouTube Scraper Pro - Complete channel and playlist extraction
- Zoom Scraper - Download recordings and transcripts
- Loom Scraper - Loom video and transcript extraction
๐ Real Estate
- Idealista Scraper API - Spanish property data with API
- Idealista Scraper - Real estate listings extractor
๐ ๏ธ Developer Tools
- Screenshot - Fast webpage screenshots
- Ultimate Screenshot - Advanced screenshot tool
- Network Security Scanner - Security vulnerability scanner
๐ฑ Social Media
- Facebook Ads Scraper Pro - Extract Facebook ads data
โ๏ธ Legal & Compliance
- Public Data Access: Only processes publicly available Facebook Ad Library data
- Rate Limiting: Respects Facebook's service limits and terms of use
- Data Protection: No storage of personal information or unauthorized data collection
- Commercial Use: Suitable for business intelligence and research applications