Facebook Ad Library Winning Ads Finder: AI creative breakdown
Pricing
from $3.00 / 1,000 qualified ad (rules only)s
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
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
3 days ago
Last modified
Categories
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

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 get | one 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 provide | 1–10 search terms or competitor Facebook pages; optionally one sentence about your product |
| Output | JSON / CSV / Excel, best-first, plus the funnel in OUTPUT and a DIGEST for Slack / e-mail |
| Typical run | 3 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 / setup | No 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 plan | Free demo and your own list (list mode, template): any plan · live search: a plan that runs Store Actors |
| Works with | Schedules, 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
- Click
Try it— the pre-filled example works as is (8 sample ads, nothing charged). - Type your own search terms — they replace the sample and start the live Ad Library search (spend-capped).
- Say what you sell (optional), keep the AI on, press Start.
- 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 days | from $0.003 per qualified ad, first 25 free, no start fee |
| What you pay for | every row scraped — each variant, dead, political and duplicate ad | only 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 details | apify/facebook-ads-scraper: + $0.0057 per URL enriched | enrichLandingPages: $0.004 per page that yields a store or product |
| Which ads work | you sort by start date in a spreadsheet | winner score 0–100 with reasons, variants collapsed |
| Hook / offer / angle | raw copy only | offer on every row; AI breakdown with verbatim evidence |
| Repeat runs | the same ads again next week | only new ads delivered and charged, plus stopped / 30-60-90-day alerts |
| Spend control | count only | hard 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.
| Event | When it is charged | Price |
|---|---|---|
free-tier | your first 25 qualified ads on this Actor, in any mode | $0.00 |
qualified-ad-basic | AI off — fields, offer, flags, winner score, rule hook | $0.003 |
qualified-ad-ai | AI on — plus the creative breakdown, fit score and rewrite for your product | $0.012 |
ad-alert | changeAlerts on — an ad you already have stopped or passed 30 / 60 / 90 days | $0.003 |
landing-enriched | enrichLandingPages on — a paid ad's landing page yielded a store or a product | $0.004 |
advertiser-report | advertiserReports 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
| Field | Default | What 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 |
minScore | 40 | The field that decides what you pay: below this = not delivered, not charged |
maxAdsToScan | 150 | Ads the source scans — its bill on your account (≈ $0.00075 each) |
maxDiscoveryChargeUsd | 0.5 | Stops the source Actor at this spend — in the form and over the API |
maxQualified | 100 | The cap on what this Actor charges: 100 × $0.012 = $1.20 at most with AI |
enableAi | true | AI creative breakdown on/off |
changeAlerts | false | Stopped / 30-60-90-day alerts on ads you already have |
advertiserReports | false | One competitor summary row per top advertiser |
enrichLandingPages | false | Store, 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.

⭐ Found it useful? A review on the Store helps others find it — it takes a minute on the Actor's page.
🔁 Run it weekly
- Schedule it weekly with
notifyEmail— the digest (top 10, alerts, competitors to watch) comes by e-mail;sendAlertsToposts 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. - Leave
onlyNewAds: true— the next run delivers and charges only what is new; the memory is kept per search. - Turn on
changeAlertsandadvertiserReports— stopped ads, 30 / 60 / 90-day winners, a row per competitor. - 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:
| Niche | Preset |
|---|---|
| DTC / Shopify brand — 3 product terms, Shopify landing pages, 14+ days | dtc-shopify |
| Product research — 4 dropshipping terms, video only, 5+ variants, landing pages read | dropshipping-products |
🔌 Integrations, automation and API
- E-mail / chat —
notifyEmaile-mails the digest; a Slack, Teams, Google Chat, Discord or Telegram link insendAlertsTogets it as a readable message. - Webhook — any other https URL in
sendAlertsTogets{"event": "ad.qualified", "ad": {…}, "runId": "…"}per row; retried once on 429 / 5xx, never fails the run;webhookSecretsigns each POST. - After every scrape — in your
curious_coder/facebook-ads-library-scrapertask, Integrations → Actor run succeeded → this Actor withsourceMode: 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 owner | the competitor ads that run for weeks, with hook and offer | product terms + productBrief |
| Agency media buyer / creative strategist | Monday's new long-running and stopped competitor ads, a client report | competitorPages + advertiserReports |
| Product researcher | the products and prices long-running ads push | searchTerms + 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: 3600maxQualified 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
itemsListor a dataset ID indatasetIdand 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.