ad-angle-miner
Research supported advertising promises from a specific buyer's context, current product facts, customer language and observed ads. Turn them into static, video or copy ideas; match video ideas to actual recipes and save a product-scoped angle bank for write-video-ad-script.
Install / Use
npx skills add gooseworks-ai/goose-skills --skill ad-angle-minerInstalls into whichever agent you are using.
SKILL.md
Installable skill definition
Quality Score
Category
MarketingSupported Platforms
Our assessment of ad-angle-miner
ad-angle-miner scores 86/100 on our quality scale, 380th of 560 Marketing skills we index.
Its SKILL.md is 25 KB long, well organised into 27 sections and no code examples: a thorough specification that gives an agent plenty to work with.
With 1,222 GitHub stars, it is one of the more widely adopted skills in the catalogue.
Maintenance, license and trust
- The repository was last updated 33 days ago, so ad-angle-miner is actively maintained.
- Our last check on 2026-10-11 found the source still online.
- It is released under the MIT license, a permissive license that allows use, modification and commercial use with attribution.
- Its trust signals score 100/100, with no cautions. These come from repository metadata, not a code audit — read the skill file before letting an agent act on it.
ad-angle-miner compared with similar skills
All 4 of these similar skills score higher than ad-angle-miner; compare them before choosing.
| Skill | Score | Stars | Updated | Format |
|---|---|---|---|---|
| ad-angle-miner (this skill)by gooseworks-ai | 86 | 1.2k | 33d ago | SKILL.md |
| algorithmic-artby anthropics | 100 | 177.9k | 33d ago | SKILL.md |
| pptxby anthropics | 100 | 177.9k | 33d ago | SKILL.md |
| designby nextlevelbuilder | 100 | 137.2k | 11d ago | SKILL.md |
| ui-ux-pro-maxby nextlevelbuilder | 100 | 137.2k | 11d ago | SKILL.md |
Frequently asked questions
- How do I install ad-angle-miner?
- Run
npx skills add gooseworks-ai/goose-skills --skill ad-angle-miner. The install tabs above show the steps for each supported agent. - Which AI agents does ad-angle-miner work with?
- It is written for Universal, as a SKILL.md file. Other agents that read the same format can often use it too.
- Is ad-angle-miner safe to use?
- It is MIT-licensed and scores 100/100 on trust signals. Skills are instructions an agent will follow, so read the file before installing it and do not approve commands you do not understand.
- Is ad-angle-miner still maintained?
- The repository was last updated 33 days ago, so ad-angle-miner is actively maintained.
Skill content
View source on GitHubname: ad-angle-miner description: Research supported advertising promises from a specific buyer's context, current product facts, customer language and observed ads. Turn them into static, video or copy ideas; match video ideas to actual recipes and save a product-scoped angle bank for write-video-ad-script. Product-led discovery can use verified facts without reviews. Reference persistence and reach are observations, not proof of performance.
Ad Angle Miner
Summary. Research advertising promises and match them to creatives the brand can make. Video research produces a structured bank the script writer can reuse, with stable angle ids, separate product facts and customer language, and template compatibility. Research scores rank test candidates; they do not predict conversions.
An ad is copy plus creative. This skill finds the angles real buyers respond to and turns each into an ad idea the user can make:
- Static: a headline and primary text, plus a template from the live library whose layout fits the message.
- Video: a hook, plus a video format from the live catalogue and the observed posts that illustrate the pattern.
- Copy only: the headline and primary text lines, with no creative. Same evidence as static.
Core principle: combine audience relevance with a supported product promise and a feasible creative. Customer language, demonstrations, first-party performance and advertiser persistence provide different evidence. Long-running ads and variants are observations, not proof of profit. A product-led angle can start from verified facts without reviews; label missing evidence.
Do only the work the chosen output needs. Copy and static never search for videos or read video formats. Copy never looks at templates. Video reuses available reviews for language and insight; collect more only when the angle needs them. A video request may name a selected template or angle: preserve both.
When to Use
- "What static ads should I make?" / "Give me image ad ideas for [brand]" (static)
- "What video ads should I make?" / "Give me video ad hooks for [brand]" (video)
- "Write ad copy / headlines for [brand]" / "What should our ads say?" (copy)
- "What's working in my competitors' ads?" (any; ask which output)
- "I need fresh ad angles" (ask which output)
Prerequisites
- GooseWorks MCP connector (recommended): brand context, competitors, the Meta Ad Library (imported and live search), comments and reviews through the ScrapeCreators proxy (no key), the video format catalogue and the static template library. With it connected, no API key is needed.
- Without GooseWorks: a direct ScrapeCreators key (
scrapecreators-api,competitor-ad-intelligence) and web search. Static and video ideas then describe the layout or format in words instead of naming a library entry, and there is no hand-off step.
Phase 0: Intake
0A: Choose the output
Read it from the request:
| The user says | Output | |---|---| | static, image ads, banners, "what image ads" | static | | video, UGC, reels, TikTok, "what video should I make" | video | | copy, headlines, primary text, "what should our ads say" | copy | | "ads" or "angles" with no hint | ask once: "Static ad ideas, video ad ideas, or just the copy?" |
The user can pick more than one (for example static and video); then run the union of their sources, once. Never widen the scope on your own.
0B: What each output runs
| Source | static | video | copy | |---|---|---|---| | Brand context (1-0) | yes | yes | yes | | The brand's own ads (1A) | yes | yes | yes | | Competitor ads (1B) | yes, image ads first | yes, video ads first | yes, the copy | | Customer voice: reviews + comments (1C) | yes | reuse reviews; comments on top posts | yes | | Organic short-form reach (1D) | no | yes | no | | Internal data (1E) | if provided | if provided | if provided | | Reddit and forums (1F) | only if asked | only if asked | only if asked | | Template library (2.5) | yes | no | no | | Video format catalogue and full recipes (2.5) | no | yes | no |
0C: The rest of the intake
Take what the request and the brand context already answer; ask only for what's missing, in one message:
- Your product: name and what it does in one sentence (with GooseWorks: the brand context).
- Competitors: 2-5 names (with GooseWorks: the tracked ones, or the suggested ones).
- Who it's for, if the brand context doesn't say.
- Search terms the user wants covered, if any. Use them first.
Never invent a customer, a result or a claim: an angle may only promise what the brand's own facts support.
Phase 1: Source Collection
Run only the sections Phase 0B selected. ScrapeCreators calls go through scrapecreators-api
(GooseWorks: data_call_provider with provider scrapecreators, GET). Each is billed per call:
before the first one, say roughly how many you'll run and ask one yes/no. Free sources never need
asking. Large results are saved to a file by some hosts: request a full page and parse the saved
file rather than paging in small pieces.
1-0: Brand Context
With the GooseWorks MCP: brand_read (one brand in the org means use it and say which), with
sections summary, products, competitors, accounts and learnings (the reply is large: parse the
saved file); add kit when you need claims,
voice or photos. Note what it sells, who buys it, its claims and can't-say rules, its offers, which
products have clean photos (check the files: an SVG logo or a small thumbnail is not a clean
product photo), and whether it has screen recordings or footage. competitor_read lists tracked
competitors; with none, its suggestions view names likely ones. Say them in one line and carry on.
1A: The Brand's Own Ads
What the brand already runs decides what is new.
- Find the right page. Search the Meta Ad Library for the brand by name (/v1/facebook/adLibrary/search/companies, query = brand name) and compare the page with the one stored on the brand. If the stored page returns no ads but the search finds an active page with the brand's name, use the found page and tell the user the stored page looks wrong.
- Read its ads (/v1/facebook/adLibrary/company/ads with that page id; status ACTIVE, then INACTIVE for the stopped ones when the endpoint returns them). Group ads with the same primary text as variants of one message.
- Sort them:
- Still running for 30+ days, or with 3+ variants: advertiser persistence, worth investigating. Only label a winner when first-party performance supports it for a stated objective and measurement window. Duration alone does not establish fatigue or profitability.
- Stopped: inactive, reason unknown unless first-party records explain it. It may have been seasonal, budget-limited or replaced; do not infer failure from status alone.
- Never run: the white space. An angle buyers talk about that the brand has never run is the most valuable find.
1B: Competitor Ads
- Imported ads (free):
ads_template_readin competitor mode, one tracked competitor at a time (filter by its source id). Rows are heavy; keep the source ad id, primary text, CTA, start and end dates and ratio. Today most imported ads are images; their copy is still evidence. - Keep it on-category. A tracked competitor can sell something else in another market. Drop ads that aren't about the same kind of product, and say which competitor was off-category.
- Find who actually advertises in the category (paid): Meta Ad Library keyword search (/v1/facebook/adLibrary/search/ads) with 2-3 category terms ("chai concentrate", "masala chai"), country set to the brand's market and status ACTIVE. Keyword search also returns unrelated advertisers: drop anything off-category. This finds the real competitors the roster misses.
- For every ad keep: the link, advertiser, the hook (first line), the offer, the CTA, days running and the number of variants. Live searches return each ad's url: use it. Imported rows return only the ad id: there, and only there, build the link as facebook.com/ads/library with that id. For a live ad the end date is the day it was fetched (imported rows: the day they were imported), so write "at least N days, still running".
1C: Customer Voice
What buyers say in their own words. This is what keeps angles from being guesses.
-
The brand's own reviews: its product pages (review widgets often load by script, so a plain web fetch shows only a few; fetch the raw page HTML and read the review blocks and any "customers say" summary in it), its TikTok Shop reviews if it sells there (/v1/tiktok/shop/product/reviews), its Amazon listing (web search and fetch). Keep 4-5 star reviews for outcomes and proof, and 1-3 star reviews for objections to answer.
-
Competitors' bad reviews: 1-2 star reviews of the top 2 competitors' products, from the same kinds of sources. These suggest possible gaps to investigate. Claim a gap only when this product independently supports the promised difference.
-
Comments on what's working: most ads link to a landing page, not a post, so their comments usually can't be read. Read comments instead on:
- the brand's own top posts (its accounts from the brand context; Instagram /v2/instagram/user/posts, TikTok /v3/tiktok/profile/videos, then the comments of the 2 best);
- 1-2 complaint or comparison threads found by keyword search in the category (TikTok /v1/tiktok/search/keyword, then /v1/tiktok/video/comments);
- in video mode, the top organic posts from 1D.
Comments paths: TikTok /v1/tiktok/video/comments, Instagram /v2/instagram/post/comments, YouTube /v1/youtube/video/comments, Facebook /v1/facebook/post/comments. Look for questions, objections and "I switched because…".
Keep every quote verbatim with its link. Never paraphrase a quote into something the buyer didn't say.
1D: Organic Short-Form Reach (video only)
What is getting earned reach right now.
-
Free first: the competitor dossiers (
competitor_readwith a slug) andsocial_inspiration_library/social_inspiration_search. These are often empty; then go to the paid searches. -
Paid searches (one yes/no for the batch). Terms: the user's own first, then the category, the main problem it solves, each competitor's name.
| Platform | Path | Query | Notes | |---|---|---|---| | TikTok | /v1/tiktok/search/keyword | query, date_posted last-3-months, sort_by most-liked | About 2MB per call: parse it; keep url (tiktok.com/@author/video/id), author, followers, statistics.play_count, create_time, desc, commerce_info | | Instagram Reels | /v2/instagram/reels/search | query, date_posted last-month | Google-indexed, best-effort, about 9 results a page; no follower count | | YouTube Shorts | /v1/youtube/search | query, type shorts, nothing else | Adding uploadDate or sortBy with type shorts returns nothing. Rows have only url, title and views: for the 3-5 you'd cite, call /v1/youtube/video for channel, publishDate and isPaidPromotion. YouTube evidence is evergreen: cite its date | | X | none | none | No X keyword search: use
competitor_research(mentions) with platform x, or /v1/twitter/user-tweets for a handle |The full list is the official OpenAPI (docs.scrapecreators.com/openapi.json). If a call errors, read it there; never guess a path.
-
Keep vertical videos only, far above their account's usual views, from the last ~90 days.
-
Watch the 3-5 strongest (the
watchskill, orsocial_inspiration_watchfor saved posts). When neither is available, read the transcript (YouTube /v1/youtube/video/transcript; otherwise the caption and first spoken line) rather than guessing from the title.
1E: Internal Data (Optional)
Support tickets, NPS comm
Truncated for display — read the full file on GitHub.
Related Skills
algorithmic-art
177.9kCreating algorithmic art using p5.js with seeded randomness and interactive parameter exploration. Use this when users request creating art using code, generative art, algorithmic art, flow fields, or particle systems.
pptx
177.9kUse this skill any time a .pptx or .potx file is involved in any way — as input, output, or both. This includes: creating slide decks, pitch decks, or presentations; reading, parsing, or extracting text from any .pptx or .potx file (even if the extracted content will be used elsewhere, like in an em…
design
137.2kComprehensive design skill: brand identity, design tokens, UI styling, logo generation (55 styles, Gemini, Atlas Cloud, or MuAPI AI), corporate identity program (50 deliverables, CIP mockups), HTML presentations (Chart.js), banner design (22 styles, social/ads/web/print), icon design (15 styles, SVG…
ui-ux-pro-max
137.2kUI/UX design intelligence for web, mobile, and desktop. This skill should be used when designing, building, reviewing, or fixing interfaces, including pages, components, design systems, accessibility, interaction, responsive layout, typography, color, charts, and stack-specific UI implementation.
Languages
Trust signals
From repository metadata: license, adoption, age and documentation. Not a code audit — see the Safety scan above for what the skill file itself contains.
