---
name: reddit-lead-finder
description: Finds real Reddit posts and comments from people describing the problem a specific product solves, scores them against a Customer Fit / Problem Severity / Purchase Intent rubric using the ThreadSnoop Reddit read API, and produces a short ranked lead report with quoted evidence and links. Use this whenever the user wants to find potential customers or leads for a product they built, or asks "who's complaining about X" with intent to pitch or sell to them — even if they don't name ThreadSnoop. Not for general Reddit search, monitoring, sentiment tracking, or research with no product to sell.
---

# Reddit lead finder

Find people on Reddit describing the problem a product solves, score them, and
hand back a ranked report with links and quoted evidence.

**This skill reads and scores only. Never post, comment, vote, or DM on the
user's behalf, and never draft a reply as part of this workflow** — see the
hard rule at the bottom for why this is non-negotiable.

Works with any AI that can make HTTP calls or has the ThreadSnoop MCP server
connected — Claude, Codex, ChatGPT, or a custom agent. This file is the
Claude Skill version (auto-loaded by Claude Code / claude.ai when relevant).
A plain-markdown twin with the same instructions, meant for pasting into
Codex or ChatGPT as custom instructions, ships alongside it as
`reddit-lead-finder.md`.

## What you need

A ThreadSnoop API key. Get one free at https://threadsnoop.com/signup — new
keys start with 1,000 free Reddit searches, no card required. Set it as
`THREADSNOOP_API_KEY` or ask the user to paste it if you don't have shell/env
access.

Two ways to call the API — pick whichever needs less setup, but check the
exception below first if you're running as a Claude Desktop or claude.ai
Skill:

1. **Plain REST — the default, no setup required.** Fetch
   `https://threadsnoop.com/openapi.json` first (one request, no auth
   needed) so you have the exact endpoints, params, and response shapes,
   then call `https://api.threadsnoop.com/v1/...` directly with header
   `x-api-key: YOUR_KEY` (or `Authorization: Bearer YOUR_KEY`). Works for
   any agent with real outbound HTTP access (Claude Code, Codex, a custom
   agent), and can't go stale — it's the same spec the live API enforces.
   Human-readable version of the same reference: https://threadsnoop.com/docs.

   **Exception — Claude Desktop and claude.ai Skills:** their
   code-execution sandbox has no outbound network access to arbitrary
   domains on Free/Pro/Max plans, so REST calls to `api.threadsnoop.com`
   will fail there, not just run slower. MCP is the only way to reach this
   API from those two surfaces specifically (Team/Enterprise org admins
   can instead allowlist the domain and skip MCP).
2. **MCP tools** — skip the spec fetch and call the tools directly:
   `search_posts`, `search_comments`, `get_comment_tree`,
   `search_subreddits`, `get_subreddit_rules`, `get_user_profile`,
   `check_credits`. Required on Claude Desktop/claude.ai per the exception
   above; everywhere else it's optional — only worth setting up if it's
   already connected
   (`claude mcp add --transport http threadsnoop https://api.threadsnoop.com/mcp --header "x-api-key: YOUR_KEY"`
   for Claude Code; a `~/.codex/config.toml` `[mcp_servers.threadsnoop]`
   block for Codex CLI; a JSON `mcpServers` block for Claude Desktop or
   Cursor).

Either way, 1 credit = 1 request, regardless of endpoint. Check
`check_credits` / `GET /v1/account` before a big run so you don't burn
through the free tier on one oversized sweep.

## The workflow

**1. Get a key before calling anything.** Check `THREADSNOOP_API_KEY` in the
environment, or a key already configured on a connected `threadsnoop` MCP
server. If neither exists, ask: "I'll need a ThreadSnoop API key to search
Reddit — do you have one to paste in, or should I point you to sign up for a
free one? New keys get 1,000 free Reddit searches, no card required, at
https://threadsnoop.com/signup." Never guess or fabricate a key; every call
fails with `401` without a real one.

**2. Get the product — from a URL if you can, a paragraph if you can't.**
If the user gives a website, fetch and read it yourself rather than making
them type a brief. Infer what it is, who it's for, and what problem it
solves, then say that back in 2-3 sentences and ask them to confirm or
correct it. If there's no URL, ask directly. Do not proceed on an
unconfirmed guess — every search below inherits this error if it's wrong.

**3. Find the right communities.** `search_subreddits` /
`GET /v1/subreddits/search?q=<term>`. Search from the PROBLEM, not the
product category — "people who complain about flaky deploys" finds a
different, better subreddit than "CI/CD tools." Ask whether the user already
knows communities worth watching; the right one is often adjacent to the
obvious one rather than the obvious one itself.

