Request a tool
All toolsGuidesMCP serverRequest a toolPlatformsCategories
Meta Ad Library Scraper icon

Meta Ad Library Scraper

Scrape Facebook and Instagram Ad Library ads by keyword, advertiser Page ID or URL. No login, no Meta API token. Ad copy, creatives, dates, platforms, spend.

35 runs on Apify $0.00034 per ad ($0.34 / 1,000)
Run this in the cloudRun on Apify →

Ad Intelligence & Competitor Research

How it works

  1. 1
    Open it on Apify

    Hit Run on Apify — it opens the tool in the cloud, no install.

  2. 2
    Set the inputs

    Adjust searchTerms, advertiserPageIds, adLibraryUrls (sensible defaults are pre-filled).

  3. 3
    Click Run

    The tool runs on Apify’s cloud and collects the data for you.

  4. 4
    Export the results

    Download as JSON, CSV or Excel, or pipe straight into your app, Google Sheets, or an AI agent.

Pricing

$0.00034 per ad = $0.34 per 1,000

You are charged forWhenPrice
AdOne ad delivered to your dataset, with ad copy, creatives, advertiser page, run dates, platforms and — for political & issue ads — impression, spend and reach ranges. Sample rows, blocked searches and empty searches are never charged.$0.00034
Actor StartCharged when the Actor starts running. Number of events charged depends on Actor memory (one event per GB, minimum one event).$0.001

Pay-per-event pricing: you are billed per result, not per subscription — a run that returns nothing costs nothing beyond the start fee. Billing is handled by Apify on your own account. These are the live Apify store prices, in effect since 2026-08-08, and they are what you are actually charged.

Inputs

FieldWhat it doesType
searchTermsKeywords to search the Ad Library for, e.g. "nike" or "solar panels". One scrape per term.array
advertiserPageIdsNumeric Facebook Page IDs to pull every ad for, e.g. "15087023444" (Nike). Use this instead of a keyword to get one advertiser's full ad set.array
adLibraryUrlsPaste facebook.com/ads/library/ URLs straight from your browser. Filters in the URL (country, ad type, active status) are read automatically.array
countryTwo-letter country code for the Ad Library edition to search, or ALL for every country.string
maxResultsHow many ads to return for each search term, page ID or URL. Meta serves 30 ads up front and 10 per page after that, so 1,000 ads takes about 100 requests and 2-3 minutes.integer
activeStatusReturn only ads currently running, only ads that have stopped, or both.string
adTypeAll ads, or only political & issue ads. Impressions, spend, currency, reach and byline are published by Meta for political & issue ads ONLY — pick "Political and issue ads" if you need them. On a general search they are empty on ~98% of rows.string
mediaTypeFilter ads by the kind of creative they use.string
searchTypeMatch the words in any order, or as an exact phrase.string
publisherPlatformsOnly return ads shown on these Meta platforms. Leave empty for all of them.array
startDateYYYY-MM-DD. Meta treats this as an OVERLAP window: you get ads that were running at some point between the two dates, not only ads that started in it. Must be set together with the end date or both are ignored. Measured: a Nike search went from 50,001 matches to 179 with a 2025-01-01 to 2025-03-31 window.string
endDateYYYY-MM-DD. The other end of the overlap window. Must be set together with the start date.string
includeAdDetailsAdds age/gender reach breakdown, reach by region, advertiser page category, page likes, linked Instagram username and follower count, and lifetime political spend. One extra request per ad, so a 1,000-ad run roughly doubles in length. No extra charge.boolean
useApifyDatacenterProxyAdds Apify's datacenter proxy to the fallback chain if the built-in addresses are refused. Off by default because Meta rate-limits shared datacenter ranges harder.boolean

What you get

A structured dataset — each result includes fields like:

adArchiveIdpageNamepageIdisActivestartDateendDateadTitleadBodyctaTextlinkUrldisplayFormatpublisherPlatformsimpressionsspendcurrencycategoriesadLibraryUrlcaptionlinkDescriptionctaTypeimagesvideoscardsbylinedisclaimerLabelreachEstimate

Export every run as JSON, CSV or Excel, or send it to your app, a database, Google Sheets, or an AI agent.

Related tools in Ad Intelligence & Competitor Research

Other ready-to-run tools in the same category — all pay-per-use on the Apify cloud.

TikTok Trending Hashtags iconAd Intelligence & Competitor Research

