Facebook Ad Library Winning Ads Finder: AI creative breakdown avatar

Facebook Ad Library Winning Ads Finder: AI creative breakdown

Pricing

from $3.00 / 1,000 qualified ad (rules only)s

Go to Apify Store
Facebook Ad Library Winning Ads Finder: AI creative breakdown

Facebook Ad Library Winning Ads Finder: AI creative breakdown

First 25 ads free. Facebook Ad Library winning ads: collapses variants, drops dead, political and seen ads, scores each Facebook and Instagram creative by days running, adds an AI hook, angle and offer. Pay per qualified ad. Free demo on any plan; live search runs on your own Apify account.

Pricing

from $3.00 / 1,000 qualified ad (rules only)s

Rating

0.0

(0)

Developer

Rich Minds

Rich Minds

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

10 hours ago

Last modified

Share

Your competitors' longest-running Facebook ads — hook, offer and angle broken down, one row each.

⚡ First 25 ads free · 💵 $0.003 per qualified ad · 🤖 $0.012 with AI assessment · 🔑 No API key needed — the AI uses the model access of your Apify plan, or your own key · ⏱️ demo in 1 s; ~2 min for 150 scanned ads (estimate)

One row per winning ad — winner score, tier, days running, variants, landing domain and the swipe-file line

Try it in 30 seconds. Click Try it — the form is already filled with a working example (8 sample Ad Library records, free). Your first 25 qualified ads are free, and ads that fail your filters are never charged. → What a run costs · What the AI adds · Run it weekly · Swipe file in Google Sheets

⚡ At a glance

What you getone row per winning creative: winner score 0–100, days running, offer, landing domain, hook — with AI also angle, evidence and a rewrite for your product; a summary per competitor and a report to forward
You provide1–10 search terms or competitor Facebook pages; optionally one sentence about your product
OutputJSON / CSV / Excel, best-first, plus the funnel in OUTPUT and a DIGEST for Slack / e-mail
Typical run3 terms × 50 ads = 150 scanned → ≈ 20–50 qualified (one qualified ad replaces 3–7 raw rows)
Cost of that run≈ $0.11 on the source + your first 25 ads free here, then $0.003 each ($0.012 with AI)
AI tier, all in≈ $0.015 per ad ($0.012 event + ≈ $0.003 AI tokens with the default model)
Keys / setupnone — the demo runs on any plan; the live search runs the source Store Actor on your Apify plan (else sourceMode: dataset)
Works withSchedules, e-mail, Slack, webhooks, Google Sheets, Make / n8n / Zapier, MCP & AI agents

🎯 What this Actor does

You pay only for the ads that pass your filters:

  • One row per creative — it collapses variants (variantCount) and drops dead, political and seen ads free.
  • Which ads are winning — it scores each creative 0–100 with reasons: days running, active, variants, placements.
  • The offer and the landing page — discount, free shipping, price, bundle, urgency, the clean landing URL — and, with enrichLandingPages, the store and product behind it.
  • AI creative breakdown — hook, angle, offer, CTA, audience with verbatim quotes, a fit score against your product and a rewrite of the angle for it.
  • A weekly monitor that reports changes — new ads, alerts when an ad stops or passes 30 / 60 / 90 days, a summary per competitor and a report to forward to your client.

🧭 Search the Meta Ad Library by keyword, page or URL

searchTerms in your country, competitorPages or adLibraryUrls; mediaType, maxAdsToScan and maxAdsPerSearch bound the source bill, OUTPUT.yieldByQuery shows what each term paid.

🏆 Winner score and free filters — the winning ads finder rule

minWinnerScore (40): days running ≤ 40 points, active 15, variants ≤ 20, 2+ placements 10, impressions ≤ 15. minDaysRunning, minVariants, platforms, landingDomainIncludes / landingDomainExcludes, excludeAdvertisers, includePoliticalAds, adLanguage, targetFlags and suppressionList drop ads before any charge.

🛍️ Landing pages: store, product and price

enrichLandingPages: true reads each qualified ad's landing page: store platform, product, price, rating, reviews — $0.004 per page that yields a store or product.

🔔 Change alerts: stopped ads and confirmed winners

changeAlerts: true: one rowType: alert row when a competitor stopped an ad you have, or it passed 30 / 60 / 90 days — in the Change alerts view, the digest and the webhook, $0.003 each. The free demo ends with one sample.

📊 Competitor reports and a client-ready report

  • advertiserReports: true — one rowType: advertiser row per top advertiser (≤ 10): active, new, stopped and 30+-day ads, average days running, share of voice, top angles and offers ($0.02 each, Competitor report view).
  • Competitors to watch — every search lists its top 10 advertisers by long-running ads in OUTPUT and the digest, with OUTPUT.saveAsMonitor: the ready input of a weekly monitor on them.
  • REPORT — every run writes a client-ready HTML page (thumbnails, hooks, offers, AI breakdown) to forward; its link is OUTPUT.reportUrl. Free.

