$npx -y skills add gooseworks-ai/goose-skills --skill ad-angle-minerMine 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 fo
| 1 | # Ad Angle Miner |
| 2 | |
| 3 | 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. |
| 4 | |
| 5 | **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. |
| 6 | |
| 7 | ## When to Use |
| 8 | |
| 9 | - "What angles should we run in our ads?" |
| 10 | - "Find pain points we can use in ad copy" |
| 11 | - "What are people complaining about with [competitors]?" |
| 12 | - "Mine reviews for ad messaging" |
| 13 | - "I need fresh ad angles — not the same tired stuff" |
| 14 | |
| 15 | ## Prerequisites |
| 16 | |
| 17 | - **Environment variable:** `APIFY_API_TOKEN` — required for review scraping and Reddit scraping |
| 18 | - **Web search access** — your AI agent must support `web_search` or equivalent for Twitter/X and competitor ad lookups |
| 19 | |
| 20 | ## Phase 0: Intake |
| 21 | |
| 22 | 1. **Your product** — Name + what it does in one sentence |
| 23 | 2. **Competitors** — 2-5 competitor names (for review mining) |
| 24 | 3. **ICP** — Who are you targeting? (role, company stage, pain) |
| 25 | 4. **Data sources to mine** (pick all that apply): |
| 26 | - G2/Capterra/Trustpilot reviews (yours + competitors) |
| 27 | - Reddit threads in relevant subreddits |
| 28 | - Twitter/X complaints or praise |
| 29 | - Support tickets or NPS comments (paste or file) |
| 30 | - Competitor ads (Meta + Google) |
| 31 | 5. **Any angles you've already tested?** — So we can skip those |
| 32 | |
| 33 | ## Phase 1: Source Collection |
| 34 | |
| 35 | ### 1A: Review Mining (Apify) |
| 36 | |
| 37 | Use the Apify Amazon Reviews Scraper (or web_search for G2/Capterra/TrustRadius reviews). |
| 38 | |
| 39 | **Option 1: Amazon product reviews via Apify** |
| 40 | |
| 41 | Start a run of the `web_wanderer/amazon-reviews-extractor` actor: |
| 42 | |
| 43 | ``` |
| 44 | POST https://api.apify.com/v2/acts/web_wanderer~amazon-reviews-extractor/runs?token=$APIFY_API_TOKEN |
| 45 | Content-Type: application/json |
| 46 | |
| 47 | { |
| 48 | "products": [ |
| 49 | "https://www.amazon.com/dp/PRODUCT_ASIN" |
| 50 | ], |
| 51 | "maxReviews": 100 |
| 52 | } |
| 53 | ``` |
| 54 | |
| 55 | Poll until the run finishes: |
| 56 | |
| 57 | ``` |
| 58 | GET https://api.apify.com/v2/acts/web_wanderer~amazon-reviews-extractor/runs/{RUN_ID}?token=$APIFY_API_TOKEN |
| 59 | ``` |
| 60 | |
| 61 | When `status` is `SUCCEEDED`, fetch results: |
| 62 | |
| 63 | ``` |
| 64 | GET https://api.apify.com/v2/datasets/{DATASET_ID}/items?token=$APIFY_API_TOKEN |
| 65 | ``` |
| 66 | |
| 67 | **Output fields:** Each review has `rating` (1-5), `reviewTitle`, `reviewText`, `reviewDate`, `verifiedPurchase` (bool), `productAsin`, `productTitle`, `helpfulVoteCount`. |
| 68 | |
| 69 | **Option 2: G2/Capterra/TrustRadius reviews via web_search** |
| 70 | |
| 71 | For B2B products, run web searches to find review content: |
| 72 | |
| 73 | ``` |
| 74 | web_search: "<product_name> reviews site:g2.com" |
| 75 | web_search: "<product_name> reviews site:capterra.com" |
| 76 | web_search: "<product_name> reviews site:trustradius.com" |
| 77 | web_search: "<competitor_name> reviews site:g2.com" |
| 78 | ``` |
| 79 | |
| 80 | Focus on: |
| 81 | - **1-2 star reviews of competitors** — Pain they're failing to solve |
| 82 | - **4-5 star reviews of you** — Outcomes that delight buyers |
| 83 | - **4-5 star reviews of competitors** — Strengths you need to counter or match |
| 84 | - **Review language patterns** — Exact phrases buyers use |
| 85 | |
| 86 | ### 1B: Reddit/Community Mining (Apify) |
| 87 | |
| 88 | Use the `trudax/reddit-scraper-lite` actor to search Reddit for relevant threads: |
| 89 | |
| 90 | **Search by keyword:** |
| 91 | ``` |
| 92 | POST https://api.apify.com/v2/acts/trudax~reddit-scraper-lite/runs?token=$APIFY_API_TOKEN |
| 93 | Content-Type: application/json |
| 94 | |
| 95 | { |
| 96 | "searches": [ |
| 97 | "<product category> OR <competitor> OR <pain keyword>" |
| 98 | ], |
| 99 | "maxItems": 50 |
| 100 | } |
| 101 | ``` |
| 102 | |
| 103 | **Browse a specific subreddit:** |
| 104 | ``` |
| 105 | POST https://api.apify.com/v2/acts/trudax~reddit-scraper-lite/runs?token=$APIFY_API_TOKEN |
| 106 | Content-Type: application/json |
| 107 | |
| 108 | { |
| 109 | "startUrls": [ |
| 110 | {"url": "https://www.reddit.com/r/SUBREDDIT_NAME/hot/"} |
| 111 | ], |
| 112 | "maxItems": 50 |
| 113 | } |
| 114 | ``` |
| 115 | |
| 116 | Poll until complete: |
| 117 | |
| 118 | ``` |
| 119 | GET https://api.apify.com/v2/acts/trudax~reddit-scraper-lite/runs/{RUN_ID}?token=$APIFY_API_TOKEN |
| 120 | ``` |
| 121 | |
| 122 | Fetch results when `status` is `SUCCEEDED`: |
| 123 | |
| 124 | ``` |
| 125 | GET https://api.apify.com/v2/datasets/{DATASET_ID}/items?token=$APIFY_API_TOKEN |
| 126 | ``` |
| 127 | |
| 128 | **Output fields:** Each item has `dataType` ("post" or "comment"), `title` (posts only), `body`, `communityName`, `upVotes`, `numberOfComments` (posts), `url`, `createdAt`. |
| 129 | |
| 130 | Extract: |
| 131 | - Questions people ask before buying |
| 132 | - Complaints about current solutions |
| 133 | - "I wish [product] would..." statements |
| 134 | - Comparison threads (vs discussions) |
| 135 | |
| 136 | ### 1C: Twitter/X Mining (web_search) |
| 137 | |
| 138 | Use web_search to find relevant Twitter/X posts — no scraper or credentials needed: |
| 139 | |
| 140 | ``` |
| 141 | web_search: "<competitor> (frustrating OR broken OR hate) site:x.com" |
| 142 | web_search: "<competitor> (love OR switched to OR replaced) site:x.com" |
| 143 | web_search: "<product category> (recommendati |