TikTok Trending Hashtags

Get official TikTok Creative Center hashtag rankings by country and period: rank, posts, views, popularity curves, industries and top creators.

Ready to run — no setup

SaaS Competitor Monitor: Pricing, Changelog & Positioning iconMonitors & Alerts

SaaS Competitor Monitor: Pricing, Changelog & Positioning

Track competitor SaaS pricing, changelogs, and positioning changes on a schedule. Get structured deltas and Slack alerts for only what changed.

4 use cases

G2 Reviews Scraper iconReviews & Reputation Data

G2 Reviews Scraper

Scrape G2 software reviews at $1.70 per 1,000: rating, title, full text, reviewer, date and URL. Any product slug. No G2 account or API key needed.

Ready to run — no setup

Google Trends Scraper iconAd Intelligence & Competitor Research

Google Trends Scraper

Google Trends data with no API key: keyword interest over time, interest by region or city, top and rising related queries, and Trending Now by country.

Ready to run — no setup

Yandex Search Engine Scraper (SERP API) iconAd Intelligence & Competitor Research

Yandex Search Engine Scraper (SERP API)

Scrape Yandex search results by keyword or URL. Rank, title, URL, domain, snippet, ads and SERP features, with region targeting. No API key.

Ready to run — no setup

Google Ads Transparency Scraper iconAd Intelligence & Competitor Research

Google Ads Transparency Scraper

Scrape Google Ads Transparency Center by domain, advertiser name or advertiser ID. Ad creatives, formats, first/last shown dates, countries and previews.

Ready to run — no setup

See all Ad Intelligence & Competitor Research →

Meta Ad Library Scraper — Facebook & Instagram ads API

Pulls ads out of Meta's public Ad Library (facebook.com/ads/library) as clean JSON. Search by keyword, by advertiser Page ID, or by pasting an Ad Library URL straight from your browser. You get the ad copy, the creative URLs, the advertiser page, the run dates, the platforms it ran on — and, for political & issue ads, Meta's published impression, spend and reach ranges.

No Facebook login, no Meta API token, no cookies to supply. Point it at a search and it runs.

$0.34 per 1,000 ads, plus a $0.001 start fee. Flat — that is the price on every Apify plan, including the free one, with no volume tiers to unlock and no plan gates. Most Ad Library scrapers charge several times this on a new account, and the better rates they advertise are volume tiers you have to be on a paid subscription to reach — the full breakdown of what you pay here is under Pricing below.

---

What you get, with real numbers

Every figure below comes from actual runs of this Actor, not from an estimate.

InputAds returnedTime
nike, US, active only, max 555.8 s
Advertiser Page ID 15087023444 (Nike), max 808012.4 s
election, US, political & issue ads, max 12012024.0 s
nike, US, active only, max 25025041.3 s
coffee, US, active + inactive, max 10001000162.9 s

The 1,000-ad run returned 1,000 distinct adArchiveId values and zero duplicates.

Field coverage measured over that 1,000-ad commercial search:

FieldFilled
adArchiveId, adLibraryUrl, pageId, pageName, isActive, startDate, endDate100%
pageUrl, pageProfilePictureUrl100%
pageCategories, pageLikeCount, adBody, displayFormat98%
ctaText, ctaType, linkUrl, caption92%
adTitle79%
linkDescription51%
images38%
videos35%
cards (carousel / DPA slides)26%

The transparency fields, honestly

impressions, spend, currency, reachEstimate, byline and disclaimerLabel are not published by Meta for ordinary commercial ads. Meta publishes them for political and issue ads only. That is a Meta policy, not a limitation of this scraper — nobody can give you Nike's ad spend, because Meta does not publish it.

So the numbers depend entirely on what you search:

SearchimpressionsspendcurrencyreachEstimatebyline
adType: "political_and_issue_ads" (120 ads, US)100%100%100%96%99%
adType: "all" (1,000 ads, US, coffee)2%2%2%2%2%

The 2% on a general search is real data — it is the handful of political ads that matched the keyword. If you want spend and impressions, set Ad category → Political and issue ads.

Real values look like impressions: ">1M", spend: "$450K - $500K", currency: "USD", byline: "Facebook, Inc.", disclaimerLabel: "PAID_FOR_BY". Meta publishes ranges, not exact figures, so that is what you get.

Example row (trimmed)

