Meta Ad Library Scraper: Competitor Facebook Ads
Pricing
from $1.70 / 1,000 ad delivereds
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
Maintained by CommunityActor stats
0
Bookmarked
12
Total users
3
Monthly active users
13 minutes ago
Last modified
Categories
Features
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) | Price | Gold and above |
|---|---|---|
| Ad delivered | US$ 2.00 per 1,000 | US$ 1.70 |
| Scaled-offer row (optional) | US$ 1.00 per 1,000 | US$ 0.85 |
| Video ad transcribed (optional, up to 3 min) | US$ 0.015 each | |
| Extra transcribed minute after 3 min | US$ 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 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. - Video ad scripts: turn on
transcribeVideosand 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
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 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.
| Field | What it does |
|---|---|
searchQueries | Keywords in any language. Each one is searched in each country. |
pageIds | Numeric page ids, or Ad Library links with view_all_page_id. All ads of that advertiser. |
startUrls | Any facebook.com/ads/library search link; its own filters are kept. Through the API each link goes as an object, [{ "url": "https://..." }]. |
countries | Two-letter codes (US, BR, GB, MX, FR...). Empty = all countries. |
activeStatus | Default active. |
mediaType | Default all. |
exactPhrase | Exact phrase instead of any word. |
minDaysRunning | Only ads running for at least N days. Filtered ads are not charged. |
startDateFrom | 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 | Only ads that started on or before this date (2026-10-15 or 1 day). |
maxItems | Max ads per keyword and country, page or link. Default 50. |
groupByOffer | Add the scaled-offer ranking at the end. Default on. |
analyzeLandingPages, maxLandingPages | Read the sales page of each scaled offer (default on, up to 50 pages). |
compareWithPreviousRun, onlyNew, snapshotName | 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. 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")
| 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 |
transcript, transcriptHook, transcriptSegments, transcriptLanguage, videoDurationSeconds | Spoken script of the video, its first 3 seconds, timed segments (start, end, text), language and length. Only with transcribeVideos on |
transcriptStatus | ok (charged), or no_speech, no_audio, no_video, too_long, download_failed, unreadable_video, skipped_max_transcriptions, skipped_run_time (never charged) |
searchQuery, country, scrapedAt | Which 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
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 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.
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
- 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
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.
Independent tool, not affiliated with Meta Platforms.