Skip to content

Facebook Ads Library Scraper

Try for free

Extract public ads from the Meta Ad Library by Facebook page, keyword, or ad-library URL. Returns creative, dates, platforms, delivery status, and optional page transparency.

📣 Facebook Ads Library Scraper

Pull public ads from the Meta Ad Library without a Facebook login. Give it a Facebook page, a keyword search, or a full ad-library link and get back the creative, dates, platforms, and delivery status for every ad, ready to export as JSON, CSV, or Excel. Ads cost $3.50 per 1,000.

The actor reads the same public library anyone can open in a browser, so there are no cookies, accounts, or tokens to manage.

✨ Why use Facebook Ads Library Scraper?

  • 🔓 No login — public ad-library data only, no Facebook account or cookies.
  • 🔗 Paste anything — page URLs, page slugs like nike, or filtered ad-library links.
  • 🧬 Full creative — ad copy, call to action, cards, images, videos, landing page, and page info.
  • 📅 Dates and status — start and end dates, and whether each ad is still running.
  • 🏢 Optional extras — page transparency, per-ad detail view, total counts, and product-page enrichment.
  • 💸 Cheap — a flat per-ad price, with no monthly subscription.

🎯 Use cases

  • 🕵️ Competitor watching — see what brands run on Facebook, Instagram, Messenger, Audience Network, and Threads.
  • 🎨 Creative research — collect ad copy, calls to action, and landing pages for a brand or keyword.
  • ⏱️ Campaign tracking — check which ads are still running and when they started.
  • 🏛️ Advertiser lookup — pull page transparency (owner, history, admin countries) for the advertiser behind a page.
  • 🛍️ Product monitoring — follow landing pages to attach public product names, prices, and images.

🚀 How to use

  1. Paste one or more Page or ad library URLs. A page URL, a page slug, or a filtered ad-library link all work.
  2. Set Ads per URL.
  3. Optionally narrow by active status, sort, and start dates, or switch on the extras.
  4. Click Start.
  5. Download the dataset as JSON, CSV, or Excel, or read it through the API.

📥 Input

FieldTypeDescription
startUrlsarrayFacebook page URL, page slug, or Meta Ad Library URL. Filters already in a library URL are kept.
resultsLimitintegerMaximum ads saved per URL. Default 10.
activeStatusstring"" (all), active, or inactive. Used when the URL does not already set it.
sortingstring"", total_impressions, or relevancy_monthly_grouped. Used when the URL does not set it.
onlyAdsNewerThanstringKeep ads started on or after this day. YYYY-MM-DD or a relative value like 7 days.
onlyAdsOlderThanstringKeep ads started on or before this day. Same formats.
onlyTotalbooleanOne row per URL with the total count and the first page of ads under results.
includeAboutPagebooleanAdd page about text, owner, admin locations, and history on page searches.
isDetailsPerAdbooleanAdd an ad_details object per ad.
enrichWithEcommerceDatabooleanFollow landing URLs and attach ecommerceData. Charged per product URL.
proxyConfigurationobjectProxy settings. Residential is the default.
{
  "startUrls": [
    {
      "url": "https://www.facebook.com/ads/library/?active_status=active&ad_type=all&country=ALL&is_targeted_country=false&media_type=all&search_type=page&view_all_page_id=15087023444"
    }
  ],
  "resultsLimit": 10,
  "proxyConfiguration": {
    "useScrapelyProxy": true,
    "scrapelyProxyGroups": ["RESIDENTIAL"]
  }
}

📤 Output

Each ad is one dataset row.

FieldDescription
inputUrlThe URL that was searched.
pageName, pageIDAdvertiser page name and id.
adArchiveIDAd Library archive id.
isActiveWhether the ad is still running.
startDateFormatted, endDateFormattedStart and end time in UTC.
publisherPlatformPlatforms where the ad ran.
snapshotCreative: body text, title, call to action, cards, images, videos, link.
pageInfoPage record from the search, with transparency when requested.
ad_detailsDetail view per ad, when enabled.
ecommerceDataProduct name, price, and image from landing pages, when enabled.
totalCount, resultsTotal ads and nested first page, on total-count rows.
spend, reachEstimateEmpty on ordinary commercial ads.