A real row, copied out of a run (long CDN URLs shortened):

{
  "adArchiveId": "1249043200627555",
  "adLibraryUrl": "https://www.facebook.com/ads/library/?id=1249043200627555",
  "isActive": true,
  "pageId": "15087023444",
  "pageName": "Nike",
  "pageUrl": "https://www.facebook.com/nike/",
  "pageProfilePictureUrl": "https://scontent-iad3-1.xx.fbcdn.net/v/t39.35426-6/653833698_…jpg",
  "pageCategories": ["Sportswear"],
  "pageLikeCount": 39574229,
  "startDate": "2026-03-17",
  "endDate": "2026-08-08",
  "publisherPlatforms": ["FACEBOOK", "INSTAGRAM", "AUDIENCE_NETWORK", "MESSENGER"],
  "adTitle": "Nike: Shoes, Apparel & Stories",
  "adBody": "Celebra tu cumpleaños con Nike y obtén acceso a productos exclusivos, MSI, envío y devoluciones gratis el resto del año.",
  "caption": "play.google.com",
  "linkUrl": "http://play.google.com/store/apps/details?id=com.nike.omega",
  "ctaText": "Shop now",
  "ctaType": "SHOP_NOW",
  "displayFormat": "DPA",
  "images": [],
  "videos": [],
  "cards": [
    {
      "title": "Nike",
      "linkUrl": "https://www.nike.com/mx/t/espinillera-de-fútbol-charge-MFtBhV/DX4608-100",
      "linkDescription": "…the ad's own link description…",
      "ctaText": "Shop Now",
      "imageUrl": "https://scontent-iad3-1.xx.fbcdn.net/v/t39.35426-6/653801683_…jpg"
    }
  ],
  "impressions": null,
  "spend": null,
  "categories": [],
  "searchTerm": "page:15087023444",
  "country": "US",
  "scrapedAt": "2026-08-08T16:09:32.563Z"
}

Input

Give it at least one of these three:

  • searchTerms["nike", "solar panels"]. One scrape per term.
  • advertiserPageIds["15087023444"]. Every ad from one advertiser's Page.
  • adLibraryUrls — paste https://www.facebook.com/ads/library/?... from the browser. The

country, ad type, status, platform and date filters in the URL are read and applied.

Then narrow it down:

OptionWhat it does
countryTwo-letter code, or ALL. Default US.
maxResultsAds per search term. Default 100.
activeStatusactive, inactive, or all.
adTypeall, or political_and_issue_ads for the spend/impressions data.
mediaTypeall, image, video, meme, none.
searchTypeWords in any order, or exact phrase.
publisherPlatformsFacebook, Instagram, Messenger, Audience Network, Threads, WhatsApp.
startDate / endDateAn overlap window — see the FAQ.
includeAdDetailsAdds EU age/gender/region reach and advertiser page stats.

Leave the input completely empty and you get one clearly labelled _sample: true row, free, so you can see the shape before you spend anything.

What includeAdDetails adds

One extra request per ad, no extra charge, roughly double the run time. Measured on 12 political ads, all at 100% coverage except advertiserAbout (67%):

ageGenderBreakdown, regionReach, advertiserEntityType, advertiserPageCategory, advertiserPageAlias, advertiserPageLikes, advertiserInstagramUsername, advertiserInstagramFollowers, isPoliticalPage, lifetimeSpendByDisclaimer, advertiserAbout.

Example: advertiserInstagramFollowers: 5721292, lifetimeSpendByDisclaimer: [{"disclaimer": "Facebook Inc.", "spend": 497126}].

What this does not do

Read this part before you buy.

  • It cannot give you spend or impressions for commercial ads. Meta does not publish them. Any

tool that claims otherwise is guessing.

  • No exact numbers, ever. Meta publishes buckets: ">1M", "$450K - $500K". There is no

underlying precise figure to extract.

  • No ad performance data — no CTR, no conversions, no ROAS. The Ad Library is a transparency

archive, not an analytics product.

  • No creative downloads. You get image and video URLs from Meta's CDN. Those URLs expire after a

while, so fetch them soon after the run.

  • Meta caps a keyword search at 50,001 reported matches and stops handing out pages well before

that. Searching a broad term such as nike will not hand you 50,000 ads. If you need depth, search by advertiser Page ID instead — that returns the advertiser's full set.

  • No targeting data for non-EU ads. EU age/gender/region reach comes through

