Ad Library to Winning Angles and Ad Concepts avatar

Ad Library to Winning Angles and Ad Concepts

Pricing

from $5.00 / 1,000 ad analyseds

Go to Apify Store
Ad Library to Winning Angles and Ad Concepts

Ad Library to Winning Angles and Ad Concepts

Find which competitor ad angles, hooks and offers run longest in the Meta Ad Library, spot gaps, and get original ad concepts. Pay per ad and concept.

Pricing

from $5.00 / 1,000 ad analyseds

Rating

0.0

(0)

Developer

Seasons AI

Seasons AI

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a day ago

Last modified

Categories

Share

You already scrape your competitors' ads from the Meta Ad Library. This Actor tells you which angles, hooks and offers they keep running the longest, what they started testing in the last two weeks and which angles nobody covers. Then it writes original ad concepts for your product based on that.

Advertisers stop paying for ads that don't convert. An ad that has run for 60 days is the best public sign of a winner, so this Actor uses how long each ad has been running as its performance signal.

What you can do

  • See every competitor ad labelled with its angle, hook, offer, emotion, creative format and audience, next to its start date, days running, placements, media type, CTA and landing domain.
  • Find the angles and offers that run longest for each brand and across all of them, and how many copy variants each angle gets (heavy testing = the brand believes in it).
  • See what is new: ads started in the last 14 days, and angles that appear only in those fresh tests.
  • Find gaps: angles, offers, hooks, emotions and formats no competitor uses, or only one does.
  • Get N original ad concepts for your product (headline, primary text, description, CTA, visual idea, on-image text), about two thirds built on proven angles and one third on open gaps.
  • Hand the concepts straight to Brief to Ad Creative Matrix: the run saves a ready input file that renders these angles as ad images in platform sizes.

How to use

  1. Run a Facebook Ad Library scraper on the brand pages you compete with. Both popular scrapers work:

    Use Ad Library page URLs (…/ads/library/?view_all_page_id=<page id>…) and include inactive ads too (active status all): ads that stopped tell you how long a test lasted. 30–100 ads per brand give useful medians.

  2. Open this Actor and pick that run's dataset in Facebook Ad Library scraper dataset.

  3. Paste your product brief and choose the number of concepts (0 = analysis only).

  4. Start. The Actor reads the dataset, checks the price against your run's maximum cost, and only then begins.