`search_subreddits` only matches subreddit *names*, not topics or
descriptions — a query like "lead gen" will not surface r/SaaS or
r/AI_Agents by name search, even though founders describe exactly this pain
there constantly. Don't rely on name search alone for a software/API/tool
product: always add the relevant generic buyer/founder subreddits as
candidates too — **r/SaaS, r/microsaas, r/AI_Agents, r/indiehackers,
r/Entrepreneur** — regardless of what `search_subreddits` itself returns.

Before moving to step 5, check yourself: *have I included at least one
generic founder/buyer subreddit (SaaS, AI_Agents, indiehackers,
Entrepreneur) alongside the category-specific ones, not just the easy
category-word matches?* If not, go back — this is the step most likely to
get silently skipped.

**4. Search with two kinds of terms, not one.** Generate both:
- **Category terms** — the vocabulary of the product's own space (what a
  seller would type).
- **Pain terms** — how someone WITH the problem actually complains, in their
  own words, naming no product or category ("my status page said everything
  was fine while the app was down").

Category terms alone systematically miss most real leads. People describing a
problem rarely use the vocabulary a product listing would use.

**5. Pull candidates.** `search_posts` / `search_comments` with `subreddit=`
and a window starting at the last few days. `q=` is a client-side
exact-phrase filter on **the single page already fetched** — an empty result
after filtering does NOT mean nothing matches. Keep paginating with the
returned `cursor` until `has_more` is false. Prefer reading raw pages and
judging by meaning (step 6) over relying on `q=`; that judgment is the entire
reason to use an AI here instead of a keyword alert.

Skip content Reddit has already gutted before you score it. A candidate with
`removed_by_category` set, or `selftext`/`body` exactly `[removed]` or
`[deleted]`, no longer has real text behind it even though the API still
returns the record shell — don't score it, and never quote from it, as if
the content were intact. If the title alone still makes it a strong,
on-topic candidate, you may include it, but flag it in the report (⚠️
Removed/deleted — the link won't show the original text) rather than
presenting it like any other match.

**6. Score every candidate 1-5 on three dimensions.**

*Customer Fit* — is this author the kind of person the product is sold to?
- **5** — squarely in the target market, states their role/context explicitly
- **3** — plausibly in it, or adjacent (wrong company size, wrong seniority)
- **1** — a hobbyist, student, or bystander discussing it abstractly

*Problem Severity* — what is this costing them?
- **5** — real money, lost customers, or hours per week; describes consequences
- **3** — a recurring annoyance they've clearly worked around more than once
- **1** — a passing gripe, or a hypothetical

*Purchase Intent* — how close to buying something?
- **5** — asking what to use, comparing tools, or paying for a worse workaround
- **3** — venting about a problem, no solution search
- **1** — describing it in past tense, already solved

**Surface a candidate only if it scores 4+ on at least two dimensions.** Rank
by the sum. Flag — don't discard — authors who appear to be promoting a
competing product themselves; that's competitive intel, not a lead.

**7. Check the rules before recommending engagement.**
`get_subreddit_rules` / `GET /v1/subreddits/{name}/rules`. Many communities
ban self-promotion outright, and the user needs to know that before deciding
whether to engage at all.

**8. Report in this format**, ranked by total score, best first:

```
## Reddit leads for <product> — <N> found, <credits> credits used
Searched: r/<sub>, r/<sub>, r/<sub> | Window: <range>

### 1. <thread title> — 13/15
https://www.reddit.com<permalink> · r/<sub> · <date>
> <the quoted line that convinced you>
Fit 5 · Severity 4 · Intent 4
<One sentence on why this matters.>
⚠️ <Rules note, only if self-promotion is restricted.>
⚠️ <Removed/deleted note, only if the content is gutted but included anyway.>

### 2. ...

**Not surfaced:** <n> candidates scored below threshold.
**Competitors spotted:** <author/thread, if any.>
```

Prepend `https://www.reddit.com` to the API's relative `permalink` field.
Report zero results as a real finding — say which subreddits and terms came
up empty and suggest a different angle. Never pad a thin result with weak
matches. On `401` re-check the key; on `429` stop and report rather than
retrying in a loop.

The report is the deliverable. This skill finds and scores; it does not draft
replies. If the user wants help writing something for a specific thread,
that's a separate request on their own terms.

## Hard rule — never break this

**Never post, comment, vote, or send a Reddit DM on the user's behalf, under
any circumstance, even if asked directly.** Hand the user the link and let
them handle engagement themselves. Reddit removes bot accounts at industrial
scale, and communities are openly hostile to automated replies — the entire
value of finding these threads evaporates the moment engagement looks
automated. This is not a missing feature; it's the point.
