Meta Ad Library Scraper — Facebook + Instagram Ad Spy avatar

Meta Ad Library Scraper — Facebook + Instagram Ad Spy

Pricing

Pay per usage

Go to Apify Store
Meta Ad Library Scraper — Facebook + Instagram Ad Spy

Meta Ad Library Scraper — Facebook + Instagram Ad Spy

Scrape Meta (Facebook + Instagram) Ad Library globally. No login. Filter by keyword, Page ID, country, ad type, media, platform, language. Returns creative URLs (video HD/SD + images), landing pages, captions, CTA, spend & impressions for political/EU ads.

Pricing

Pay per usage

Rating

0.0

(0)

Developer

yossef Nagy

yossef Nagy

Maintained by Community

Actor stats

0

Bookmarked

3

Total users

1

Monthly active users

4 days ago

Last modified

Share

Scrape Meta's public Ad Library at facebook.com/ads/library/ — every active and inactive ad running on Facebook, Instagram, Messenger, and Audience Network. No login. No browser. Pure HTTP. Global coverage.

What it returns (per ad)

Every claim in this list has been verified end-to-end against the live Ad Library:

  • Ad ID (ad_archive_id) and a one-click link to view it on facebook.com/ads/library
  • Active / inactive flag
  • Advertiser Page: page_id, page_name, profile URL + picture, page like count, page categories
  • Branded-content advertiser (when applicable) — surfaces the true advertiser behind influencer posts
  • Creative:
    • HD + SD video URLs (video_hd_url, video_sd_url)
    • Watermarked variants (watermarked_video_hd_url, watermarked_video_sd_url)
    • Video preview thumbnail
    • Full image set (original + resized)
    • Carousel cards (when the ad is a carousel)
    • Extra creatives (gallery / multi-image ads)
  • Copy: body_text (caption), title, caption (display URL), link_description
  • Call-to-action: cta_text, cta_type (SHOP_NOW, INSTALL_NOW, LEARN_MORE, …)
  • Landing page: link_url (the URL the ad sends to — perfect for chaining into store-fingerprinting actors)
  • Format: display_format (VIDEO, IMAGE, DCO, DPA, etc.)
  • Regulated-disclosure data (for political/issue ads + EU ads):
    • spend (range string, e.g. "$9K-$10K USD")
    • currency
    • impressions_text (range, e.g. ">1M")
    • reach_estimate
    • byline (the disclaimer "Paid for by …")
    • disclaimer_label
  • Start / end dates (ISO 8601)
  • Categories, gated_type, state_media_run_label, contains_digital_created_media

Filters supported (verified)

FilterValuesVerified?
Keywordany string✓ (nike, allbirds, climate)
Page IDFacebook Page IDs (one or many)✓ (Nike page 15087023444 returns historical ads)
CountryISO-2 codes, multi-country support✓ (US, GB, DE tested)
Active statusactive / inactive / all
Ad typeALL / POLITICAL_AND_ISSUE_ADS / EMPLOYMENT_ADS / HOUSING_ADS / CREDIT_ADS✓ political ads return spend + impressions
Media typeall / image / video / meme✓ video-only filter verified
Publisher platformsFACEBOOK, INSTAGRAM, MESSENGER, AUDIENCE_NETWORKAPI accepts
Content languagesISO codesAPI accepts
Paginationopaque cursor via page_info.end_cursor✓ multi-page pull verified

Run modes

ModeBehavior
search (default)Keyword search across the chosen countries
advertiserPass pageIds to audit every ad a given Page is or was running
multi_countrySame keyword across many countries — output tagged with country

Example inputs

1. Daily Nike spy in 3 markets

{
"mode": "search",
"queries": ["nike"],
"countries": ["US", "GB", "DE"],
"activeStatus": "active",
"maxAdsPerQuery": 200
}

2. Full audit of one advertiser

{
"mode": "advertiser",
"pageIds": ["15087023444"],
"countries": ["US"],
"activeStatus": "all",
"maxAdsPerQuery": 1000
}

3. Political ad watch in the US

{
"mode": "search",
"queries": ["climate", "election"],
"countries": ["US"],
"adType": "POLITICAL_AND_ISSUE_ADS",
"maxAdsPerQuery": 500
}

4. Video-only beauty creative bank

{
"mode": "search",
"queries": ["skincare", "makeup", "fragrance"],
"countries": ["US", "GB"],
"mediaType": "video",
"maxAdsPerQuery": 100
}

How it works

Meta's Ad Library is publicly accessible but its frontend exchanges a short anti-bot handshake before serving the data:

  1. Actor GETs /ads/library/?…. If Meta returns a 403 challenge page (__rd_verify_…), the actor POSTs the challenge URL once and re-GETs. This is a documented public handshake; no login or credentials are involved.
  2. The actor extracts lsd + a few session tokens from the resulting HTML.
  3. Every ad-listing query goes to POST /api/graphql/ with fb_api_req_friendly_name=AdLibrarySearchPaginationQuery and the official doc_id. The same query name the Ad Library UI uses.
  4. Pagination uses Meta's own page_info.end_cursor.

Because everything is plain HTTP, runs are fast (~1-3 seconds per ~30-ad page) and memory-light.

Pricing (PAY_PER_EVENT)

EventPrice
Actor start$0.005
Per (keyword × country × filter) combo swept$0.005
Per ad row extracted$0.0005

A typical run pulling 200 ads/country in 3 countries (US/GB/DE) = ~$0.32. A full advertiser audit pulling 1,000 ads in one country = ~$0.51.

Ethics

The Meta Ad Library is a public transparency service Meta is required to publish under the EU DSA and various national laws. The actor accesses only publicly displayed information, holds no login session, and observes Meta's expected client handshake. It does not access user content, private posts, or any data behind authentication.

License

MIT.