Scrape competitor ads from Meta's Ad Library (Facebook, Instagram, Messenger, Threads, WhatsApp). Search by company name, Facebook Page URL, or keyword. Returns ad creatives, spend estimates, reach, impressions, and campaign details. Use for competitive ad research, messaging analysis, and creative inspiration.
npx gooseworks install --all # then, in Claude Code, Cursor, or Codex: /gooseworks use the meta-ad-scraper skill
Scrape ads from Meta's Ad Library using the Apify apify/facebook-ads-scraper actor. Covers Facebook, Instagram, Messenger, Threads, and WhatsApp.
Requires APIFY_API_TOKEN env var (or --token flag). Install dependency: pip install requests.
# Search ads by company name
python3 skills/meta-ad-scraper/scripts/search_meta_ads.py \
--company "Nike"
# Search with country filter
python3 skills/meta-ad-scraper/scripts/search_meta_ads.py \
--company "Shopify" --country US
# Search by keyword (broader than company name)
python3 skills/meta-ad-scraper/scripts/search_meta_ads.py \
--company "project management software"
# Limit results
python3 skills/meta-ad-scraper/scripts/search_meta_ads.py \
--company "HubSpot" --max-ads 20
# Search by Facebook Page URL directly
python3 skills/meta-ad-scraper/scripts/search_meta_ads.py \
--page-url "https://www.facebook.com/nike"
# Only active ads (default), or all ads
python3 skills/meta-ad-scraper/scripts/search_meta_ads.py \
--company "Salesforce" --ad-status all
# Human-readable summary
python3 skills/meta-ad-scraper/scripts/search_meta_ads.py \
--company "Stripe" --output summaryapify/facebook-ads-scraper actor via REST APIThe script handles the advertiser lookup automatically:
facebook.com/ads/library/?q=CompanyName — the Apify actor searches Meta's Ad Library for matching advertisers--page-url for exact matchingNo need to manually find Page IDs. The Apify actor resolves the search internally.
| Flag | Default | Description |
|---|---|---|
--company | required* | Company name or keyword to search |
--page-url | none | Facebook Page URL for exact advertiser match |
--country | ALL | 2-letter country code (US, GB, DE, etc.) or ALL |
--ad-status | active | active or all (includes inactive) |
--max-ads | 50 | Maximum number of ads to return |
--output | json | Output format: json or summary |
--token | env var | Apify token (prefer APIFY_API_TOKEN env var) |
--timeout | 300 | Max seconds to wait for the Apify run |
*Either --company or --page-url is required.
Each ad in the output contains:
{
"ad_id": "123456789",
"page_name": "Nike",
"page_id": "123456789",
"ad_text": "Just Do It. Shop the latest...",
"ad_creative_link_title": "Nike.com",
"ad_creative_link_description": "Free shipping on orders...",
"ad_creative_link_url": "https://nike.com/...",
"image_url": "https://...",
"video_url": "https://...",
"ad_delivery_start_time": "2026-01-15",
"ad_delivery_stop_time": null,
"currency": "USD",
"spend_lower": 100,
"spend_upper": 499,
"impressions_lower": 1000,
"impressions_upper": 4999,
"platforms": ["facebook", "instagram"],
"status": "ACTIVE"
}~$5 per 1,000 ads scraped on Apify Free plan. Paid plans are cheaper ($3.40-$5/1K).
python3 skills/meta-ad-scraper/scripts/search_meta_ads.py \
--company "Competitor Name" --country US --max-ads 100 --output summary# Search by keyword to see all advertisers in a space
python3 skills/meta-ad-scraper/scripts/search_meta_ads.py \
--company "CRM software" --max-ads 50Run the script multiple times for each competitor and compare creative approaches, messaging, and spend ranges.
--ad-status all to include historical ads.--timeout.See references/apify-config.md for detailed API configuration, token setup, and rate limits.
facebook.com/ads/library/?q=CompanyName — the Apify actor searches Meta's Ad Library for matching advertisers--page-url for exact matching--ad-status all to include historical ads.Discover rising category conversations, formats, sounds, questions, and creator patterns across social platforms, then separate durable demand signals from short-lived noise.
Turn TikTok, Instagram, YouTube, Facebook, X, LinkedIn, Reddit, or Rumble transcripts into timestamped hooks, claims, objections, proof, calls to action, sponsorship signals, and reusable content atoms. Use directly for transcript analysis or as support for creator, competitor, trend, demand, and repurposing work.
Produce a decision-ready brief of current brand, product, category, and competitor conversations across social platforms, including sentiment drivers, questions, risks, and growth opportunities.