Meta (Facebook & Instagram) Ad Library Scraper
Pricing
from $2.50 / 1,000 results
Meta (Facebook & Instagram) Ad Library Scraper
Scrape any advertiser's Facebook & Instagram ads from Meta's Ad Library: creatives, copy, CTA, run dates. $3.50 per 1,000 ads — no Meta API approval needed.
Pricing
from $2.50 / 1,000 results
Rating
0.0
(0)
Developer
Jaybird Technologies
Maintained by CommunityActor stats
0
Bookmarked
16
Total users
12
Monthly active users
10 days ago
Last modified
Categories
Share
Scrape any advertiser's Facebook and Instagram ads from Meta's public Ad Library and get clean, structured JSON — ad copy, creatives (images & video), CTA, link URLs, and start/end dates per ad. A practical Meta Ad Library API alternative: no app review, no identity verification, works for ALL advertisers (not just political ads).
What does Meta Ad Library Scraper do?
Four lookup modes in one Actor:
- Keyword — free-text search across all advertisers ("Nike").
- Page URL — paste a Facebook page link; the Actor resolves the handle and returns only that page's ads (never a near-match from an unrelated page).
- Page ID — direct numeric lookup.
- Batch — many keywords in one run.
Each ad comes back as one JSON record with identity, lifecycle, creative, and media fields — ready to download as JSON/CSV/Excel or fetch via API.
Why use this scraper?
- 💰 $3.50 per 1,000 ads — pay-per-event, no subscription. Roughly a third of what leading alternatives charge per result.
- 📅 Ad lifecycle dates —
start_date/end_dateper creative (most scrapers omit these), so you can compute how long each ad has been running — the classic signal of a winning creative. - 🎯 Honest advertiser resolution — page-URL mode never silently returns ads from the wrong page; you get an explicit warning instead.
- 🔍 Transparent data quality — every item is schema-validated; if Meta changes its markup you see
_validation_errorson the item instead of silent nulls. - 🚫 No Meta API hoops — the official API requires app review and covers only political/EU ads. This covers every advertiser.
- 🗓️ Apify platform perks — schedules, webhooks, 5,000+ integrations, JS/Python SDKs.
What data can it extract?
| Field | Description |
|---|---|
ad_archive_id | Unique ad ID in Meta's library |
page_id, page_name, page_profile_uri | Advertiser identity |
page_like_count, page_categories | Advertiser context |
start_date, end_date, is_active | Ad lifecycle (ISO dates, UTC) |
display_format | image / video / carousel / dco |
title, caption, body_text | Ad copy |
cta_text, cta_type, link_url | Call-to-action and destination |
image_url, video_url, all_image_urls, all_video_urls | Creative media |
matched_via, query, region, fetched_at | Provenance |
A per-run summary (OUTPUT.json in the key-value store) reports advertisers resolved, Meta's library-wide ad counts, block rate, and pagination cursors.
How to scrape the Meta Ad Library
- Click Try for free / open the Actor.
- Pick a search mode and enter a keyword, page URL, or page ID. (Filled in a lookup field but forgot to switch the mode? If exactly one lookup field is populated, the Actor auto-corrects the mode and notes it in the run summary
warnings[].) - (Optional) Set region, active-only, media type, and max ads per advertiser; enable pagination for deep pulls.
- Click Start, then download JSON/CSV/Excel or fetch via API.
How much will it cost?
Pay-per-event: $0.0035 per ad scraped — $3.50 per 1,000 ads, no monthly rental. Example: monitoring 10 competitors at up to 100 ads each costs at most $3.50 per run. Exact current prices are on the Pricing tab.
Input example
{"search_mode": "batch","queries": ["nike", "adidas", "puma"],"follow_pagination": true,"max_ads_per_advertiser": 100}
Output example
{"ad_archive_id": "1667643404381457","page_name": "Pets On Broadway","start_date": "2026-05-04","end_date": "2026-05-15","is_active": true,"display_format": "image","title": "petsonbroadway.com","body_text": "This May, every purchase of Nulo dog food helps...","cta_text": "Shop now","link_url": "https://petsonbroadway.com/collections/nulo","image_url": "https://...img1.jpg","matched_via": "page_id","fetched_at": "2026-05-16T05:30:11.415359Z"}
Integrations
Export to Google Sheets, Drive, S3, or a database; automate with Zapier, Make, webhooks; schedule nightly competitor monitoring; or call via the Apify API / SDKs. Tip: compute days_active = end_date − start_date downstream to rank competitors' longest-running (= winning) creatives.
FAQ
How is this different from Meta's official Ad Library API? The official API requires app review + identity verification and only covers political/issue/EU ads. This Actor covers all public ads for all advertisers, with zero approval process.
Are duplicate ads possible? In batch mode, overlapping queries can surface the same ad_archive_id once per query (each query is its own billed search). Group by ad_archive_id for unique creatives.
What happens when Meta changes its site? Items are schema-validated before push; affected items carry a _validation_errors field instead of failing silently, and nightly monitored runs surface drift early.
How does it handle blocking? Two tiers, automatically. Every query first runs through datacenter proxies with session rotation. If a query exhausts datacenter retries while blocked, it is retried once through residential proxies geo-matched to your region — residential bandwidth is spent only on queries datacenter could not serve. Nothing is hidden: each escalation appears as a WARN log and in the run summary's warnings[], and the summary's queries_escalated / queries_rescued counters show the per-tier outcome. If every query ends blocked on both tiers, the run fails honestly (non-zero exit, aborted_reason set) instead of reporting an empty success. Note: if the run aborts mid-crawl (circuit breaker), already-blocked queries still get their residential attempt, so a summary can read aborted: true with queries_rescued > 0 — the rescue happened, but part of the queue was never processed.
Is it legal to scrape the Ad Library? Meta publishes this data specifically for transparency. The Actor collects only public data — no private user data. You are responsible for your use of results; personal data is protected by GDPR and similar regulations.
Found a bug or need a field? Open an issue on the Issues tab.