🆚 Why this instead of a Facebook Ad Library scraper?

Facebook Ad Library Scraper (curious_coder/facebook-ads-library-scraper)Facebook Ad Library Winning Ads Finder: AI creative breakdown
Price$0.00075 per result + $0.00005 per run start · 5,855 users / 30 daysfrom $0.003 per qualified ad, first 25 free, no start fee
What you pay forevery row scraped — each variant, dead, political and duplicate adonly qualified ads — anything that fails your filters costs $0
Same 100 winning ads, all in≈ 700 raw rows: $0.53 here, then hours of sorting — or $4.06 on apify/facebook-ads-scraper (700 × $0.0058)$0.83 basic (source $0.53 + 100 × $0.003) — ≈ 80 % less than the Apify route; $2.03 with AI, all in
Landing-page detailsapify/facebook-ads-scraper: + $0.0057 per URL enrichedenrichLandingPages: $0.004 per page that yields a store or product
Which ads workyou sort by start date in a spreadsheetwinner score 0–100 with reasons, variants collapsed
Hook / offer / angleraw copy onlyoffer on every row; AI breakdown with verbatim evidence
Repeat runsthe same ads again next weekonly new ads delivered and charged, plus stopped / 30-60-90-day alerts
Spend controlcount onlyhard caps: maxAdsToScan, maxQualified, maxDiscoveryChargeUsd

💸 Cheaper than an ad spy tool seat — an AdSpy alternative

AdSpy / Minea-style spy toolThis Actor, weekly monitor of 10 competitors
Monthly cost$149/month per seat (AdSpy list price)≈ $3.70/month (≈ $4.60 with competitor reports)
Datatheir own ad databasethe live Meta Ad Library, your countries
Deliverylog in and searche-mail, Slack, webhook, API, client report

💵 Pricing — what a run really costs

Pay per result: one event per qualified ad, plus three opt-in add-ons.

EventWhen it is chargedPrice
free-tieryour first 25 qualified ads on this Actor, in any mode$0.00
qualified-ad-basicAI off — fields, offer, flags, winner score, rule hook$0.003
qualified-ad-aiAI on — plus the creative breakdown, fit score and rewrite for your product$0.012
ad-alertchangeAlerts on — an ad you already have stopped or passed 30 / 60 / 90 days$0.003
landing-enrichedenrichLandingPages on — a paid ad's landing page yielded a store or a product$0.004
advertiser-reportadvertiserReports on — one competitor summary row per top advertiser (≤ 10)$0.02

Never charged: the search, variants, filtered, political or already-received ads, unreachable pages, the REPORT page, compute.

How that compares — $0.003 is 3× a raw Ad Library row (the median of the 5 raw scrapers a Store search shows next to this one is $0.001; the research median $0.00075), but one qualified ad replaces 3–7 raw rows ≈ $0.0004–0.001 per raw-row equivalent. The winning-ads finders next to it charge $0.004–$0.01 per ad, so $0.003 is 25–70 % less per ad.

Worked example — 1,000 ads scanned → 150 qualified with AI on: source $0.75 on your account + 125 × $0.012 (first 25 free) + ≈ $0.45 tokens → $2.70 total, about $0.018 per qualified ad. AI off: $1.13.

AI tier, all in: ≈ $0.015 per ad ($0.012 here + ≈ $0.003 tokens with the default model, estimated).

🚀 How to use it

  1. Click Try it — the pre-filled example works as is (8 sample ads, nothing charged).
  2. Switch sourceMode to the live search and type your searchTerms or competitorPages.
  3. Say what you sell (productBrief, optional), set minScore, press Start.
  4. Open the dataset — winning ads best-first in the Shortlist view.

📚 Learn more: Step-by-step tutorial — how to find winning Facebook ads with this Actor

🤖 What the AI tier adds

The same demo ad, AI off — rule winner score, offer and hook from the ad itself:

{"advertiserName": "Aligna Posture", "winnerScore": 85, "score": 85, "label": "hot", "fitScore": null,
"creative": {"hook": "Tired of that 3pm neck ache at your desk?", "angle": "social-proof",
"offerSummary": "30% OFF · free shipping · 30-day money-back", "cta": "Shop now", "targetAudience": null,
"emotionalTrigger": null, "formatNotes": "video ad · 12 variant(s) · facebook, instagram, messenger",
"evidence": ["Tired of that 3pm neck ache at your desk?"]},
"aiStatus": "off"}

