Ad Angle Miner
Composite: mine reviews + community + social + competitor ads → tag into angle categories → score & rank → angle bank. Mining of public sources is driven by the agent's web search (keyless, Robomotion Proxy); bundled scripts cover the competitor-ad scrape and the hostile-source Apify fallback. The angle extraction, scoring, ranking, and the bank itself are the agent's reasoning — no LLM call lives in a script.
When to use
- "What angles should we run in our ads?" / "Find pain language for ad copy."
- "What are people complaining about with
<competitors>?" - "Mine reviews for ad messaging" / "I need fresh angles, not the same tired stuff."
How to run
One-time browser setup (for the competitor-ad scrape):
cd ${SKILL_DIR}/scripts && npm install && npx playwright install chromium
1 — Mine public customer voice (you, the agent — keyless)
Drive these via web search (Robomotion Proxy + geo), then read the pages. SERP path: if
DATAFORSEO_LOGIN/DATAFORSEO_PASSWORD (or SERPER_API_KEY) is set → use that structured
SERP API for higher coverage/precision; if not → the agent's keyless web search (default).
- Reviews —
site:g2.com/site:capterra.com/site:trustpilot.com "<competitor> reviews"; pull 1–2★ competitor pain + 4–5★ outcome language. - Community —
site:reddit.com "<category>", "I wish", "switching from", pre-buy questions. - Social —
site:x.com/site:linkedin.com/postsfrustration + praise about the category and competitors.
2 — Hostile / volume sources (optional Apify fallback)
When a source blocks search depth (Reddit at depth, Amazon reviews, volume review sites):
if APIFY_API_TOKEN is set → use the Apify actor (better depth on hostile/volume
sources); if not → degrade to site: web search over public pages (default). Apify
runner:
python3 ${SKILL_DIR}/scripts/apify_run.py --actor "trudax~reddit-scraper" \
--input '{"searches":["uipath alternative"],"maxItems":80}' --output ${WORKSPACE}/reddit.json
Without APIFY_API_TOKEN, degrade Reddit/Amazon mining to site: search over public pages
and note the reduced depth.
3 — Competitor ads (Meta Ad Library)
node ${SKILL_DIR}/scripts/scrape_meta_ads.mjs --query "UiPath" --country US --max-ads 60 --output ${WORKSPACE}/meta_uipath.json
This tells you which angles are validated (long-running), tested, or absent. If Meta blocks
the scrape, fall back to a site:facebook.com/ads/library search and lower the "freshness"
confidence for that competitor.
4 — Ingest provided internal VoC (optional)
If the user pastes/attaches support tickets, NPS, or call notes, read them in as additional evidence (the agent ingests directly; for PDFs/docs use the platform's document reader).
5 — Extract, score, rank (you, the agent)
Tag every snippet into angle categories — Pain / Outcome / Identity / Fear / Displacement
/ Social-proof / Contrast — attaching 2–5 verbatim, attributed quotes each (never
fabricate sources; drop angles with zero retrievable proof to Tier 3). Score each angle:
evidence 30 / emotional intensity 25 / differentiation 20 / ICP relevance 15 / freshness
10. Exclude any tested_angles the user already ran. Build the competitive angle map
(validated vs. tested vs. absent per competitor) and a test plan. Tier: 1 ≥70, 2 50–69,
3 <50.
6 — Render
Write angle-bank-<YYYY-MM-DD>.md to ${WORKSPACE} and attach to the Agent Teams channel.
Outputs
angle-bank-<YYYY-MM-DD>.md — tiered ranked angles, each with category, score, emotional
register, 2–5 proof quotes + source, source count, competitor weakness, recommended format,
sample headline/body; plus a competitive angle map and a test plan.
Credentials / env
- Required: none — public mining runs on web search + the keyless Meta scraper; the extraction/scoring/ranking is the agent's reasoning (no LLM key in scripts).
- Optional (each with a keyless default fallback):
APIFY_API_TOKEN— if set → Apify Reddit/Amazon/review-site actor for hostile/volume depth; else →site:web search + the Playwright Meta scraper (default).DATAFORSEO_LOGIN/DATAFORSEO_PASSWORD(orSERPER_API_KEY) — if set → structured SERP API for the mining queries; else → the agent's keyless web search (default).HTTPS_PROXY— Robomotion Proxy for the Meta scraper and SERP mining.
Notes & edge cases
- Always lead with web search + Robomotion Proxy/geo; reserve Apify for sites that block it.
- Quotes must be verbatim and attributed — drop unprovable angles to Tier 3, don't invent.
- Meta Ad Library is JS-heavy and anti-bot — throttle, randomize, proxy; degrade to
site:snippets if blocked and lower the freshness confidence. - Dedup near-identical angles before ranking so the bank isn't padded with restatements.