SkillAgentSearch skills...

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-miner

Installs into whichever agent you are using.

About this skill
📄

SKILL.md

Installable skill definition

Quality Score

86/100

Category

Marketing

Supported Platforms

Universal

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.

Substance
30/30
Structure
13/20
Description
15/15
Adoption
13/20
Freshness
15/15

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.

SkillScoreStarsUpdatedFormat
ad-angle-miner (this skill)by gooseworks-ai861.2k33d agoSKILL.md
algorithmic-artby anthropics100177.9k33d agoSKILL.md
pptxby anthropics100177.9k33d agoSKILL.md
designby nextlevelbuilder100137.2k11d agoSKILL.md
ui-ux-pro-maxby nextlevelbuilder100137.2k11d agoSKILL.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.

name: 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:

  1. Your product: name and what it does in one sentence (with GooseWorks: the brand context).
  2. Competitors: 2-5 names (with GooseWorks: the tracked ones, or the suggested ones).
  3. Who it's for, if the brand context doesn't say.
  4. 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.

  1. 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.
  2. 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.
  3. 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

  1. Imported ads (free): ads_template_read in 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.
  2. 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.
  3. 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.
  4. 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.

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

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

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

  1. Free first: the competitor dossiers (competitor_read with a slug) and social_inspiration_library / social_inspiration_search. These are often empty; then go to the paid searches.

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

  3. Keep vertical videos only, far above their account's usual views, from the last ~90 days.

  4. Watch the 3-5 strongest (the watch skill, or social_inspiration_watch for 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

View on GitHub
GitHub Stars1.2k
CategoryMarketing
Updated1mo ago
Forks208

Languages

Python

Trust signals

100/100

From repository metadata: license, adoption, age and documentation. Not a code audit — see the Safety scan above for what the skill file itself contains.

No cautions