Meta Ad Library Scraper - Facebook & Instagram Ads avatar

Meta Ad Library Scraper - Facebook & Instagram Ads

Pricing

from $0.43 / 1,000 ad delivereds

Go to Apify Store
Meta Ad Library Scraper - Facebook & Instagram Ads

Meta Ad Library Scraper - Facebook & Instagram Ads

Scrape the Meta Ad Library (Facebook Ad Library: Facebook, Instagram, Messenger, Threads) without login: ads by keyword, advertiser page or link, with copy, video, landing page, days running and creative copies, plus a scaled-offer ranking and daily new-ad alerts.

Pricing

from $0.43 / 1,000 ad delivereds

Rating

0.0

(0)

Developer

Scrapewise Data

Scrapewise Data

Maintained by Community

Actor stats

0

Bookmarked

10

Total users

5

Monthly active users

5 hours ago

Last modified

Categories

Share

Meta Ad Library Scraper: Facebook and Instagram ads, days running and scaled offers

Scrape the public Meta Ad Library (Facebook Ad Library: Facebook, Instagram, Messenger, Audience Network and Threads ads) into clean JSON, CSV or Excel, without login, cookies or a Meta API token. Search any keyword in any country, list every ad of an advertiser page, or paste an Ad Library link with your own filters. Each ad comes with its text, title, call to action, landing page, images and video links, start date, days running and how many ads reuse the same creative.

On top of the ads, the Actor ranks the scaled offers it found: one row per landing page and advertiser with a scale signal (2+ active ads or 2+ copies of a creative), with how many ads are live, how many creative copies run and for how long. Each scaled offer also comes with its sales page read for you: prices and the "was $97, now $17" anchor, installments, the checkout platform, the money-back guarantee, the VSL player, countdown timers, deadlines that already expired (fake urgency) and the tracking pixels it runs.

Meta Ad Library scraper pricing at a glance

EventUntil 30 Oct 2026From 31 Oct 2026 (Free)BronzeSilverGold and above
Ad delivered, per 1,000US$ 0.50US$ 2.00US$ 1.90US$ 1.80US$ 1.70
Scaled-offer row, per 1,000 (optional)US$ 1.00US$ 1.00US$ 0.95US$ 0.90US$ 0.85
  • 40+ fields per ad and up to 48 per scaled offer, all in the field reference.
  • Days running and creative copies on every ad (daysRunning, sameCreativeAdsCount), and a minDaysRunning filter; filtered ads are not charged.
  • Start date filter: only ads launched in the last 7 days, or between two dates (startDateFrom, startDateTo). Results come newest month first, and ads outside the range are not charged.
  • Daily "what is new" mode: new ads and new advertiser pages since the previous run (compareWithPreviousRun).
  • No monthly fee, no start fee. Error rows, duplicates and filtered ads are free, each error with an errorCode.

What you can do with Meta Ad Library data

  • Find winning offers. Search your niche, keep ads running for 14+ days, and read the offer ranking: an advertiser paying for 66 copies of the same creative is scaling something that sells.
  • Know the offer before you click. Each scaled offer shows its price, where the checkout is (a Hotmart, Kiwify or ClickBank link means an info product you can also find in that marketplace), the guarantee and whether the "only today" deadline is real.
  • Spy on competitors. Put their page ids in pageIds and schedule the run daily: every new ad, every creative they keep on, every landing page they test.
  • Catch clones of your offer. Schedule a daily search with your offer name and get only the ads and advertiser pages that appeared since yesterday.
  • Build a swipe file. Export text, titles, calls to action and video links of the ads that last longest.

Meta Ad Library scraper input

Weight loss and keto video ads in the US and UK running for at least 14 days:

{ "searchQueries": ["weight loss", "keto"], "countries": ["US", "GB"], "minDaysRunning": 14, "mediaType": "video", "maxItems": 300 }

Running shoe ads launched in the last 7 days in the US (newest first, only those are charged):

{ "searchQueries": ["running shoes"], "countries": ["US"], "startDateFrom": "7 days", "maxItems": 100 }

All active ads of one advertiser page, no offer ranking:

{ "pageIds": ["109333990689139"], "countries": ["US"], "maxItems": 500, "groupByOffer": false }

An Ad Library search link with its own filters:

{ "startUrls": [{ "url": "https://www.facebook.com/ads/library/?active_status=active&ad_type=all&country=US&q=running%20shoes&media_type=video" }], "maxItems": 200 }
FieldTypeWhat it does
searchQuerieslist of stringsKeywords in any language. Each one is searched in each country.
pageIdslist of stringsNumeric page ids, or Ad Library links with view_all_page_id. All ads of that advertiser.
startUrlslist of { "url": ... }Any facebook.com/ads/library search link; its own filters are kept. Through the API each link goes as an object, [{ "url": "https://..." }].
countrieslist of stringsTwo-letter codes (US, BR, GB, MX, FR...). Empty = all countries.
activeStatusactive, inactive, allDefault active.
mediaTypeall, image, video, meme, noneDefault all.
exactPhrasebooleanExact phrase instead of any word.
minDaysRunningintegerOnly ads running for at least N days. Filtered ads are not charged.
startDateFromstringOnly ads that started on or after this date: 2026-10-01 or a relative period like 7 days. Newest month first. Filtered ads are not charged.
startDateTostringOnly ads that started on or before this date (2026-10-15 or 1 day).
maxItemsintegerMax ads per keyword and country, page or link. Default 50.
groupByOfferbooleanAdd the scaled-offer ranking at the end. Default on.
analyzeLandingPages, maxLandingPagesboolean, integerRead the sales page of each scaled offer (default on, up to 50 pages).
compareWithPreviousRun, onlyNew, snapshotNameboolean, boolean, stringDaily comparison mode, see below.

Coming from another Ad Library actor? searchTerms, keywords, query and keyword are read as searchQueries; pages, pageUrls and advertisers as pageIds; urls and adLibraryUrls as startUrls; country as countries; maxResults as maxItems.

Monitor the Meta Ad Library daily: clone and new-advertiser alerts

Offers get cloned fast, often the day after they start to scale. Schedule the Actor once a day with your offer name and the comparison on:

{
"searchQueries": ["your offer name", "a sentence from your ad"],
"countries": ["US", "GB", "CA"],
"maxItems": 200,
"compareWithPreviousRun": true,
"onlyNew": true,
"snapshotName": "my-offer-clones",
"groupByOffer": false
}
  • Every ad row gets isNewAd, firstSeenAt and isNewAdvertiser.
  • One comparison_summary row per search and country, never charged, with the new ads, new advertiser pages and dropped ads.
  • With onlyNew, ads you already saw are read but not delivered and not charged, so a quiet day costs close to nothing.
  • The first run saves the baseline: everything comes as new and the summary says first run: baseline saved.

The state lives in a named key-value store in your own Apify account (meta-ads-<snapshotName>), saved only after the ads are delivered, so a failed run never erases it. Use a different snapshotName per schedule and keep maxItems the same every day.

What data the Meta Ad Library scraper returns

One real row

A keyword search for GLP-1 in the United States, video ads running for at least 14 days (collected on 2026-10-02, trimmed):

{
"type": "ad",
"adArchiveId": "1367320528111144",
"adLibraryUrl": "https://www.facebook.com/ads/library/?id=1367320528111144",
"pageName": "Pioneer Pam Goods",
"isActive": true,
"startDate": "2025-11-24",
"daysRunning": 313,
"sameCreativeAdsCount": 1,
"platforms": ["FACEBOOK", "INSTAGRAM", "AUDIENCE_NETWORK", "MESSENGER", "THREADS"],
"displayFormat": "VIDEO",
"title": "Nature's GLP-1 Alternative 💚",
"ctaType": "SHOP_NOW",
"linkUrl": "https://pioneerpam.com/products/naturesglp",
"landingDomain": "pioneerpam.com",
"hasVideo": true,
"searchQuery": "GLP-1",
"country": "US"
}

The top of the scaled-offer ranking from the same run (170 ads, 31 offers):