A trimmed item from a real run:

{
  "adArchiveID": "3951220848520194",
  "pageID": "380039845369159",
  "pageName": "SHEIN",
  "isActive": true,
  "startDateFormatted": "2026-07-26T07:00:00.000Z",
  "endDateFormatted": "2026-10-13T07:00:00.000Z",
  "publisherPlatform": ["FACEBOOK", "INSTAGRAM"],
  "inputUrl": "https://www.facebook.com/SHEINOFFICIAL",
  "spend": null,
  "reachEstimate": null,
  "snapshot": {
    "pageName": "SHEIN",
    "pageProfileUri": "https://facebook.com/SHEINOFFICIAL",
    "pageCategories": ["Clothing (Brand)"],
    "pageLikeCount": 39137622,
    "displayFormat": "DPA",
    "ctaText": "Shop now",
    "title": "{{product.name}}",
    "body": { "text": "Eleve seu visual com nossa seleção criteriosa de sapatos da moda" },
    "cards": [
      {
        "title": "Tênis Masculino Branco Gelo Chunky Para Basquete Corrida…",
        "ctaType": "SHOP_NOW",
        "caption": "m.shein.com",
        "linkUrl": "https://br.shein.com/ark/default?scene=1&…"
      }
    ]
  }
}

Catalog and dynamic ads store template text such as {{product.name}}. That is the copy Meta keeps in the library. A URL that fails (invalid, page not found, blocked) saves no row and is never charged: it is listed with the reason under failedInputs in the run's OUTPUT record and in the status message, and ads already collected stay in the dataset.

💰 Pricing

EventPrice
Ad (result-item)$0.0035 ($3.50 per 1,000 ads)
Product page (ecommerce-enrichment)$0.002

Product pages are charged only when that option is on and a landing page returns a product name plus a price or image. When an ad's products would go over your maximum charge, the ad keeps only the products the remaining budget pays for, is charged for exactly those, and is marked truncatedAtChargeLimit: true; the run then stops.

Worked example: a 10-ad run costs 10 x $0.0035 = $0.035 in event fees. Platform usage (compute and proxy) is billed on top at the usual rates; the default residential proxy is $2 per GB, and ads are light (about 3 MB per 1,000 ads, under one cent). A 10-ad run costs about $0.036 in total, and 1,000 ads about $3.51 plus compute.

❓ FAQ

Do I need a Facebook account or cookies?

No. The actor uses the public ad library only.

Is it legal?

It reads public pages that anyone can open. You are responsible for how you use the data and for following the rules that apply to you.

Why is spend empty?

Meta does not publish spend for a normal commercial ad. Political and social-issue ads include a range.

Can I paste a filtered library link?

Yes. Country, keyword, platforms, media type, page id, and sort in the URL are sent with the search. Date and media filters are checked again on the saved ads, because the library sometimes returns a wider set than the URL asked for.

What happens if the library blocks an exit?

The run uses residential exits by default and retries each request on a fresh exit. If you choose the datacenter pool and it is blocked, the run switches to a residential exit. Rows saved before a later page fails are kept, and the run's status message says where it stopped.

Can I schedule it or use the API?

Yes. Schedule runs, start them through the API, and read the dataset in any export format.

If you are moving from a similar Ad Library actor on another platform, paste the same library URL into Page or ad library URLs.

⚠️ Limits

  • 🔒 Public ad-library data only. Private posts, accounts, and logged-in views are out of scope.
  • 🔢 Each URL returns at most the number in Ads per URL and at most what the library itself lists for that search.
  • 🐢 The first 30 ads of a search come back in seconds. Further result pages arrive about 10 ads at a time, so large searches run at roughly 2 to 3 ads per second (1,000 ads in about 7 minutes). The default run timeout is 2 hours.
  • 🌐 The library refuses further result pages to datacenter addresses, so residential exits are the default. Residential traffic is small (about 3 MB per 1,000 ads).
  • 🏢 Page transparency works for a page search, not for a keyword that mixes many advertisers.
  • 🛒 Product enrichment reads the public landing page. Shops that hide price and name from a simple fetch are skipped and not charged.
  • 💶 Commercial ads do not include exact spend or reach.

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.