Ad Library to Winning Angles and Ad Concepts
Pricing
from $5.00 / 1,000 ad analyseds
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
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
a day ago
Last modified
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
-
Run a Facebook Ad Library scraper on the brand pages you compete with. Both popular scrapers work:
- Facebook Ads Scraper (
apify/facebook-ads-scraper) - Facebook Ads Library Scraper (
curious_coder/facebook-ads-library-scraper)
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. - Facebook Ads Scraper (
-
Open this Actor and pick that run's dataset in Facebook Ad Library scraper dataset.
-
Paste your product brief and choose the number of concepts (0 = analysis only).
-
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
| Field | Required | Notes |
|---|---|---|
datasetId | one of these three | Dataset of a Facebook Ad Library scraper run (picker in Console; through the API pass the run's defaultDatasetId). Read-only access |
items | Ad items as JSON in either scraper's format | |
itemsUrl | Link to a JSON array or CSV export (Apify's CSV export with snapshot/body/text-style columns works) | |
brands | no | Page names or page IDs to keep; other advertisers are ignored and not charged |
maxAds | no | Default 200, max 1,000. Over the cap, ads are taken evenly across brands |
useVision | no | Default on: the creative image (or the first frame of a video) is looked at to label the format and visual |
newWindowDays | no | Default 14. Ads that started within this window count as new |
productBrief | when concepts > 0 | Product, benefits, the offer you can actually run, tone, what to avoid (up to 4,000 characters) |
audience | no | Who your ads speak to |
conceptsCount | no | 0–30, default 6 |
language | no | Language of the concepts and takeaways. Default English |
exportCreativeMatrixInput | no | Default 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
| Record | Content |
|---|---|
report.md | The 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.json | Takeaways, gaps worth testing and the ad concepts as JSON |
brands.json | Per-brand summaries: ads, active, new, median and longest days, top and longest-running angles, offers, media mix, placements, landing domains, CTAs, new ads |
summary.json | Overall statistics per dimension and the gap lists |
creative-matrix-input.json | Ready input for Brief to Ad Creative Matrix (your brief, the concept angles, placements, number of concepts) |
OUTPUT | Counts, 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.
| Event | When | Price |
|---|---|---|
ad-analyzed | one ad labelled (angle, hook, offer, emotion, format, audience) | $0.005 |
ad-concept | one original ad concept delivered | $0.01 |
Worked examples:
| Run | Price |
|---|---|
| Prefilled demo: 6 ads + 6 concepts | 6 × $0.005 + 6 × $0.01 = $0.09 |
| 50 ads, analysis only | 50 × $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.