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

3 days 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 the AI breakdown (≈ $0.015 all in, ≈ 1,900 tokens an ad) · ⏱️ demo in 1 s, AI 2.3 s an ad

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 / setupNo API key where your Apify plan includes model access — otherwise your first 5 real ads get live AI verdicts on us, then your own Gemini / Groq key (a free key: 1–3 AI verdicts per run)
Which planFree demo and your own list (list mode, template): any plan · live search: a plan that runs Store Actors
Works withSchedules, e-mail, Slack, Teams, Google Chat, Discord, Telegram, 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

  • Competitor report rows — one row per top advertiser: active, new, stopped and 30+-day ads, share of voice, top angles and offers ($0.02 each).
  • Competitors to watch — every run lists them, with the ready input of a weekly monitor on them.
  • A client-ready page — thumbnails, hooks, offers and the AI breakdown, to forward. Free.

🚀 How to use it

  1. Click Try it — the pre-filled example works as is (8 sample ads, nothing charged).
  2. Type your own search terms — they replace the sample and start the live Ad Library search (spend-capped).
  3. Say what you sell (optional), keep the AI on, press Start.
  4. Schedule it weekly — new winning ads best-first in the Shortlist view and your inbox.

📦 Already scraping the Facebook Ad Library? Qualify your scraper data

Paste the dataset ID of your last curious_coder/facebook-ads-library-scraper or apify/facebook-ads-scraper run into Dataset (datasetId) — no second scrape, AI off by default, you pay only for the qualified ads. To do it after every scrape, see the chained-run recipe.

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

🆚 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
Your time per 100 ads≈ 8 h — sort ≈ 700 raw rows, collapse variants, write each breakdown (≈ 5 min an ad)≈ 0 h — sorted, scored and broken down

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

AdSpy lists $149/month per seat; a weekly monitor of 10 competitors here costs ≈ $3.70/month.

💵 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 — the Actors a Store search for "facebook ad library winning ads" shows next to this one charge a median $0.0045 per ad; $0.003 per qualified ad is below that median. A raw scraper row costs $0.00075, but one qualified ad replaces 3–7 raw rows ≈ $0.0004–0.001 per raw-row equivalent.

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).

🤖 What the AI tier adds

AI on (qualified-ad-ai, $0.012) — judged against the demo brief "An ergonomic laptop stand for people who work from home …": the AI lifts it (fit 85 → score 65) and rewrites the angle for your product:

{"advertiserName": "StandUp Co", "winnerScore": 51, "fitScore": 85, "score": 65, "label": "warm",
"fitReason": "Strong overlap in targeting remote workers needing physical relief, though the competitor sells a large desk converter while the brief is a portable stand.",
"creative": {"hook": "Your back will thank you.", "angle": "problem-solution", "offerSummary": "Free delivery",
"cta": "Shop now", "targetAudience": "Appears aimed at remote workers or desk-bound professionals experiencing back discomfort.",
"emotionalTrigger": "relief", "formatNotes": "Video format demonstrates the speed of conversion in a quick visual sequence.",
"evidence": ["Your back will thank you.", "The StandUp converter turns the desk you already own into a standing desk in 10 seconds.", "Free delivery across the US."]},
"adaptationIdea": {"headline": "Work pain-free anywhere with our ergonomic stand",
"primaryText": "Transform your workspace in seconds. Our adjustable aluminium laptop stand folds flat and supports your posture whether you work from home or the couch. Ergonomic design built for comfort, priced at just $49.",
"whyItWorks": "Mirrors the direct problem-solution structure by pairing physical pain relief with a fast, portable lifestyle benefit."},
"aiStatus": "ok", "aiModel": "google:gemini-3.5-flash-lite"}

Cut from a local run of storage-example/INPUT.ai.json on 2026-10-16 with the own-key default model (≈ 1,722 input + 210 output tokens and 2.3 s per ad). About 5 minutes of a strategist's work per ad (on 8 sample ads), for ≈ $0.015. On a plan without model access the free demo shows these verdicts labelled aiModel: "sample".

🧠 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
searchTerms—One Ad Library keyword search per term — typing yours starts the live search
competitorPages—Facebook pages whose ads are scanned
productBrief—Your product — the AI fit score and rewrite
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

| sendAlertsTo | — | Slack / Teams / Google Chat / Discord / Telegram / webhook links — the digest goes there |

📤 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. Schedule it weekly with notifyEmail — the digest (top 10, alerts, competitors to watch) comes by e-mail; sendAlertsTo posts it to Slack, Teams, Google Chat, Discord or Telegram. A live run saves its search as a Task — open the link in its status, click Schedule.
  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, a row per competitor.
  4. Point the swipe-file Sheet at the run, or start from the tracker sheet.

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

Paste OUTPUT.saveAsMonitor into a Task — pages, alerts and reports set; forward REPORT to the client.

🎯 Try it for your niche

Pick one in Start from a ready niche search and press Start — it fills the fields you left empty (your own values win) and runs the live search, spend-capped:

NichePreset
DTC / Shopify brand — 3 product terms, Shopify landing pages, 14+ daysdtc-shopify
Product research — 4 dropshipping terms, video only, 5+ variants, landing pages readdropshipping-products

🔌 Integrations, automation and API

  • E-mail / chat — notifyEmail e-mails the digest; a Slack, Teams, Google Chat, Discord or Telegram link in sendAlertsTo gets it as a readable message.
  • Webhook — any other https URL in sendAlertsTo gets {"event": "ad.qualified", "ad": {…}, "runId": "…"} per row; retried once on 429 / 5xx, never fails the run; webhookSecret signs each POST.
  • After every scrape — in your curious_coder/facebook-ads-library-scraper task, Integrations → Actor run succeeded → this Actor with sourceMode: dataset, datasetId = that run's dataset, enableAi: false.
  • Google Sheets / HubSpot — the Integrations tab; upsert on dedupeKey.
  • AI agents / MCP — plain typed inputs; {} is 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

Which call runs what — demo, live search or your own rows

List-mode rows — what a pasted record needs

👥 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.

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.3 s per ad measured on google:gemini-3.5-flash-lite (2026-10-16); a slow, rate-limited key measured 27 s per ad, so the worst case per 100 qualified ads is ≈ 25 min — rate-limit waits stop after 60 s per run, the rest keep their rule score. A free-tier key gives 1–3 AI verdicts per run; a paid Gemini / Groq key (billing on) assesses every ad. Pass

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

🧩 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.4 (2026-10-16) — Type your own search terms next to the free demo and the live Ad Library search starts (spend-capped); pick a ready niche search in one click, and a successful live search is saved as a task you can schedule; Send the weekly digest to Slack, Microsoft Teams, Google Chat, Discord or Telegram from one "Send alerts to" field, and on a plan without Apify's model access the demo now shows real AI breakdowns and your first real ads get live AI verdicts; Steadier runs: a rate-limited AI key stops waiting quickly and retries the borderline ads, a changed source format fails the run instead of returning an empty success, and every run says in OUTPUT whether it was a demo, a live search or your own rows.
  • 0.3.3 (2026-10-04) — Bring your own data: send rows in itemsList or a dataset ID in datasetId and the Actor picks the mode itself, starts no source Actor and charges only for the analysis. Fields it cannot read are listed in the run log instead of being dropped silently.