Meta Ad Library Scraper: Competitor Facebook Ads avatar

Meta Ad Library Scraper: Competitor Facebook Ads

Pricing

from $1.70 / 1,000 ad delivereds

Go to Apify Store
Meta Ad Library Scraper: Competitor Facebook Ads

Meta Ad Library Scraper: Competitor Facebook Ads

Scrape Facebook and Instagram ads from the Meta Ad Library by keyword, advertiser page or link: ad copy, video, landing page, days running and creative copies. Track competitor ads by page ID, with daily new-ad alerts and scaled-offer ranking, no login.

Pricing

from $1.70 / 1,000 ad delivereds

Rating

0.0

(0)

Developer

Scrapewise Data

Scrapewise Data

Maintained by Community

Actor stats

0

Bookmarked

12

Total users

3

Monthly active users

13 minutes ago

Last modified

Features

Limited permissions

Share

Meta Ad Library Scraper: Facebook Ads Library and Meta ads scraper

Scrape the public Meta Ad Library (the Facebook Ads Library) into clean JSON, CSV or Excel, with no login and no Meta API token. This Meta ads scraper searches any keyword in any country, lists every ad of an advertiser page, or reads 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. Turn on the scaled-offer ranking to see which advertisers are spending long and scaling, and schedule daily runs for new-ad alerts.

Meta Ad Library scraper pricing at a glance

Event (Free plan)PriceGold and above
Ad deliveredUS$ 2.00 per 1,000US$ 1.70
Scaled-offer row (optional)US$ 1.00 per 1,000US$ 0.85
Video ad transcribed (optional, up to 3 min)US$ 0.015 each
Extra transcribed minute after 3 minUS$ 0.005
  • 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.
  • Video ad scripts: turn on transcribeVideos and each video ad comes with its spoken script (transcript), the hook of the first 3 seconds (transcriptHook) and timed segments, in any language. Music-only videos 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, checkout platform, 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 copy, calls to action and video scripts 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: { "pageIds": ["109333990689139"], "countries": ["US"], "maxItems": 500 }. Any Ad Library search link also works in startUrls as [{ "url": "https://www.facebook.com/ads/library/?..." }], with its own filters kept.

FieldWhat it does
searchQueriesKeywords in any language. Each one is searched in each country.
pageIdsNumeric page ids, or Ad Library links with view_all_page_id. All ads of that advertiser.
startUrlsAny facebook.com/ads/library search link; its own filters are kept. Through the API each link goes as an object, [{ "url": "https://..." }].
countriesTwo-letter codes (US, BR, GB, MX, FR...). Empty = all countries.
activeStatusDefault active.
mediaTypeDefault all.
exactPhraseExact phrase instead of any word.
minDaysRunningOnly ads running for at least N days. Filtered ads are not charged.
startDateFromOnly 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.
startDateToOnly ads that started on or before this date (2026-10-15 or 1 day).
maxItemsMax ads per keyword and country, page or link. Default 50.
groupByOfferAdd the scaled-offer ranking at the end. Default on.
analyzeLandingPages, maxLandingPagesRead the sales page of each scaled offer (default on, up to 50 pages).
compareWithPreviousRun, onlyNew, snapshotNameDaily 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. Schedule a daily run with your offer name, compareWithPreviousRun: true, onlyNew: true and a snapshotName (for example my-offer-clones). Every ad gets isNewAd, firstSeenAt and isNewAdvertiser; one free comparison_summary row per search lists new ads, new advertiser pages and dropped ads. With onlyNew, ads you already saw are not delivered or charged, so a quiet day costs close to nothing. The first run saves the baseline. The state lives in a key-value store in your own account (meta-ads-<snapshotName>), saved only after delivery; 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",
"pageName": "Pioneer Pam Goods",
"isActive": true,
"startDate": "2025-11-24",
"daysRunning": 313,
"sameCreativeAdsCount": 1,
"displayFormat": "VIDEO",
"title": "Nature's GLP-1 Alternative 💚",
"ctaType": "SHOP_NOW",
"landingDomain": "pioneerpam.com",
"hasVideo": true
}

The same run (170 ads) ranked 31 scaled offers; the top one had 55 active ads and 66 counting creative copies.

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
transcript, transcriptHook, transcriptSegments, transcriptLanguage, videoDurationSecondsSpoken script of the video, its first 3 seconds, timed segments (start, end, text), language and length. Only with transcribeVideos on
transcriptStatusok (charged), or no_speech, no_audio, no_video, too_long, download_failed, unreadable_video, skipped_max_transcriptions, skipped_run_time (never charged)
searchQuery, country, scrapedAtWhich search produced the row, and when

Scaled-offer rows (type: "offer")

rank and scaleScore (3 points per active ad, 2 per extra copy of a creative, up to 9 for age); landingDomain and landingType (ads that send to Instagram, WhatsApp, Messenger or Facebook are grouped by advertiser); pageId, pageName, pageUrl; adsFound, activeAdsFound, adsSharingCreatives, videoAds; oldestStartDate, maxDaysRunning; exampleAdUrl, exampleTitle, exampleBody, exampleLinkUrl (the most duplicated, longest running ad); searchQueries, platforms.

Sales page fields (with analyzeLandingPages, for offers that send to a website, included in the offer row price): landingFinalUrl, landingRedirects, pageReadable, pageTitle, pageHeadline, pageLanguage, pageWordCount; checkoutPlatforms and checkoutLinks (Hotmart, Kiwify, Eduzz, Monetizze, PerfectPay, Kirvano, Cakto, Digistore24, ClickBank, Stripe, Shopify, PayPal and more); priceCurrency, prices, lowestPrice, highestPrice, priceTiers, anchorListPrice, anchorOfferPrice, installmentOffers; hasUpsellSignals, guaranteeDays; hasCountdown, urgencyDates, urgencyDatesConflict, urgencyDatePassed (a deadline that already passed); vslPlayers, tracking (Meta Pixel, Google Tag, TikTok Pixel, UTMify, Hotjar, Clarity), whatsappLinks and landingError.

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)

NO_RESULTS (no ad for that search, country and filters), BLOCKED (Meta stopped answering after retries; delivered ads stay), INVALID_PAGE, INVALID_URL, INVALID_INPUT, and NOT_REACHED, ITEM_UNREADABLE, UNEXPECTED (run timeout or one unreadable part).

Meta Ad Library scraper pricing

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

  • 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 verified developer account and covers political and social issue ads plus EU ads. This Actor needs no account, covers commercial ads in any country, and adds days running, creative copies, the offer ranking and the sales page.

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.

Changelog

  • 10 Nov 2026: video ad transcription (transcribeVideos, maxTranscriptions, maxVideoMinutes, transcriptLanguage): spoken script, 3-second hook and timed segments of each video ad. Runs with it on start with 2 GB of memory by default.
  • 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.

Independent tool, not affiliated with Meta Platforms.