Meta Ad Library Scraper - Facebook & Instagram Ads
Pricing
from $0.43 / 1,000 ad delivereds
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
Maintained by CommunityActor 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
| Event | Until 30 Oct 2026 | From 31 Oct 2026 (Free) | Bronze | Silver | Gold and above |
|---|---|---|---|---|---|
| Ad delivered, per 1,000 | US$ 0.50 | US$ 2.00 | US$ 1.90 | US$ 1.80 | US$ 1.70 |
| Scaled-offer row, per 1,000 (optional) | US$ 1.00 | US$ 1.00 | US$ 0.95 | US$ 0.90 | US$ 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 aminDaysRunningfilter; 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
pageIdsand 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 }
| Field | Type | What it does |
|---|---|---|
searchQueries | list of strings | Keywords in any language. Each one is searched in each country. |
pageIds | list of strings | Numeric page ids, or Ad Library links with view_all_page_id. All ads of that advertiser. |
startUrls | list 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://..." }]. |
countries | list of strings | Two-letter codes (US, BR, GB, MX, FR...). Empty = all countries. |
activeStatus | active, inactive, all | Default active. |
mediaType | all, image, video, meme, none | Default all. |
exactPhrase | boolean | Exact phrase instead of any word. |
minDaysRunning | integer | Only ads running for at least N days. Filtered ads are not charged. |
startDateFrom | string | Only 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. |
startDateTo | string | Only ads that started on or before this date (2026-10-15 or 1 day). |
maxItems | integer | Max ads per keyword and country, page or link. Default 50. |
groupByOffer | boolean | Add the scaled-offer ranking at the end. Default on. |
analyzeLandingPages, maxLandingPages | boolean, integer | Read the sales page of each scaled offer (default on, up to 50 pages). |
compareWithPreviousRun, onlyNew, snapshotName | boolean, boolean, string | Daily 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,firstSeenAtandisNewAdvertiser. - One
comparison_summaryrow 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 domain | Advertiser | Active ads | Ads incl. creative copies | Longest running |
|---|---|---|---|---|---|
| 1 | no link (lead ad) | Ro | 55 | 66 | 127 days |
| 2 | no link (lead ad) | Hers | 18 | 27 | 47 days |
| 3 | itunes.apple.com | Brittanymolfese | 2 | 12 | 233 days |
Field reference: ad rows (type: "ad")
| Field | What it is |
|---|---|
adArchiveId, adLibraryUrl | Ad id and its public Ad Library link |
pageId, pageName, pageUrl, pageLikeCount, pageCategories | The advertiser page |
isActive, startDate, endDate, daysRunning | Status and dates; daysRunning counts until today for live ads |
sameCreativeAdsCount, collationId | How many ads share this creative, as the Ad Library groups them |
platforms | FACEBOOK, INSTAGRAM, MESSENGER, AUDIENCE_NETWORK, THREADS |
displayFormat | IMAGE, VIDEO, CAROUSEL, DPA (catalog), DCO (dynamic creative)... |
bodyText, title, linkDescription, ctaText, ctaType | The ad copy; catalog placeholders like {{product.name}} are replaced by the first card's real text |
linkUrl, landingDomain, caption | Where the ad sends people |
cards, cardsCount | Carousel and catalog cards: title, text, link, image, video |
imageUrls, videoUrls, hasVideo | Media links (Meta signs them: download within a few hours) |
containsAiContent, categories, disclaimer, spend, currency, impressions | As shown by the Ad Library; spend and impressions exist only for political and social issue ads |
isNewAd, firstSeenAt, isNewAdvertiser | Only with the comparison mode on |
searchQuery, country, scrapedAt | Which search produced the row, and when |
Scaled-offer rows (type: "offer")
| Field | What it is |
|---|---|
rank, scaleScore | Position and score: 3 points per active ad, 2 per extra copy of a creative, up to 9 for age (capped at 90 days) |
landingDomain, landingType | The landing domain; ads that send to Instagram, WhatsApp, Messenger or Facebook are grouped by advertiser and landingType says where |
pageId, pageName, pageUrl | The advertiser |
adsFound, activeAdsFound, adsSharingCreatives, videoAds | Counts over the ads found in this run |
oldestStartDate, maxDaysRunning | Age of the offer |
exampleAdUrl, exampleTitle, exampleBody, exampleLinkUrl | The most duplicated, longest running ad of the offer |
searchQueries, platforms | Where it showed up |
Sales page fields (with analyzeLandingPages, for offers that send to a website; included in the offer row price):
| Field | What it is |
|---|---|
landingFinalUrl, landingRedirects | Where the ad link really ends after redirects |
pageReadable, pageTitle, pageHeadline, pageLanguage, pageWordCount | pageReadable: false: page built only by JavaScript, fields below left empty |
checkoutPlatforms, checkoutLinks | Checkout 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, priceTiers | Prices written on the page (installment amounts removed) |
anchorListPrice, anchorOfferPrice, installmentOffers | The "was $97, now $17" anchor and "3x $8.92" style offers |
hasUpsellSignals, guaranteeDays | Order bump, upsell or plan tiers; money-back guarantee in days |
hasCountdown, urgencyDates, urgencyDatesConflict, urgencyDatePassed | Countdown timer, "valid until" dates, two different deadlines on one page, and a deadline that already passed |
vslPlayers, tracking | VSL player (vturb, pandavideo, wistia, vidalytics, youtube, vimeo, bunny); pixels (metaPixel, googleTag, tiktokPixel, utmify, hotjar, clarity) |
whatsappLinks, landingError | WhatsApp 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)
| errorCode | Meaning |
|---|---|
NO_RESULTS | No ad for that search, country and filters |
BLOCKED | Meta stopped answering after retries; the ads already delivered stay |
INVALID_PAGE, INVALID_URL, INVALID_INPUT | Not a page id, not a facebook.com/ads/library link, or an unknown filter value |
NOT_REACHED, ITEM_UNREADABLE, UNEXPECTED | Run 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
maxItemsgives 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.
Related scrapers
- Google Ads Transparency Scraper: competitor ads from the Google Ads Transparency Center.
- Facebook Page Posts Scraper: Facebook page posts with text, reactions and media.
- Instagram Comments Scraper: comments from Instagram posts and reels, no login.
- Threads Scraper: Threads profile posts, search and hashtags, no login.
Changelog
- 18 Oct 2026: the
startUrlsexample on this page now uses the{ "url": ... }format the input expects (a plain string was refused before the run started). - 17 Oct 2026:
startDateFromandstartDateTo: ads by start date (absolute or relative, like7 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,onlyNewandsnapshotName;isNewAd,firstSeenAtandisNewAdvertiser; freecomparison_summaryrow 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;
minDaysRunningfilter; scaled-offer ranking; free error rows.
Independent tool, not affiliated with Meta Platforms.