includeAdDetails; US commercial ads have none to give.

  • No login-only views. Everything here is what a logged-out visitor can see.
  • violationTypes is not returned. It was empty on every ad tested, and an always-blank column

is worse than no column.

How it works

The Ad Library page server-renders its first 30 results inside the HTML, along with the CSRF token and the exact GraphQL variables the page was built with. This Actor reads that blob, then continues through Meta's own AdLibrarySearchPaginationQuery endpoint — the same one the site calls when you scroll — 10 ads per page, replaying the page's own variables with a fresh cursor each time.

Requests go out over rented static-ISP addresses with a Chrome TLS fingerprint. Apify's residential proxy is never used; PROXY_RESIDENTIAL_TRANSFER_GBYTES is 0 on every run. If one exit address gets throttled mid-run, the Actor moves to the next one and keeps going without re-billing ads it already delivered.

Pricing

Per ad delivered$0.00034 ($0.34 per 1,000)
Actor start$0.001 per run

You are charged for ads that actually reach your dataset. The free sample row, a search that returns nothing, and a search that gets blocked are all uncharged — they arrive as labelled diagnostic rows so you can see what happened.

One number, every plan. $0.34 per 1,000 ads is what a brand-new free account pays and what a top-tier enterprise account pays — there is no volume ladder to climb here, so the figure you see before you press start is the figure on the invoice. That is the cheapest Meta Ad Library scraper on the market for a new account.

Being straight about the one caveat: some Ad Library Actors are tier-priced, and a handful of them dip below $0.34 *if* you are already paying for a high-volume Apify subscription. Several of those also attach a per-run start fee an order of magnitude larger than the $0.001 here, which puts them back above this on small and medium runs. If you are on a large subscription and running millions of ads a month, price every option at your own tier before deciding; for everyone else, this is the lowest number available.

AdsCost here
100$0.035
1,000$0.341
10,000$3.401
100,000$34.001

FAQ

What is the Meta Ad Library? A public archive Meta runs at facebook.com/ads/library. Every ad currently running on Facebook, Instagram, Messenger, Threads and Audience Network appears in it, and political & issue ads stay there for seven years with their spend and impression ranges attached.

Can I scrape the Facebook Ad Library without an API key? Yes. The Ad Library is public and this Actor reads it the same way a browser does. You do not need a Meta developer account, an access token, or a Facebook login. Meta's official Ad Library API covers political ads only and requires ID verification; this covers all ads and requires nothing.

How do I get a competitor's Facebook ads? Two ways. Put their brand name in searchTerms, or — better — find their numeric Page ID and put it in advertiserPageIds. The Page ID route returns that advertiser's full active ad set instead of whatever a keyword happens to match. Nike's is 15087023444.

How do I find an advertiser's Page ID? Open their ads in the Ad Library UI and look at the view_all_page_id= value in the address bar. Or just paste that whole URL into adLibraryUrls and skip the step.

Why is spend empty on my results? Because you searched all ads. Meta only publishes spend for political & issue ads. Set adType to political_and_issue_ads and the field fills in on essentially every row.

Do the date filters mean "started in this range"? No. Meta treats them as an overlap window: you get ads that were running at some point between the two dates, including ones that started earlier. Measured — a nike search dropped from 50,001 matches to 179 with a 2025-01-01 to 2025-03-31 window, and every returned ad had been live inside it. Both dates must be set or Meta ignores both.

How many ads can I get from one search term? Meta reports huge match counts (50,001 is its ceiling value) but stops serving new pages long before that. Expect several hundred to low thousands per keyword. For complete coverage of one advertiser, use their Page ID.

Can it scrape Instagram ads too? Yes — the Ad Library is one archive for all Meta surfaces. publisherPlatforms: ["INSTAGRAM"] narrows it to ads that ran on Instagram. Every row also lists the platforms it ran on.

Does it work outside the US? Yes. Set country to any two-letter code, or ALL. EU countries carry extra transparency data that includeAdDetails will pull in.

What does a 1,000-ad run cost? $0.341 — the $0.001 start fee plus 1,000 × $0.00034. It took 163 seconds in testing.

Is scraping the Ad Library allowed? The Ad Library is published by Meta as a public transparency tool and contains no personal data beyond the advertiser's own public Page. You are responsible for how you use what you collect, including under the GDPR and Meta's terms.