Skip to content

Facebook Ad Library Scraper

Try for free

Scrape public ads from Facebook Ad Library search results and Facebook pages, including creative, dates, platforms, and archive ids. No login.

📣 Facebook Ad Library Scraper

Collect public ads from the Meta Ad Library in minutes. Paste an Ad Library search link, a Facebook page URL, or just a page name, and get one clean row per ad: creative, copy, call to action, landing page, dates, platforms, and the Ad Library link. No Facebook login, and ads cost a fraction of a cent each.

✨ Why use Facebook Ad Library Scraper?

  • 💸 Very cheap — $0.05 per 1,000 ads, plus a small amount of platform usage for compute and proxy traffic.
  • 🔓 No login, no cookies — it reads the same public library anyone can open in a browser.
  • 🧩 Three ways in — Ad Library search URLs, Facebook page URLs (https://www.facebook.com/nike), or a bare page slug such as nike.
  • 🎛️ Page filters — date range, active status, sort order, and country for page URLs.
  • 🔎 Optional ad details — switch on EU reach, payer, and advertiser fields for each ad.
  • 🧾 Honest errors — a URL that cannot be scraped becomes its own row with error and errorCode, and error rows are not charged.

🎯 Use cases

  • 🕵️ Competitor research — see what ads a brand is running on Facebook and Instagram right now.
  • 🧠 Creative inspiration — search a keyword and export the ad copy, call to action, and landing page.
  • 📈 Ad monitoring — check whether an ad is still active and when it started.
  • 🏛️ Transparency work — read the page transparency summary for any Facebook page.
  • 🗂️ Agency reporting — build a spreadsheet of a client's or rival's ads with the Ad Library link for each.

🚀 How to use

  1. Paste one or more URLs: an Ad Library search URL, a Facebook page URL, or a page slug.
  2. Set Maximum ads (default 10).
  3. For page URLs, optionally set date range, active status, sort, and country.
  4. Click Start. Results appear in the dataset as the run goes.
  5. Export to JSON, CSV, Excel, or HTML, or fetch the data through the API.

📥 Input

FieldTypeWhat it does
urlsarrayAd Library search URLs, Facebook page URLs, or page slugs. Required.
countintegerTotal ads to save across all URLs. Default 10.
limitPerSourceintegerMaximum ads from each URL. Leave empty to use only count.
scrapePageAds.periodselectPage URLs only: keep ads that started in the last 24 hours, 7, 14, or 30 days.
scrapePageAds.activeStatusselectPage URLs only: all, active, or inactive.
scrapePageAds.sortByselectPage URLs only: impressions_desc or most_recent.
scrapePageAds.countryCodestringPage URLs only: two-letter country code such as US, or ALL.
scrapeAdDetailsbooleanAdd EU reach, payer, and advertiser fields. Slower, one extra request per ad.
runTagstringCopied onto each saved row as runTag.
proxyobjectDatacenter proxy is used by default.

An Ad Library search link keeps the country, keyword, status, and media type already in the link.

{
  "urls": [
    {
      "url": "https://www.facebook.com/ads/library/?active_status=active&ad_type=all&country=US&q=coffee&search_type=keyword_unordered&media_type=all"
    }
  ],
  "count": 10
}

📤 Output

Each ad is one dataset row. The default table shows the page, title, ad text, active flag, platforms, dates, landing page, and Ad Library link.

FieldDescription
ad_archive_idAd Library archive id.
page_name, page_idThe page that ran the ad.
is_activeWhether the ad is still running.
start_date_formatted, end_date_formattedStart and end time in UTC.
total_active_timeActive time in seconds as Facebook reports it. Facebook only fills it for very recent ads (roughly the first day after the start date) and leaves it empty for older ones; the actor passes it through and never computes it from the dates.
publisher_platformPlatforms where the ad ran (Facebook, Instagram, and others).
snapshotCreative: title, body text, call to action, cards, images, videos, link URL.
ad_library_urlPublic Ad Library page for the ad.
url, totalThe input URL and the count the library reports for a keyword search.
pageInfoPage transparency summary, for page URLs.
aaa_infoPayer and EU reach details when ad details are on.
error, errorCodeOnly on rows for URLs that could not be scraped.
{
  "ad_archive_id": "2619351891814847",
  "page_name": "American Health Support Community",
  "page_id": "966175593248497",
  "is_active": true,
  "start_date_formatted": "2026-07-18 07:00:00",
  "end_date_formatted": "2026-10-13 07:00:00",
  "publisher_platform": ["FACEBOOK", "INSTAGRAM", "AUDIENCE_NETWORK", "WHATSAPP", "THREADS"],
  "ad_library_url": "https://www.facebook.com/ads/library/?id=2619351891814847",
  "snapshot": {
    "title": "Natural Relief in Weeks",
    "body": { "text": "My aunt called me a creep for putting a camera in Nana's living room." },
    "cta_text": "Learn more",
    "link_url": "https://shop.pipitea.com/hbt/kd/sp-nm",
    "display_format": "IMAGE"
  },
  "total": 50001,
  "url": "https://www.facebook.com/ads/library/?active_status=active&ad_type=all&country=US&q=coffee&search_type=keyword_unordered&media_type=all"
}

The example is trimmed; real rows also include card, image, and video URLs inside snapshot.

💰 Pricing

You pay $0.00005 per ad saved, which is $0.05 per 1,000 ads, plus platform usage for compute and proxy traffic. Rows that only report an error are not charged.

Worked example: saving 1,000 ads costs $0.05 in result fees, plus the platform usage of the run.

❓ FAQ

Is it legal to scrape the Ad Library? The Ad Library is public by design. This actor only reads public pages without logging in. You are responsible for how you use the data and for following local law and platform terms.

Do I need a Facebook login or my own proxy? No login. A datacenter proxy is included by default.

How many ads can I get? As many as you set in count, but Facebook shows logged-out visitors only the first page of about 30 ads per search or page. To collect more, add several narrower URLs (one per country, media type, or date range) in the same run.

Why are spend and reach_estimate empty? Meta publishes those figures for some political and social-issue ads. Ordinary commercial ads usually leave them empty.

Can I schedule it or call it from code? Yes. Use schedules in the console, or start runs and read datasets through the API.

Moving from another Ad Library actor? The URL list, count, page filters, and ad-details switch use the same input names as the curious_coder actor.

⚠️ Limits

  • Public ads only. It does not log in and does not read private profiles.
  • About 30 ads per URL: Facebook limits logged-out visitors to the first result page of each search or page. The run status says when a URL returned fewer ads than requested. Use several narrower URLs to get more.
  • An unknown country code in the page filters stops the run with a clear message. An unknown country in a pasted link falls back to all countries.
  • Page filters apply to Facebook page URLs. A pasted Ad Library link keeps its own filters.
  • A date range can return fewer ads than the maximum when few ads started in that window.
  • Ad details add one request per ad, so that option is slower.
  • Each library request stops after 12 seconds and is retried once. If the library is slow, you get the ads already collected.
  • Runs take around 20 seconds for a small job, so this is not the fastest option for tiny batches.

Related actors

G2
4.7/5
Excellent
Trustpilot

The internet is full of data.
Start owning yours.

Scrape.ly gives you the infrastructure, the tooling, and the team to extract, process, and operationalize web data at any scale. Setup takes minutes. The advantage lasts forever.

No credit card. No setup calls.