#Landing domainAdvertiserActive adsAds incl. creative copiesLongest running
1no link (lead ad)Ro5566127 days
2no link (lead ad)Hers182747 days
3itunes.apple.comBrittanymolfese212233 days

Field reference: ad rows (type: "ad")

FieldWhat it is
adArchiveId, adLibraryUrlAd id and its public Ad Library link
pageId, pageName, pageUrl, pageLikeCount, pageCategoriesThe advertiser page
isActive, startDate, endDate, daysRunningStatus and dates; daysRunning counts until today for live ads
sameCreativeAdsCount, collationIdHow many ads share this creative, as the Ad Library groups them
platformsFACEBOOK, INSTAGRAM, MESSENGER, AUDIENCE_NETWORK, THREADS
displayFormatIMAGE, VIDEO, CAROUSEL, DPA (catalog), DCO (dynamic creative)...
bodyText, title, linkDescription, ctaText, ctaTypeThe ad copy; catalog placeholders like {{product.name}} are replaced by the first card's real text
linkUrl, landingDomain, captionWhere the ad sends people
cards, cardsCountCarousel and catalog cards: title, text, link, image, video
imageUrls, videoUrls, hasVideoMedia links (Meta signs them: download within a few hours)
containsAiContent, categories, disclaimer, spend, currency, impressionsAs shown by the Ad Library; spend and impressions exist only for political and social issue ads
isNewAd, firstSeenAt, isNewAdvertiserOnly with the comparison mode on
searchQuery, country, scrapedAtWhich search produced the row, and when

Scaled-offer rows (type: "offer")

FieldWhat it is
rank, scaleScorePosition and score: 3 points per active ad, 2 per extra copy of a creative, up to 9 for age (capped at 90 days)
landingDomain, landingTypeThe landing domain; ads that send to Instagram, WhatsApp, Messenger or Facebook are grouped by advertiser and landingType says where
pageId, pageName, pageUrlThe advertiser
adsFound, activeAdsFound, adsSharingCreatives, videoAdsCounts over the ads found in this run
oldestStartDate, maxDaysRunningAge of the offer
exampleAdUrl, exampleTitle, exampleBody, exampleLinkUrlThe most duplicated, longest running ad of the offer
searchQueries, platformsWhere it showed up

Sales page fields (with analyzeLandingPages, for offers that send to a website; included in the offer row price):

FieldWhat it is
landingFinalUrl, landingRedirectsWhere the ad link really ends after redirects
pageReadable, pageTitle, pageHeadline, pageLanguage, pageWordCountpageReadable: false: page built only by JavaScript, fields below left empty
checkoutPlatforms, checkoutLinksCheckout found in the link, the redirects or the page: hotmart, kiwify, eduzz, monetizze, perfectpay, kirvano, cakto, ticto, greenn, braip, lastlink, payt, yampi, appmax, digistore24, clickbank, stripe, lemonsqueezy, gumroad, shopify, woocommerce, mercadopago, paypal
priceCurrency, prices, lowestPrice, highestPrice, priceTiersPrices written on the page (installment amounts removed)
anchorListPrice, anchorOfferPrice, installmentOffersThe "was $97, now $17" anchor and "3x $8.92" style offers
hasUpsellSignals, guaranteeDaysOrder bump, upsell or plan tiers; money-back guarantee in days
hasCountdown, urgencyDates, urgencyDatesConflict, urgencyDatePassedCountdown timer, "valid until" dates, two different deadlines on one page, and a deadline that already passed
vslPlayers, trackingVSL player (vturb, pandavideo, wistia, vidalytics, youtube, vimeo, bunny); pixels (metaPixel, googleTag, tiktokPixel, utmify, hotjar, clarity)
whatsappLinks, landingErrorWhatsApp links on the page; why a page could not be read

Comparison summary rows (type: "comparison_summary", never charged): newAdsCount, newAdvertisersCount, newAdvertisers, droppedAdsCount, droppedAdIds, isFirstRun, previousRunAt, searchComplete, message and the search it belongs to.

Error codes (never charged)

