Meta Ad Library Scraper — Ad Search & Export avatar

Meta Ad Library Scraper — Ad Search & Export

Pricing

Pay per event

Go to Apify Store
Meta Ad Library Scraper — Ad Search & Export

Meta Ad Library Scraper — Ad Search & Export

Search Meta's public Ad Library by brand/keyword or advertiser Page ID and export live ad creatives — CTA text, ad copy, images, platforms, active status. No Meta login, access token, or App Review required. A Meta/Facebook Ads Library API alternative and data exporter.

Pricing

Pay per event

Rating

0.0

(0)

Developer

DevilScrapes

DevilScrapes

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

17 hours ago

Last modified

Share


Quick answer: The Meta Ad Library Scraper searches Meta's public Ad Library by keyword or advertiser Page ID and returns every matching ad as structured data — CTA button text and type, ad body copy, link description, creative image URLs, publisher platforms, and active/inactive status. No Meta developer account, access token, or App Review is required. Pricing is pay-per-result — $3.20 per 1 000 ads landed, no subscription, no card required to try it.

🎯 What this scrapes

The Meta Ad Library is Meta's public registry of every ad running across Facebook, Instagram, Messenger, and the Audience Network. This Actor searches it directly — by free-text query (brand or keyword) or by advertiser Page ID — and walks Meta's own pagination to pull every matching ad, not just the first page.

Per ad you get:

FieldTypeNotes
ad_archive_idstringMeta's stable id for this ad
page_id / page_namestringThe advertiser's Page
is_activebooleanCurrently running or not
collation_count / collation_idint / stringCreative-variation grouping, if any
publisher_platformsarrayFACEBOOK, INSTAGRAM, MESSENGER, ...
link_urlstringAdvertiser's landing page
cta_text / cta_typestringButton copy, e.g. "Shop now" / SHOP_NOW
body_textstringPrimary ad copy
link_descriptionstringSecondary link text
image_urlsarrayCreative image URLs
display_formatstringIMAGE, VIDEO, CAROUSEL, ...
start_date_unix / end_date_unixintAd delivery window, unix seconds
ad_library_urlstringDeep link back to the live Ad Library entry
scraped_atstringISO-8601 UTC timestamp

🔥 What we handle for you

  • 🛡️ We solve Meta's session challenge automatically — the public search page replies with a short verification step before serving results; we handle it on every run so you never see it.
  • 🔁 We retry with exponential backoff on rate limits and server errors, honoring Retry-After — up to 5 attempts per request.
  • 🌐 We route through Apify Proxy, pinned to your requested country, so results reflect the market you asked for.
  • 🧱 We paginate for you. Most Ad Library scrapers stop at the first ~30 results; we keep walking Meta's own pagination until it runs out or you hit your cap.
  • 🧊 Clean, typed dataset rows — Pydantic-validated, deduplicated across pages and targets.
  • 💰 Pay-per-result pricing. A small per-run fee, then you're charged only for ads that actually land. No data, no charge.

💡 Use cases

  • Competitor ad monitoring — track what a competitor brand is running on Facebook/Instagram right now, and how their creative changes week to week.
  • Ad copy research — pull hundreds of live CTA/body-copy combinations for a niche to inform your own creative testing.
  • Brand protection — search your own brand or trademark to spot unauthorized advertisers riding your name.
  • Market research — gauge how saturated a vertical is by counting active ads for a set of keywords.
  • Agency reporting — screenshot-free proof of what's currently live for a client, exported straight to a spreadsheet.
  • AI / RAG ingestion — feed ad copy and creative image URLs into a vector store for creative-trend analysis.

⚙️ How to use it

  1. Click "Try for free" at the top of the page.
  2. Enter one or more search queries (brand names or keywords) into the Search queries field, e.g. nike, adidas. Each query is searched independently.
  3. (Optional) Add advertiser Page IDs if you already know them, instead of or alongside queries.
  4. Set a country — required, and pinned to the proxy exit so results match the market you asked for.
  5. Run. Each ad is one row in the dataset; export to JSON, CSV, or Excel from the Storage tab.

The first run on a new account uses $5 of free Apify credit — that's roughly 1 500 ads at our pricing.

📥 Input

The schema lives in .actor/input_schema.json. The fields:

FieldTypeRequiredDefaultNotes
queriesarray of stringone of["nike", "adidas"]Brand/keyword searches
pageIdsarray of stringone of[]Meta advertiser Page IDs
countrystringyesUSISO-3166 alpha-2, pinned to the proxy exit
activeStatusenumnoactiveactive / inactive / all
adTypeenumnoallall / political_and_issue_ads
maxResultsintegerno300Total dataset items across all targets. 0 = unlimited
maxPagesintegerno20Pagination ceiling per target (~8–10 ads/page)
proxyConfigurationproxy confignoRESIDENTIAL enabledSee note below — required for pagination

At least one of queries or pageIds must contain an entry.

