Extract leads from developer forums (Hacker News, Reddit) by detecting intent signals — alternative seeking, competitor pain, scaling challenges, DIY solutions, and migration intent. Scores users by intent strength and cross-platform presence.
npx gooseworks install --all # then, in Claude Code, Cursor, or Codex: /gooseworks use the community-signals skill
Extract high-intent leads from developer community forums by detecting buying signals in public discussions. Currently supports Hacker News and Reddit.
requests and optionally python-dotenv.env (for Reddit scraping)Ask the user for the following. Do NOT proceed without this — the entire query generation depends on it.
"To find the right leads from developer communities, I need to understand:
- What does your product do? (one-liner)
- Who are your competitors? (list the main ones)
- What specific problems does your product solve? (the pain points)
- Who is your ideal buyer? (role, company type, tech stack)
- Any specific technologies or keywords associated with your space?"
If the user has already provided this context (e.g., from running the github-repo-signals skill), use that — don't ask again.
Based on the user's product info, generate 3-5 search queries per category. These are the fixed categories — do not skip any:
Category 1: Alternative Seeking (intent score: 9) People actively looking to switch tools.
Category 2: Competitor Pain (intent score: 8) People frustrated with a specific competitor.
Category 3: Problem Space Questions (intent score: 6) People trying to solve the exact problem the product addresses.
Category 4: Tool Comparison (intent score: 8) People actively comparing options — in buying mode.
Category 5: DIY / Built Own Solution (intent score: 9) People who built a custom solution — validated the need, would pay for a proper product.
Category 6: Scaling Challenges (intent score: 7) People hitting limits that the product solves.
Category 7: Migration Intent (intent score: 9) People who have already decided to leave — looking for where to go.
Category 8: Budget / Pricing Pain (intent score: 7) Cost is the trigger — open to cheaper or better-value alternatives.
Category 9: Feature Gap Complaints (intent score: 7) Needs something their current tool doesn't do — and the user's product does.
Do a web search to find subreddits where the user's ICP is active. Search for:
Common developer subreddits to consider (pick the relevant ones):
Select 5-10 subreddits most relevant to the user's space.
Present ALL generated queries to the user in a structured table:
Category | Queries
--------------------------|------------------------------------------
Alternative Seeking | "twilio alternative", "agora alternative", ...
Competitor Pain | "twilio issues", "frustrated with agora", ...
... | ...
Subreddits to scan: r/webdev, r/VOIP, r/programming, ...Ask:
"Here are the search queries I've generated. Would you like to:
- Run with these as-is
- Add or remove specific queries
- Add or remove subreddits
Estimated cost: HN is free. Reddit via Apify will cost approximately $[estimate based on query count x ~$0.05 per query]."
Wait for user approval before proceeding.
Once approved, save the queries as a JSON file:
cat > ${CLAUDE_SKILL_DIR}/../.tmp/community_queries.json << 'QUERIESEOF'
{
"product": "Product Name",
"queries": [
{"category": "alternative_seeking", "query": "twilio alternative"},
{"category": "alternative_seeking", "query": "agora alternative"},
{"category": "competitor_pain", "query": "twilio video quality issues"}
],
"subreddits": ["r/webdev", "r/VOIP", "r/programming"]
}
QUERIESEOFpython3 -c "import requests; print('OK')"python3 ${CLAUDE_SKILL_DIR}/scripts/community_signals.py \
--queries ${CLAUDE_SKILL_DIR}/../.tmp/community_queries.json \
--days 30 \
--max-reddit-posts 50 \
--max-reddit-comments 20 \
--output ${CLAUDE_SKILL_DIR}/../.tmp/community_signals.csvThe tool will:
_users.csv and _signals.csvOptional flags:
--skip-reddit — only search HN (free, for testing)--skip-hn — only search Reddit--days 7 — narrower time window for very fresh signalsRead the output CSV files and present a structured briefing:
9a. Overall Stats
9b. Signal Category Breakdown
9c. Top Subreddits Discovered
9d. Highest-Intent Users
9e. Common Themes
Based on findings + user's product context:
If strong signals found (>50 high-intent users):
If cross-platform matches found:
If specific subreddits emerged as hotspots:
If "alternative seeking" or "migration intent" signals dominate:
If "DIY / built own" signals found:
Always include:
"Would you like me to:
- Enrich the top [N] users via SixtyFour (estimated cost: $X)
- Run a deeper scan on the hotspot subreddits
- Export this data for manual review first
- Combine these results with GitHub signals data (if available)"
Wait for user confirmation.
community_signals_users.csv — One row per unique user across all platforms
| Column | Description |
|---|---|
| username | Forum username |
| platform | hackernews or reddit |
| composite_score | Overall lead score (intent + diversity + cross-platform) |
| intent_score | Sum of category-weighted intent scores |
| signal_count | Number of matching posts/comments |
| categories | Which signal categories they appeared in |
| platforms_active | Which platforms they were found on |
| subreddits | Reddit subreddits they posted in |
| hn_karma | HN karma score (HN users only) |
| hn_bio | HN profile bio (HN users only) |
| total_engagement | Sum of upvotes + comments across their signals |
| first_seen | Earliest matching post/comment |
| latest_seen | Most recent matching post/comment |
| sample_url | Link to one of their matching posts |
community_signals_signals.csv — One row per matching post/comment
| Column | Description |
|---|---|
| platform | hackernews or reddit |
| author | Username |
| category | Signal category code |
| category_label | Human-readable category name |
| content_type | story, comment, or post |
| title | Post/story title |
| text | Post/comment body (truncated) |
| subreddit | Reddit subreddit (if applicable) |
| score | Upvotes |
| num_comments | Comment count |
| created_at | Date posted |
| query_matched | Which search query found this |
| url | Permalink to the post/comment |
Intent scores by category:
| Category | Score per Signal |
|---|---|
| Alternative Seeking | 9 |
| DIY / Built Own | 9 |
| Migration Intent | 9 |
| Competitor Pain | 8 |
| Tool Comparison | 8 |
| Scaling Challenge | 7 |
| Budget / Pricing | 7 |
| Feature Gap | 7 |
| Problem Space | 6 |
Composite score bonuses:
| Platform | Cost | Notes |
|---|---|---|
| Hacker News | Free | Algolia API, 10k req/hr |
| Reddit (Apify) | ~$0.004/result + $0.04/run | Pay per result |
| Typical run (45 queries) | ~$5-10 total | HN free + Reddit ~$5-10 |
created_at timestamps.Render a 'model comparison grid' video from a config — a fal-style "same prompt, N contenders" showcase — a dark real-DOM stage where per beat a monospace prompt fades in centered, docks to a small top strip, then a labeled 2-4 panel grid (static images OR muted video clips, mixable per cell) staggers in and holds for comparison, plus a minimal end card — frame-stepped via Playwright (video cells are frame-seeked deterministically) and encoded with FFmpeg. Deterministic assembly, FREE (cell media comes from create-image-fal / create-video-fal, music from create-music-elevenlabs), text stays pixel-crisp. Use for the model-comparison-grid format.
Render a punchy ~12s vertical (9:16) music-only direct-response OFFER ad as a 4-beat kinetic-typography film — HEADLINE slam → real PRODUCT drop → CLAIM/proof → CTA pill — from one config of copy slots, a real product photo, a brand palette, fonts, bpm, and beat split. DETERMINISTIC + FREE (a bundled Remotion project; springs + interpolate, no AI-gen for visuals). Backgrounds are engine gradient divs off the palette, props are inline SVG, the ONLY composited bitmap is the REAL product photo (objectFit:contain, never stretched), and ALL headline/claim/CTA/URL/wordmark text is typeset in the engine — never AI-rendered (the format's credibility guard). A driver binds the config to Remotion input props, renders the 9:16 master, and derives a 1:1 center-crop with ffmpeg. Two gating checks run before render (claim verbs must match the product's physical format; the claim beat needs an edge-entry mechanism prop). Use for the motion-graphics-offer-ad format.
Assemble a myth-vs-fact kinetic-typography explainer video ad (≈29.5s, 9:16) from N myth/fact pairs + hook / turn / punch copy + palette + a brand end-card PNG + a VO track — a hook, 3 red-strike MYTH cards that flip to teal-check FACT cards (per-line strikethrough that crosses EVERY wrapped line), a "what actually works" turn, an optional proof reveal, a punch line, and a static end card. DETERMINISTIC assembly with ZERO AI-gen visuals — HTML hyperframes rendered frame-exact via Playwright (`window.renderAt(t)`, animation a pure function of beat-local time), Whisper beat-snap to VO word onsets, concat at a uniform fps, karaoke `.ass` captions burned last (suppressed on the proof + end-card beats), and a VO + optional music mix (music −20 dB, `amix normalize=0`, tail fade). FREE (Python + Playwright + ffmpeg); the recipe supplies the copy / palette / end-card / VO and gates the paid VO / music / Whisper calls to their own capabilities. Use for the myth-vs-fact format.