meta-ad-scraper — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited meta-ad-scraper (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
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.
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.