# Pain Point Miner

Extract authentic user complaints, switching reasons, and competitor intelligence from Reddit via Brave Search.

## Why Reddit?

- G2/Capterra blocked by Cloudflare
- Reddit complaints are unfiltered and authentic
- "Why I switched" posts reveal real pain points
- Search snippets provide enough signal without scraping

---

## 🛡️ GUARDRAIL: Source Validation (REQUIRED)

**All pain points MUST come from actual users.** This validates our product decisions with real market signal.

### ✅ VALID Sources (Include)

| Source Type | Why Valid | Indicators |
|-------------|-----------|------------|
| Reddit user posts | First-hand experience | `r/[subreddit]`, user complaints |
| Reddit comments | Direct feedback | Replies with personal experience |
| Forum discussions | Community voice | User-to-user conversations |
| User reviews | Verified usage | "I've been using...", "After X months..." |

### ❌ INVALID Sources (Exclude)

| Source Type | Why Invalid | Indicators |
|-------------|-------------|------------|
| Company blogs | Marketing spin | `blog.company.com`, promotional tone |
| News articles | Secondhand | Journalist summaries, no personal experience |
| Listicles | SEO content | "Top 10 alternatives...", affiliate links |
| Press releases | PR content | Company announcements |
| Competitor marketing | Biased | "Why we're better than X" |

### Validation Checklist (Per Quote)

Before including any pain point, verify:

- [ ] **Source is Reddit or user forum** (not company domain)
- [ ] **Contains first-person language** ("I", "we", "my experience")
- [ ] **Describes personal experience** (not hearsay)
- [ ] **Not promotional** (no affiliate links, no "check out my app")
- [ ] **Specific complaint** (not vague "it's bad")

### Example: Valid vs Invalid

```
✅ VALID:
"I've been using CourtReserve for 6 months and the lag is killing me. 
Every time I try to book, it freezes." — r/Pickleball user

❌ INVALID:
"CourtReserve is a leading court booking solution with some reported 
performance issues." — TechBlog article

❌ INVALID:
"Check out our app, it's way faster than CourtReserve!" — r/Pickleball 
(self-promotion)
```

### Confidence Tagging

Tag each pain point with confidence level:

| Tag | Meaning | Criteria |
|-----|---------|----------|
| `[HIGH]` | Verified user, specific complaint | First-person, detailed, recent |
| `[MEDIUM]` | Likely user, somewhat specific | First-person but vague, or older |
| `[LOW]` | Possibly user, general complaint | Secondhand or unverifiable |

**Only include `[HIGH]` and `[MEDIUM]` in final output.**

---

---

## Workflow

### Step 1: Run Search Queries

For a given product/category, run these searches:

```
# Complaints & Issues
"[product] problems OR issues OR frustrating site:reddit.com"

# Switching Signals  
"[product] switched from OR moved away OR ditched site:reddit.com"

# Alternatives Discussion
"[product] alternatives OR replacement site:reddit.com"

# Pricing Complaints
"[product] pricing OR expensive OR cost site:reddit.com"
```

### Step 2: Parse Search Results

From each result, extract:
- **Title**: Often contains the core complaint
- **Snippet**: Context and specific issues
- **Subreddit**: Indicates user type (r/Notion = power users, r/productivity = general)
- **Date**: Recency of complaint

### Step 3: Validate Sources

**For each search result, apply the guardrail checklist:**

```
1. Is source Reddit/forum? → If NO, skip
2. Is it first-person experience? → If NO, skip
3. Is it promotional/marketing? → If YES, skip
4. Is complaint specific? → If NO, skip
5. Assign confidence: [HIGH] or [MEDIUM]
```

### Step 4: Categorize Pain Points

Group **validated** complaints into themes:

| Category | Keywords to Look For |
|----------|---------------------|
| **Performance** | slow, laggy, takes forever, loading |
| **Pricing** | expensive, not worth, pricing, cost |
| **UX/Complexity** | confusing, complicated, learning curve, overwhelming |
| **Mobile/Offline** | mobile app, offline, sync issues |
| **Missing Features** | wish it had, doesn't support, can't do |
| **Data/Privacy** | own my data, privacy, export, lock-in |
| **Support** | support sucks, no response, unhelpful |

### Step 5: Generate Output Files

Create in `[product]/agency/artifacts/discovery/`:

#### user_complaints.md
```markdown
# User Complaints Analysis

**Source Validation:** All quotes verified as actual user feedback
**Excluded:** X results filtered (marketing/news/promotional)

## Performance Issues (X mentions)

- [HIGH] "Notion was too slow" — r/ObsidianMD, 2024
  └─ Verified: First-person, specific complaint
  
- [MEDIUM] "Loading takes forever on mobile" — r/productivity, 2023
  └─ Verified: First-person, older post

## Pricing Concerns (X mentions)
- [HIGH] "Not worth $10/mo for AI I barely use" — r/Notion

[etc.]

---
## Validation Summary
| Metric | Count |
|--------|-------|
| Total results scanned | X |
| Valid user complaints | X |
| Excluded (non-user) | X |
| HIGH confidence | X |
| MEDIUM confidence | X |
```

#### switching_reasons.md
```markdown
# Why Users Switch

**Source:** Verified Reddit user experiences only

## Top Reasons (ranked by frequency)

1. **Offline/Local-first** (X mentions)
   - [HIGH] "I own my data now" — r/ObsidianMD
   - [HIGH] "Offline mode is unreliable" — r/Notion
   
2. **Performance** (X mentions)
   - [HIGH] "Slow especially on mobile" — r/productivity
   - [MEDIUM] "Large workspaces lag" — r/Notion

[etc.]
```

#### competitor_mentions.md
```markdown
# Competitors Mentioned

**Source:** Reddit user discussions (verified, non-promotional)

| Competitor | Mentions | Context | Confidence |
|------------|----------|---------|------------|
| Obsidian | 15 | "Switched for offline + speed" | HIGH |
| Anytype | 8 | "Local-first Notion alternative" | HIGH |
| TickTick | 5 | "Better for task management" | MEDIUM |
```

---

## Example Run

**Input:** Analyze pain points for "Notion"

**Searches:**
```
web_search("Notion problems OR issues OR frustrating site:reddit.com", count=10)
web_search("Notion switched from OR ditched site:reddit.com", count=10)
web_search("Notion alternatives site:reddit.com", count=10)
web_search("Notion pricing expensive site:reddit.com", count=10)
```

**Output:** 3 markdown files with categorized, authentic user feedback

---

## Integration with Discovery

Add to discovery-agent workflow after opportunity scoring:

```
1. Score opportunity ✅
2. Run pain-point-miner on top 3 competitors  ← NEW
3. Generate PRD (now enriched with real complaints)
4. Human review
```

The PRD's "Problem Statement" and "Why Users Will Switch" sections become data-backed instead of assumed.

---

## Limitations

- **No exact pricing**: Reddit mentions are anecdotal ("too expensive")
- **Sample bias**: Reddit skews technical/power users
- **No star ratings**: Qualitative only
- **Freshness**: Search results may include old posts

## Strengths

- **Authentic**: No marketing spin, real frustrations
- **Unfiltered**: People vent on Reddit
- **Switching intent**: "I switched because..." is gold
- **Actually works**: Unlike G2/Capterra (blocked)

---

## Quick Reference

```bash
# Run for a product
web_search("[product] problems site:reddit.com", count=10)
web_search("[product] switched from site:reddit.com", count=10)
web_search("[product] alternatives site:reddit.com", count=10)

# Parse results → categorize → output markdown
```