AI on (qualified-ad-ai, $0.012) — the same keys, judged against the demo brief "An ergonomic laptop stand for people who work from home …":

{"advertiserName": "Aligna Posture", "winnerScore": 85, "fitScore": 70, "score": 79, "label": "hot",
"fitReason": "Both ads target desk‑workers with posture discomfort; the problem‑solution angle and price‑sensitive audience align with the laptop‑stand brief.",
"creative": {"hook": "Sit taller in 7 days", "angle": "problem-solution", "offerSummary": "30% OFF + free shipping",
"cta": "Shop now", "targetAudience": "Appears aimed at desk‑bound professionals who experience neck or posture discomfort during the workday.",
"emotionalTrigger": "relief", "formatNotes": "The video demonstrates the device gently pulling shoulders back, visually showing the posture correction in action.",
"evidence": ["Sit taller in 7 days", "Tired of that 3pm neck ache at your desk?", "50,000+ happy customers."]},
"aiStatus": "ok"}

Cut from a local run of storage-example/INPUT.ai.json on 2026-09-26 (groq:openai/gpt-oss-120b, not yet the platform's default model). With a strong fit it also writes adaptationIdea, a rewrite for your product. About 5 minutes of a strategist's work per ad, for ≈ $0.015.

🧠 Ad creative analysis: hook, angle, offer

enableAi fills creative (hook, one of 10 angles, offer, CTA, audience, emotion, ≤ 3 verbatim quotes); with productBrief also fitScore and adaptationIdea. score = winner 60 % + fit 40 %.

⚙️ Input

FieldDefaultWhat it does
sourceModeactorLive search, an existing dataset, or pasted records (list) — with nothing to search ({} over the API) the free demo runs, nothing charged
searchTerms—One Ad Library keyword search per term
competitorPages—Facebook pages whose ads are scanned
productBrief—Your product — the AI fit score and rewrite
countryUSAd Library country from a list, or ALL; over the API UK, USA or a name work too
minScore40The field that decides what you pay: below this = not delivered, not charged
maxAdsToScan150Ads the source scans — its bill on your account (≈ $0.00075 each)
maxDiscoveryChargeUsd0.5Stops the source Actor at this spend — in the form and over the API
maxQualified100The cap on what this Actor charges: 100 × $0.012 = $1.20 at most with AI
enableAitrueAI creative breakdown on/off
changeAlertsfalseStopped / 30-60-90-day alerts on ads you already have
advertiserReportsfalseOne competitor summary row per top advertiser
enrichLandingPagesfalseStore, product and price from each landing page

All 47 options are in the Input tab — among them slackWebhookUrl, webhookHeaders, period and dedupeStoreName.

📤 Output

One dataset item per qualified ad (rowType: ad), change alert (alert) or competitor summary (advertiser) — JSON, CSV or Excel. Aligna Posture from the free demo (sample record, AI off): winnerScore 85, 98 days running, 12 variants.

Output fields

Upsert key for a CRM or Sheet: dedupeKey — col:<collationId>, else txt:<pageId>:<text hash>, else ad:<adArchiveId>; alert rows add #ad-stopped / #ad-milestone-60, advertiser rows are advertiser:<pageId>. Map url and score — their twins carry the same value. Views: Shortlist, Creative brief (swipe file), Products & offers, Change alerts, Competitor report, Overview. OUTPUT holds the funnel, chargeSplit, aiCoverage, competitorsToWatch, saveAsMonitor, reportUrl and timing; DIGEST (Markdown) and REPORT (HTML) sit next to it.

Products & offers view — landing domain, advertiser, days running, variants, placements and flags

⭐ Found it useful? A review on the Store helps others find it — it takes a minute on the Actor's page.

🔁 Run it weekly

  1. Actions → Schedule weekly with your address in notifyEmail — every run with news e-mails you the digest (top 10 with links and hooks, the change alerts, competitors to watch); slackWebhookUrl posts it to a Slack channel.
  2. Leave onlyNewAds: true — the next run delivers and charges only what is new; the memory is kept per search.
  3. Turn on changeAlerts and advertiserReports — stopped ads, 30 / 60 / 90-day winners and a row per competitor.
  4. Point the swipe-file Sheet or a webhook at the run.

Weekly cost: 10 competitor pages × 50 ads = 500 scanned ≈ $0.38 on the source + ≈ 30 new winners × $0.015 all-in + ≈ 10 alerts × $0.003 → ≈ $0.86 a week per client monitor (+ $0.20 with competitor reports).

🔁 Weekly competitor ad research

Searched by keyword? Paste OUTPUT.saveAsMonitor into a saved Task — pages, alerts and reports are set. Monday's digest lists the new long-running ads and the stopped ones; forward REPORT to the client.

🎯 Try it for your niche

NicheTask (storage-example/tasks/)
DTC / Shopify brand — 3 product terms, Shopify landing pages, 14+ daysdtc-shopify-winners.json
Agency monitor — 5 competitor pages, notifyEmail, alerts, reportsagency-competitor-monitor.json
Product research — 4 dropshipping terms, video only, 5+ variantsdropshipping-products.json

🔌 Integrations, automation and API

  • E-mail / Slack — notifyEmail e-mails the digest, slackWebhookUrl posts it to a channel as a readable message.
  • Webhook — webhookUrl POSTs {"event": "ad.qualified", "ad": {…}, "runId": "…"} per row (webhookBatchSize > 1: {"event": "ads.qualified", "ads": [{…}]}); a 429 / 5xx is retried once, a failure never fails the run.
  • Google Sheets / HubSpot — one click from the Integrations tab.
  • AI agents / MCP — plain typed inputs. First call = the free trial:
    {"sourceMode": "list", "itemsList": [...]}
    or an empty {} (the free demo).

📋 Swipe file in Google Sheets

Save your search as a Task, then in a Sheet cell A1: =IMPORTDATA("https://api.apify.com/v2/actor-tasks/<TASK_ID>/runs/last/dataset/items?format=csv&view=creativeBrief&token=<SCOPED_TOKEN>") — hook, angle, offer, your rewrite and thumbnailUrl (=IMAGE(L2)), refreshed after every scheduled run. Make / n8n: Watch task runs → Get dataset items → Sheets / Notion / Airtable: add row.

Run outcomes — what your integration sees

👥 Who is it for?

You are…You run it to…Start with
DTC / Shopify / dropshipping ownerthe competitor ads that run for weeks, with hook and offerproduct terms + productBrief
Agency media buyer / creative strategistMonday's new long-running and stopped competitor ads, a client reportcompetitorPages + advertiserReports
Product researcherthe products and prices long-running ads pushsearchTerms + enrichLandingPages
AI agent / automation"top 20 winning ads for a keyword as JSON"searchTerms, maxQualified: 20

🛒 Dropshipping winning products: landing domains and offers

The Products & offers view: domain, store, product, price, discount, days running.

🧠 How the AI works

🔒 Data, compliance and limits

  • Public data only: the Meta Ad Library's advertiser pages and ads, no user data, no login; landing pages read once.
  • Impressions and spend exist only for political / EU ads; days running is a proxy for profit, not a performance figure.
  • Keep your use within Meta's terms and the law (GDPR, CCPA); never copy a creative — the rewrite exists for that.

❓ FAQ

How much will my first real search cost? 3 terms × 50 ads = 150 scanned ≈ $0.11 on your account, capped by maxDiscoveryChargeUsd ($0.50); that yields ≈ 20–50 qualified ads — the first 25 free, the rest at $0.003 ($0.015 with AI, all in).

Which Apify plan do I need? Any plan runs the free demo and dataset / list mode. The live search and Apify's model access need a plan that can run Store Actors; on the Free plan qualify a dataset you already have and use llmProvider: "byok" with your own key.

Does it find Instagram ads? Yes — Meta's Ad Library covers Instagram, and platforms: ["instagram"] keeps only ads shown there: an Instagram ads library search with the same winner score and AI breakdown.

How long does a run take? The demo about 1 s; the source ~2 min for 150 ads (estimate). With AI through Apify's model access a few seconds per ad (estimate). With your own key (llmProvider: byok) 2 calls at a time, one after a rate limit, waiting what the provider asks: a rate-limited key measured 27 s per ad, so the worst case per 100 qualified ads is ≈ 45 min; after 120 s of unbroken rate limits the rest keep their rule score. Pass

timeoutSecs: 3600
for maxQualified 100 with AI; OUTPUT.timing reports each run's phases.

Can I use it for competitor ad research and ad creative analysis? Yes — competitorPages + advertiserReports for a summary per rival; enableAi breaks each creative into hook, angle, offer and audience.

Can I find dropshipping winning products with it? Yes — search product terms, set minVariants: 5, minDaysRunning: 21 and enrichLandingPages: true, and open the Products & offers view.

🧩 More Actors from the same developer

Not quite your use case? The same pay-per-qualified-result model, closest to this Actor's buyers first:

🆘 Support

Missing something? Open an issue on the Actor's page — buyer requests ship first.

📝 Changelog

One line per published build, newest first — /actor-publish adds it with the commit subject.

  • 0.3 (2026-09-26) — competitor report rows (advertiserReports), competitors to watch + saveAsMonitor, the client-ready REPORT page, Slack digest, country as a list, AI coverage in every AI status, one creative shape.