errorCodeMeaning
NO_RESULTSNo ad for that search, country and filters
BLOCKEDMeta stopped answering after retries; the ads already delivered stay
INVALID_PAGE, INVALID_URL, INVALID_INPUTNot a page id, not a facebook.com/ads/library link, or an unknown filter value
NOT_REACHED, ITEM_UNREADABLE, UNEXPECTEDRun timeout, or one ad or search the Actor could not read; only that part is lost

Meta Ad Library scraper pricing

From 31 Oct 2026 an ad costs US$ 2.00 per 1,000 on the Free plan (US$ 0.50 until then; see the table above). At the new price, a 300 ad search costs US$ 0.60. Our GLP-1 test in the United States delivered 170 ads and 31 offers: US$ 0.34 + US$ 0.031. Duplicates, filtered ads and error rows are free, and there is no Apify compute bill on top.

Integrations, scheduling and AI agents

Video guides from Apify: how to schedule an Actor and how to connect it to other apps.

  • Schedule a daily run on a competitor's page or your offer name in Apify schedules, with the comparison mode on.
  • Export as JSON, CSV, Excel or XML, or read the dataset from the Apify API.
  • Connect it to Make, n8n, Zapier, Google Sheets, Slack or a webhook through Apify integrations, so the alert arrives without you opening the Ad Library.
  • AI agents: the Actor works as a tool through the Apify MCP server in Claude, ChatGPT, Cursor and other MCP clients, for example "which skincare offers in the US have run for 30+ days with 5+ creative copies?".

Meta Ad Library scraper limitations

  • What Meta shows to a logged-out visitor. Reach, spend and demographics exist only for political and social issue ads and for ads delivered in the EU, as on the site.
  • The offer ranking covers the ads of this run. A larger maxItems gives a fuller picture of each offer.
  • Sales pages are read as HTML. Pages assembled only by JavaScript come back with pageReadable: false; prices that a script writes after load may differ from what a visitor sees.
  • This Actor collects only public ads and respects the site's terms. Advertiser pages are businesses and public figures; no personal data of ad viewers exists in the Ad Library.

Meta Ad Library scraper FAQ

Do I need a Facebook account or a Meta API token? No. The Actor reads the same public Ad Library a logged-out visitor sees.

Why not the official Meta Ad Library API? The official API needs a Meta developer account with identity verification, and it returns political and social issue ads, plus ads delivered in the EU. This Actor needs no account or token, covers commercial ads in any country, and adds days running, creative copies, the scaled-offer ranking and the sales page read for you.

How do I find ads that are working? Set minDaysRunning to 14 or 30 and read the scaled-offer rows: advertisers keep paying only for ads that convert.

How do I get only ads launched this week? Set startDateFrom to 7 days. The search then reads the newest month first and stops once it reaches older ads, so you are only charged for ads that started in that window. For a fixed window, add startDateTo.

Why did the price change on 31 Oct 2026? The launch price ended. Errors, duplicates and filtered ads stay free.

Changelog

  • 18 Oct 2026: the startUrls example on this page now uses the { "url": ... } format the input expects (a plain string was refused before the run started).
  • 17 Oct 2026: startDateFrom and startDateTo: ads by start date (absolute or relative, like 7 days), newest month first; ads outside the range are free.
  • 16 Oct 2026: new price from 31 Oct 2026 shown in this page, input examples, input names from other Ad Library actors, field reference, integrations section and FAQ.
  • 2026-10-02, 0.2: sales page of each scaled offer (analyzeLandingPages, maxLandingPages): prices and anchor, installments, checkout platform, guarantee, VSL player, countdown, expired or conflicting deadlines, upsell signals, tracking pixels.
  • 2026-09-30, 0.1 (update): daily comparison mode: compareWithPreviousRun, onlyNew and snapshotName; isNewAd, firstSeenAt and isNewAdvertiser; free comparison_summary row per search.
  • 2026-09-30, 0.1: first release. Keyword, page and link searches in any country, active or inactive, by media type; days running, creative copies, landing domain, cards, media links; minDaysRunning filter; scaled-offer ranking; free error rows.

Independent tool, not affiliated with Meta Platforms.