Facebook Ads Scraper Pro
Pricing
Pay per event + usage
Facebook Ads Scraper Pro
Extract comprehensive Facebook Ad Library data including creative content, targeting info, performance metrics, and media downloads. Perfect for competitive analysis, market research, and advertising intelligence across all Meta platforms (Facebook, Instagram, WhatsApp, Messenger).
Pricing
Pay per event + usage
Rating
4.9
(21)
Developer

FlowExtract API
Actor stats
48
Bookmarked
533
Total users
76
Monthly active users
1.6 hours
Issues response
8 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