No dataset? Paste the items in Items (either scraper's JSON format), or give a link to a JSON or CSV export in Items URL. The prefilled input is a 6-ad synthetic demo of two fictional brands, so the form runs as-is.

Input

FieldRequiredNotes
datasetIdone of these threeDataset of a Facebook Ad Library scraper run (picker in Console; through the API pass the run's defaultDatasetId). Read-only access
itemsAd items as JSON in either scraper's format
itemsUrlLink to a JSON array or CSV export (Apify's CSV export with snapshot/body/text-style columns works)
brandsnoPage names or page IDs to keep; other advertisers are ignored and not charged
maxAdsnoDefault 200, max 1,000. Over the cap, ads are taken evenly across brands
useVisionnoDefault on: the creative image (or the first frame of a video) is looked at to label the format and visual
newWindowDaysnoDefault 14. Ads that started within this window count as new
productBriefwhen concepts > 0Product, benefits, the offer you can actually run, tone, what to avoid (up to 4,000 characters)
audiencenoWho your ads speak to
conceptsCountno0–30, default 6
languagenoLanguage of the concepts and takeaways. Default English
exportCreativeMatrixInputnoDefault on. Saves creative-matrix-input.json

Example (API):

{
"datasetId": "<defaultDatasetId of your scraper run>",
"maxAds": 200,
"productBrief": "Brand: Driftleaf. Product: a 600 ml cold brew tea bottle with a removable steel infuser. Brew overnight in the fridge. Price $29, free shipping over $40 this month. Tone: calm, a little playful.",
"audience": "Busy office workers aged 25-40 who want to drink less soda",
"conceptsCount": 6
}

Output

Dataset: one row per ad.

{
"status": "analyzed",
"brand": "Example Sportswear",
"adArchiveId": "1234567890123456",
"adLibraryUrl": "https://www.facebook.com/ads/library/?id=1234567890123456",
"startDate": "2026-04-29",
"endDate": "2026-05-25",
"isActive": false,
"activeDays": 27,
"isNew": false,
"longevityIndex": 1.0,
"platforms": ["facebook", "instagram"],
"mediaType": "image",
"primaryText": "…",
"headline": "…",
"ctaType": "SHOP_NOW",
"landingDomain": "example.com",
"angle": "aspiration-lifestyle",
"angleDetail": "Effortless retro style for everyday outfits",
"hookType": "benefit-first",
"hookPattern": "Short promise of an instant style upgrade for any outfit",
"offer": "none",
"emotion": "aspiration",
"format": "lifestyle-photo",
"audienceCue": "women shopping for casual summer outfits",
"visualSummary": "Model in a retro tracksuit against a pastel wall",
"visionUsed": true,
"priceUsd": 0.005
}

Skipped ads (no copy and no creative) have "status": "skipped", a reason and "priceUsd": 0.

Key-value store

RecordContent
report.mdThe report: takeaways, brand table, angles and offers that run longest, hooks, emotions, formats, media types, CTAs, placements, new in the last 14 days, gaps, concepts, all ads
concepts.jsonTakeaways, gaps worth testing and the ad concepts as JSON
brands.jsonPer-brand summaries: ads, active, new, median and longest days, top and longest-running angles, offers, media mix, placements, landing domains, CTAs, new ads
summary.jsonOverall statistics per dimension and the gap lists
creative-matrix-input.jsonReady input for Brief to Ad Creative Matrix (your brief, the concept angles, placements, number of concepts)
OUTPUTCounts, amount charged and links to the files above

Each concept:

{
"id": "C1",
"angle": "convenience-time-saving",
"angleLine": "Cold tea ready by morning without boiling water",
"basis": "proven",
"hookType": "pain-point",
"format": "lifestyle-photo",
"offer": "free-shipping",
"headline": "Tea that brews while you sleep",
"primaryText": "…",
"description": "Glass bottle, steel infuser",
"cta": "SHOP_NOW",
"visualIdea": "…",
"onImageText": "Brewed overnight",
"whyItShouldWork": "…",
"evidence": { "value": "convenience-time-saving", "ads": 14, "medianDays": 41, "longRunners": 9 }
}

Labels: angles price-value, quality-craft, convenience-time-saving, performance-results, health-wellness, problem-solution, social-proof, authority-expert, aspiration-lifestyle, identity-values, new-launch-novelty, scarcity-urgency, comparison-switch, emotional-story, sustainability, gifting-occasion, community-belonging, safety-risk-reduction; offers percent-discount, amount-discount, free-shipping, bundle-bogo, free-trial, free-gift, limited-time-sale, new-product, financing-installments, guarantee-returns, free-content-lead-magnet, subscription-saving; plus hook types, emotions and creative formats (see summary.json).

Pricing

Pay per event. Skipped or failed ads and dropped concepts are free.

EventWhenPrice
ad-analyzedone ad labelled (angle, hook, offer, emotion, format, audience)$0.005
ad-conceptone original ad concept delivered$0.01

Worked examples:

RunPrice
Prefilled demo: 6 ads + 6 concepts6 × $0.005 + 6 × $0.01 = $0.09
50 ads, analysis only50 × $0.005 = $0.25
200 ads + 6 concepts (default)$1.00 + $0.06 = $1.06
1,000 ads + 30 concepts (run maximum)$5.00 + $0.30 = $5.30

The Actor computes the maximum price before it starts and stops, free of charge, if your run's maximum cost is lower.

Available on paid Apify plans.

Limits and good to know

  • On the free Apify plan the Actor returns a short preview with an example result and prices instead of running.
  • Up to 1,000 ads and 30 concepts per run. Per ad, up to 1,800 characters of primary text, the headline, link description, card texts and one image are analysed.
  • Days running is computed in code from the scraper's start and end dates (to the reference date while the ad is still active), not by the AI. The reference date is the run date, or the latest date in the data when the scrape is older than a week. Medians use ads that started before the new-ads window, so fresh tests don't drag them down.
  • Longevity is a proxy, not a metric: brand campaigns, always-on catalog ads and seasonal pushes run long for reasons other than performance. The report shows media types (catalog and dynamic ads are separate) so you can tell them apart.
  • Labels come from an AI model reading the copy and one image, so they can be wrong on unusual ads. Creative links from the Ad Library expire after some days; expired creatives are labelled from the copy (same price) and the row says so.
  • Concepts never copy competitors. The writer only sees labels, statistics and generic hook descriptions, never competitor copy. Every concept is also checked against all competitor copy in your input: a concept that repeats any 6 words in a row is dropped and not charged. Concepts only claim what your brief says. Check prices, offers and claims before you publish.
  • Company and brand level only: the Actor keeps page names, ad copy and creative facts. It does not output profile pictures, creator partners, bylines, reach by age and gender, or any personal data. Competitor images are downloaded for a moment, analysed and never stored.
  • Use it on public ads you are allowed to analyse, and keep to Meta's terms.