Mine the highest-converting ad angles from customer reviews, Reddit complaints, support tickets, and competitor ads. Extracts actual pain language, competitor weaknesses, and outcome phrases that real buyers use. Outputs a ranked angle bank with proof quotes and recommended ad formats per angle.
npx gooseworks install --all # then, in Claude Code, Cursor, or Codex: /gooseworks use the ad-angle-miner skill
Dig through customer voice data — reviews, Reddit, support tickets, competitor ads — to extract the specific language, pain points, and outcome desires that make ads convert. The output is an angle bank your team can pull from for any campaign.
Core principle: The best ad angles aren't invented in a brainstorm. They're extracted from what real people are already saying. This skill finds those angles and ranks them by strength of evidence.
APIFY_API_TOKEN — required for review scraping and Reddit scrapingUse the Apify Amazon Reviews Scraper (or web_search for G2/Capterra/TrustRadius reviews).
Option 1: Amazon product reviews via Apify
Start a run of the web_wanderer/amazon-reviews-extractor actor:
POST https://api.apify.com/v2/acts/web_wanderer~amazon-reviews-extractor/runs?token=$APIFY_API_TOKEN
Content-Type: application/json
{
"products": [
"https://www.amazon.com/dp/PRODUCT_ASIN"
],
"maxReviews": 100
}Poll until the run finishes:
GET https://api.apify.com/v2/acts/web_wanderer~amazon-reviews-extractor/runs/{RUN_ID}?token=$APIFY_API_TOKENWhen status is SUCCEEDED, fetch results:
GET https://api.apify.com/v2/datasets/{DATASET_ID}/items?token=$APIFY_API_TOKENOutput fields: Each review has rating (1-5), reviewTitle, reviewText, reviewDate, verifiedPurchase (bool), productAsin, productTitle, helpfulVoteCount.
Option 2: G2/Capterra/TrustRadius reviews via web_search
For B2B products, run web searches to find review content:
web_search: "<product_name> reviews site:g2.com"
web_search: "<product_name> reviews site:capterra.com"
web_search: "<product_name> reviews site:trustradius.com"
web_search: "<competitor_name> reviews site:g2.com"Focus on:
Use the trudax/reddit-scraper-lite actor to search Reddit for relevant threads:
Search by keyword:
POST https://api.apify.com/v2/acts/trudax~reddit-scraper-lite/runs?token=$APIFY_API_TOKEN
Content-Type: application/json
{
"searches": [
"<product category> OR <competitor> OR <pain keyword>"
],
"maxItems": 50
}Browse a specific subreddit:
POST https://api.apify.com/v2/acts/trudax~reddit-scraper-lite/runs?token=$APIFY_API_TOKEN
Content-Type: application/json
{
"startUrls": [
{"url": "https://www.reddit.com/r/SUBREDDIT_NAME/hot/"}
],
"maxItems": 50
}Poll until complete:
GET https://api.apify.com/v2/acts/trudax~reddit-scraper-lite/runs/{RUN_ID}?token=$APIFY_API_TOKENFetch results when status is SUCCEEDED:
GET https://api.apify.com/v2/datasets/{DATASET_ID}/items?token=$APIFY_API_TOKENOutput fields: Each item has dataType ("post" or "comment"), title (posts only), body, communityName, upVotes, numberOfComments (posts), url, createdAt.
Extract:
Use scrapecreators-api to collect relevant X posts plus Instagram, TikTok, YouTube, or Facebook posts where the audience is discussing the problem. Run comment-mining on the highest-signal threads. Use web search only as a fallback:
web_search: "<competitor> (frustrating OR broken OR hate) site:x.com"
web_search: "<competitor> (love OR switched to OR replaced) site:x.com"
web_search: "<product category> (recommendation OR alternative OR looking for) site:twitter.com"
web_search: "<competitor> site:x.com" (for general sentiment)Run 3-5 queries covering:
Use competitor-ad-intelligence for structured Meta and Google ad-library collection. Use web search only to verify an advertiser or fill a documented gap:
web_search: "<competitor_name> site:facebook.com/ads/library"
web_search: "<competitor_name> facebook ads library"
web_search: "<competitor_name> ad creative examples"This reveals:
If the user provides support tickets, NPS comments, or sales call transcripts — ingest and tag with the same framework below.
Process all collected data through this extraction framework:
| Category | What to Look For | Ad Power |
|---|---|---|
| Pain angles | Specific frustrations with status quo or competitors | High — pain motivates action |
| Outcome angles | Desired results buyers describe in their own words | High — positive aspiration |
| Identity angles | How buyers describe themselves or want to be seen | Medium — emotional resonance |
| Fear angles | Risks of NOT switching or acting | Medium — loss aversion |
| Competitive displacement | Specific reasons people switched from a competitor | Very high — direct comparison |
| Social proof angles | Outcomes or metrics buyers cite in reviews | High — credibility |
| Contrast angles | Before/after or old way/new way framings | High — clear value prop |
Score each angle on:
| Factor | Weight | Description |
|---|---|---|
| Evidence strength | 30% | Number of independent sources mentioning it |
| Emotional intensity | 25% | How strongly people feel about this (language intensity) |
| Competitive differentiation | 20% | Does this set you apart, or could any competitor claim it? |
| ICP relevance | 15% | How closely does this match the target buyer's world? |
| Freshness | 10% | Is this angle already overused in competitor ads? |
Total score out of 100. Rank all angles.
# Ad Angle Bank — [Product Name] — [DATE]
Sources mined: [list]
Total angles extracted: [N]
Top-tier angles (score 70+): [N]
---
## Tier 1: Highest-Conviction Angles (Score 70+)
### Angle 1: [One-sentence angle]
- **Category:** [Pain / Outcome / Identity / Fear / Displacement / Proof / Contrast]
- **Score:** [X/100]
- **Emotional register:** [Frustration / Aspiration / etc.]
- **Proof quotes:**
> "[Verbatim quote 1]" — [Source: G2 review / Reddit / etc.]
> "[Verbatim quote 2]" — [Source]
> "[Verbatim quote 3]" — [Source]
- **Source count:** [N] independent mentions
- **Competitor weakness exploited:** [Competitor name + specific gap, or "N/A"]
- **Recommended formats:** [Search ad headline / Meta static / Video hook / etc.]
- **Sample headline:** "[Draft headline using this angle]"
- **Sample body copy:** "[Draft 1-2 sentence body]"
### Angle 2: ...
---
## Tier 2: Worth Testing (Score 50-69)
[Same format, briefer]
---
## Tier 3: Emerging / Low-Evidence (Score < 50)
[Brief list — angles with potential but insufficient evidence]
---
## Competitive Angle Map
| Angle | Your Product | [Comp A] | [Comp B] | [Comp C] |
|-------|-------------|----------|----------|----------|
| [Angle 1] | Can claim ✓ | Weak here ✗ | Also claims | Not relevant |
| [Angle 2] | Strong ✓ | Strong | Weak ✗ | Not relevant |
...
---
## Recommended Test Plan
### Week 1-2: Test Tier 1 Angles
- [Angle] → [Format] → [Platform]
- [Angle] → [Format] → [Platform]
### Week 3-4: Test Tier 2 Angles
- [Angle] → [Format] → [Platform]Save to angle-bank-[YYYY-MM-DD].md in the current working directory (or user-specified path).
APIFY_API_TOKEN — for Apify actors (review scraper, Reddit scraper)comment-mining — customer language from social and ad comment threadscompetitor-ad-intelligence — structured ad-library research through ScrapeCreatorsDiscover rising category conversations, formats, sounds, questions, and creator patterns across social platforms, then separate durable demand signals from short-lived noise.
Turn TikTok, Instagram, YouTube, Facebook, X, LinkedIn, Reddit, or Rumble transcripts into timestamped hooks, claims, objections, proof, calls to action, sponsorship signals, and reusable content atoms. Use directly for transcript analysis or as support for creator, competitor, trend, demand, and repurposing work.
Produce a decision-ready brief of current brand, product, category, and competitor conversations across social platforms, including sentiment drivers, questions, risks, and growth opportunities.