Proxy defaults to RESIDENTIAL and it isn't a cosmetic choice. We confirmed live that Meta's ad-search results (page 1) work fine on a datacenter IP, but its pagination endpoint applies a much stricter rate limit to datacenter traffic — page 2+ gets rejected almost immediately. Switching this input to a datacenter proxy will cap every run at the first ~30 ads and fail loud (see Limitations) once maxPages asks for more than that.

Example input

{
"queries": ["nike", "adidas"],
"country": "US",
"activeStatus": "active",
"adType": "all",
"maxResults": 500,
"maxPages": 20,
"proxyConfiguration": { "useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"] }
}

📤 Output

Every row is one ad. Example:

{
"ad_archive_id": "888379050198830",
"page_id": "521386541053415",
"page_name": "EV's clothing boxes",
"is_active": true,
"collation_count": 1,
"collation_id": "1269601201531459",
"publisher_platforms": ["FACEBOOK", "INSTAGRAM"],
"link_url": "https://edjvntge.uk/collections/store",
"cta_text": "Shop now",
"cta_type": "SHOP_NOW",
"body_text": "SALE NOW! You had me at 9 vintage tees for £99",
"link_description": "Limited time only! Get 9 vintage tees for £99!",
"image_urls": ["https://scontent.fkun1-1.fna.fbcdn.net/..."],
"display_format": "IMAGE",
"start_date_unix": 1785740400,
"end_date_unix": null,
"ad_library_url": "https://www.facebook.com/ads/library/?id=888379050198830",
"query": "nike",
"country": "US",
"scraped_at": "2026-09-12T18:00:00+00:00"
}

Export options once the run finishes:

  • JSON — full payload, ideal for AI/RAG pipelines
  • CSV / Excel — for analyst spreadsheets
  • JSONL — line-delimited, easy to stream into a warehouse
  • API — fetch programmatically via GET /v2/datasets/{id}/items; webhook on ACTOR.RUN.SUCCEEDED for live pipelines

💰 Pricing

Pay-per-event. You pay for what you get, nothing for what you ask for:

EventPriceWhen charged
actor-start$0.20Base fee, once per run (warm-up, challenge-solve, proxy resolution)
ad-result$0.003Per unique ad written to the dataset

Examples:

PullCost
100 ads$0.50
1 000 ads$3.20
10 000 ads$30.20

🚧 Limitations

  • No spend, impressions, or funding_entity fields. Those figures are only ever disclosed via Meta's separate, credentialed Graph API for political/issue ads — the public search surface this Actor uses doesn't expose them for ordinary commercial ads, and we don't fabricate numbers Meta doesn't publish.
  • No direct video/image downloads. image_urls links to Meta's own CDN; we don't mirror media files.
  • Pagination needs the RESIDENTIAL proxy tier — this is the default and we recommend keeping it. We confirmed live that Meta's pagination endpoint rate-limits datacenter IPs almost immediately, even though the first page of results loads fine on one. On the default RESIDENTIAL setting our last cloud run walked page 1 → 3 and returned 49 unique ads across 23 advertisers with zero blocks, and a longer walk from a workstation reached 60 pages / 580+ unique ads on a single query; maxPages defaults conservatively to 20 so a typical run stays cheap. If you switch to a datacenter proxy to save cost, expect the run to cap at the first ~30 ads per target and fail loud with a clear error the moment maxPages asks for more than that — we'd rather fail visibly than quietly under-deliver.
  • Meta can change its session-verification step or internal query IDs without notice. If that happens, a run will fail loud with a clear status message rather than silently return nothing — and we ship a fix the same way we found the original path.

❓ FAQ

Is this legal?

Yes. The Meta Ad Library is a public registry Meta operates under EU DSA and US regulatory pressure. We search only what the public UI exposes, at a polite pace, and don't bypass any login wall or paywall.

Do I need a Meta developer account or access token?

No. Unlike Meta's official (and access-gated) Graph API, this Actor works entirely against the public Ad Library search surface — no app, no App Review, no ads_read permission.

Why is coverage sometimes less than the total Meta reports on the site?

Two reasons: your maxPages/maxResults caps, and identical creatives Meta groups into one "collation" — we return the group's representative ad rather than every duplicate variation.

Can I search political or issue ads specifically?

Yes — set adType to political_and_issue_ads. Meta discloses richer government-facing metadata for these via its own compliance tools; this Actor returns the same ad-copy fields as any other search.

How do I schedule this to run automatically?

Apify Console → Schedules → attach this Actor → set your cron. Daily or weekly is plenty; the Ad Library doesn't change fast enough to need more.

What integrations does this Actor support?

  • Schedule — Apify Console → Schedules for recurring monitoring.
  • Webhooks — register ACTOR.RUN.SUCCEEDED to fire a downstream pipeline.
  • APIPOST /v2/acts/DevilScrapes~meta-ad-library-scraper/run-sync-get-dataset-items for a single synchronous pull.
  • Make / Zapier — every Apify Actor surfaces as a node out of the box.

💬 Your feedback

Spotted a bug, missing field, or want a new feature? Open an issue on the Apify Store listing — we read every one.

Built by Devil Scrapes — Apify Actors with attitude. PPE, transparent pricing, no junk fields.