All scrapers

Social & video

Meta Ad Library Scraper

facebook.com/ads/library

In-house anti-bot Protection
Served by plugin endpoints

The Meta Ad Library is served through a dedicated plugin endpoint rather than the generic page fetch. Give it an advertiser - a Facebook Page name or a numeric Page ID - and a country, and it returns the ads Meta shows in its public Ad Library: each with the ad copy, call-to-action, format, the image and video creative URLs, the landing page, the platforms it runs on and its run dates. It runs a real browser on our own anti-bot fleet and captures Meta's own results directly, so there is no Meta developer account or access token, and none of the political-ads-only limits of Meta's official Ad Library API.

What you can extract

  • Ad copy, headline, caption and call-to-action label and type
  • Creative format (image, video, DCO, carousel) with image and video creative URLs
  • Landing page URL the ad sends the click to
  • Platforms the ad runs on (Facebook, Instagram, Messenger, Threads)
  • Run dates (started / ended) and whether the ad is currently active
  • Advertiser Page name, id and follower count

Dedicated endpoints

/ads/meta-ad-library

An advertiser's Meta ads

A Facebook/Instagram advertiser's ads from Meta's public Ad Library: ad text, CTA, creative image/video URLs, landing page, platforms and run dates. Filter by country, active status and media type; bound the result with max_ads.

How to scrape it

curl -X POST \
  -H "X-ScrapeUnblocker-Key: $SU_API_KEY" \
  "https://api.scrapeunblocker.com/ads/meta-ad-library?advertiser=Nike&country=US&active_status=active"
import requests

resp = requests.post(
    "https://api.scrapeunblocker.com/ads/meta-ad-library",
    headers={"X-ScrapeUnblocker-Key": SU_API_KEY},
    params={"advertiser": "Nike", "country": "US", "active_status": "active"},
)
print(resp.text)
import { ScrapeUnblockerClient } from 'scrapeunblocker';

const su = new ScrapeUnblockerClient({ apiKey: process.env.SU_API_KEY });

const ads = await su.metaAdLibrary('Nike', {
  country: 'US',
  activeStatus: 'active',
});
console.log(results);

Requests are POST and take their parameters in the query string. Browser rendering always happens - there is no flag to enable.

Read the API docs

Related scrapers

Start scraping this site today

Free tier included. No credit card required to test it.