Reddit Insights
Overview
Perform semantic research across Reddit to extract actionable insights. Search for discussions, analyze sentiment patterns, identify recurring pain points, validate product ideas, and discover niche opportunities. Uses Reddit's public JSON API to access posts and comments without requiring authentication.
Instructions
When a user asks you to research Reddit for insights, follow these steps:
Step 1: Define the research scope
Clarify with the user:
- Topic/query: What subject, product, or idea to research
- Subreddits (optional): Specific subreddits to focus on, or search broadly
- Time range: Recent (week/month) or historical (year/all)
- Research goal: Pain points, sentiment, idea validation, competitor analysis, or trend discovery
- Output format: Summary report, raw data, or structured analysis
Step 2: Fetch Reddit data via public JSON API
Access Reddit's public JSON endpoints without authentication:
import requests
import time
HEADERS = {"User-Agent": "research-bot/1.2.0"}
def search_reddit(query, subreddit=None, sort="relevance", time_filter="year", limit=100):
"""Search Reddit posts via public JSON API."""
if subreddit:
url = f"https://www.reddit.com/r/{subreddit}/search.json"
params = {"q": query, "sort": sort, "t": time_filter,
"limit": min(limit, 100), "restrict_sr": "on"}
else:
url = "https://www.reddit.com/search.json"
params = {"q": query, "sort": sort, "t": time_filter,
"limit": min(limit, 100)}
response = requests.get(url, headers=HEADERS, params=params, timeout=30)
response.raise_for_status()
time.sleep(1) # Rate limiting
data = response.json()
posts = []
for child in data["data"]["children"]:
post = child["data"]
posts.append({
"title": post["title"],
"selftext": post.get("selftext", ""),
"subreddit": post["subreddit"],
"score": post["score"],
"num_comments": post["num_comments"],
"url": f"https://reddit.com{post['permalink']}",
"created_utc": post["created_utc"],
})
return posts
def get_post_comments(permalink, limit=200):
"""Fetch comments for a specific post."""
url = f"https://www.reddit.com{permalink}.json"
params = {"limit": limit, "sort": "top"}
response = requests.get(url, headers=HEADERS, params=params, timeout=30)
response.raise_for_status()
time.sleep(1)
comments = []
data = response.json()
if len(data) > 1:
for child in data[1]["data"]["children"]:
if child["kind"] == "t1":
c = child["data"]
comments.append({
"body": c["body"],
"score": c["score"],
"author": c.get("author", "[deleted]"),
})
return comments
Step 3: Analyze the content
Process the collected posts and comments to extract insights:
Pain point extraction:
- Search for phrases like "I wish", "frustrated with", "hate that", "switched from", "biggest problem"
- Group recurring complaints by theme
- Count frequency and upvote weight of each pain point
Sentiment analysis:
- Categorize posts/comments as positive, negative, neutral, or mixed
- Track sentiment trends over time
- Identify polarizing topics
Idea validation:
- Find existing discussions about similar solutions
- Look for "someone should build" or "is there a tool that" posts
- Assess demand signals: upvotes, comment engagement, frequency of asks
Competitive analysis:
- Search for competitor product names
- Analyze praise and criticism patterns
- Identify feature gaps users mention
Step 4: Compile the research report
Structure the output as an actionable report:
# Reddit Research Report: [Topic]
## Research Parameters
- Query: [search terms used]
- Subreddits: [list of subreddits searched]
- Time range: [period]
- Posts analyzed: [count]
- Comments analyzed: [count]
## Key Findings
### Top Pain Points
1. **[Pain point 1]** (mentioned 23 times, avg score: 45)
- Example: "[quoted user comment]"
- Subreddits: r/subreddit1, r/subreddit2
2. **[Pain point 2]** (mentioned 18 times, avg score: 32)
- Example: "[quoted user comment]"
### Sentiment Overview
- Positive: 35% | Neutral: 40% | Negative: 25%
- Most positive aspect: [topic]
- Most negative aspect: [topic]
### Opportunity Signals
- [Unmet need identified from discussions]
- [Feature request pattern observed]
- [Gap in existing solutions mentioned]
### Notable Discussions
1. [Post title](url) - [X] upvotes, [Y] comments
Summary: [brief takeaway]
## Recommendations
- [Actionable recommendation 1]
- [Actionable recommendation 2]
- [Actionable recommendation 3]
Step 5: Save the report
cat > reddit_research_[topic].md << 'EOF'
[compiled report]
EOF
Examples
Example 1: Validate a SaaS idea
User request: "Research Reddit to see if people need a better project management tool for small agencies."
Research approach:
- Search queries: "project management agency", "PM tool freelancer", "manage client projects"
- Target subreddits: r/agency, r/freelance, r/smallbusiness, r/projectmanagement
- Look for: complaints about existing tools, feature wish lists, "what do you use" threads
- Analyze: frequency of complaints, which tools are mentioned negatively, unmet needs
Key findings format:
Pain Points Found:
1. "Asana/Monday are too complex for a 5-person team" (seen 15 times)
2. "No good tool combines project tracking with client invoicing" (seen 9 times)
3. "Switching between 4 tools to manage one project" (seen 12 times)
Validation Signal: MODERATE-STRONG
- Clear demand exists, but space is crowded
- Differentiation opportunity: simplicity + invoicing integration
Example 2: Analyze sentiment around a product launch
User request: "What is Reddit saying about the new Arc browser?"
Research approach:
- Search for "Arc browser" across all subreddits
- Fetch top 50 posts and their comments from the past 3 months
- Categorize sentiment per feature area (UI, speed, extensions, sync)
- Identify most loved and most criticized features
Example 3: Discover underserved niches
User request: "Find underserved developer tool niches by mining Reddit complaints."
Research approach:
- Search r/programming, r/webdev, r/devops for frustration keywords
- Queries: "annoying that", "wish there was", "no good tool for", "why is there no"
- Group complaints by category (testing, deployment, documentation, etc.)
- Rank by frequency and engagement
- Cross-reference with existing tools to identify true gaps
Guidelines
- Always add a 1-second delay between API requests to respect Reddit's rate limits.
- Set a descriptive User-Agent header. Reddit blocks requests without one.
- Reddit's public JSON API has a 100-post limit per request. Use pagination with the
after parameter for larger datasets.
- Do not scrape user profiles or collect personally identifiable information.
- Present findings with context: a single upvoted complaint does not equal a validated market need. Look for patterns across multiple discussions.
- Always include source links so the user can verify findings and read full context.
- Distinguish between vocal minorities and genuine widespread sentiment. A post with 500 upvotes carries more weight than one with 3.
- Note the subreddit context: complaints in r/technology have different implications than those in r/startups.
- For idea validation, look for both demand signals (people wanting a solution) and supply signals (existing tools already addressing the need).
- Save all raw data alongside the analysis so the user can explore further.
- If the public API is rate-limited or returns errors, suggest the user try again after a brief wait.
1---2name: reddit-insights3description: Semantic search across Reddit to find pain points, validate ideas, discover niches, and analyze sentiment. Use when a user asks to research Reddit, find Reddit discussions about a topic, analyze Reddit sentiment, discover what people complain about on Reddit, validate a business idea on Reddit, find pain points in a subreddit, or mine Reddit for product insights.4license: Apache-2.05---67# Reddit Insights89## Overview1011Perform semantic research across Reddit to extract actionable insights. Search for discussions, analyze sentiment patterns, identify recurring pain points, validate product ideas, and discover niche opportunities. Uses Reddit's public JSON API to access posts and comments without requiring authentication.1213## Instructions1415When a user asks you to research Reddit for insights, follow these steps:1617### Step 1: Define the research scope1819Clarify with the user:20- **Topic/query**: What subject, product, or idea to research21- **Subreddits** (optional): Specific subreddits to focus on, or search broadly22- **Time range**: Recent (week/month) or historical (year/all)23- **Research goal**: Pain points, sentiment, idea validation, competitor analysis, or trend discovery24- **Output format**: Summary report, raw data, or structured analysis2526### Step 2: Fetch Reddit data via public JSON API2728Access Reddit's public JSON endpoints without authentication:2930```python31import requests32import time3334HEADERS = {"User-Agent": "research-bot/1.2.0"}3536def search_reddit(query, subreddit=None, sort="relevance", time_filter="year", limit=100):37 """Search Reddit posts via public JSON API."""38 if subreddit:39 url = f"https://www.reddit.com/r/{subreddit}/search.json"40 params = {"q": query, "sort": sort, "t": time_filter,41 "limit": min(limit, 100), "restrict_sr": "on"}42 else:43 url = "https://www.reddit.com/search.json"44 params = {"q": query, "sort": sort, "t": time_filter,45 "limit": min(limit, 100)}4647 response = requests.get(url, headers=HEADERS, params=params, timeout=30)48 response.raise_for_status()49 time.sleep(1) # Rate limiting5051 data = response.json()52 posts = []53 for child in data["data"]["children"]:54 post = child["data"]55 posts.append({56 "title": post["title"],57 "selftext": post.get("selftext", ""),58 "subreddit": post["subreddit"],59 "score": post["score"],60 "num_comments": post["num_comments"],61 "url": f"https://reddit.com{post['permalink']}",62 "created_utc": post["created_utc"],63 })64 return posts656667def get_post_comments(permalink, limit=200):68 """Fetch comments for a specific post."""69 url = f"https://www.reddit.com{permalink}.json"70 params = {"limit": limit, "sort": "top"}71 response = requests.get(url, headers=HEADERS, params=params, timeout=30)72 response.raise_for_status()73 time.sleep(1)7475 comments = []76 data = response.json()77 if len(data) > 1:78 for child in data[1]["data"]["children"]:79 if child["kind"] == "t1":80 c = child["data"]81 comments.append({82 "body": c["body"],83 "score": c["score"],84 "author": c.get("author", "[deleted]"),85 })86 return comments87```8889### Step 3: Analyze the content9091Process the collected posts and comments to extract insights:9293**Pain point extraction:**94- Search for phrases like "I wish", "frustrated with", "hate that", "switched from", "biggest problem"95- Group recurring complaints by theme96- Count frequency and upvote weight of each pain point9798**Sentiment analysis:**99- Categorize posts/comments as positive, negative, neutral, or mixed100- Track sentiment trends over time101- Identify polarizing topics102103**Idea validation:**104- Find existing discussions about similar solutions105- Look for "someone should build" or "is there a tool that" posts106- Assess demand signals: upvotes, comment engagement, frequency of asks107108**Competitive analysis:**109- Search for competitor product names110- Analyze praise and criticism patterns111- Identify feature gaps users mention112113### Step 4: Compile the research report114115Structure the output as an actionable report:116117```markdown118# Reddit Research Report: [Topic]119120## Research Parameters121- Query: [search terms used]122- Subreddits: [list of subreddits searched]123- Time range: [period]124- Posts analyzed: [count]125- Comments analyzed: [count]126127## Key Findings128129### Top Pain Points1301. **[Pain point 1]** (mentioned 23 times, avg score: 45)131 - Example: "[quoted user comment]"132 - Subreddits: r/subreddit1, r/subreddit21331342. **[Pain point 2]** (mentioned 18 times, avg score: 32)135 - Example: "[quoted user comment]"136137### Sentiment Overview138- Positive: 35% | Neutral: 40% | Negative: 25%139- Most positive aspect: [topic]140- Most negative aspect: [topic]141142### Opportunity Signals143- [Unmet need identified from discussions]144- [Feature request pattern observed]145- [Gap in existing solutions mentioned]146147### Notable Discussions1481. [Post title](url) - [X] upvotes, [Y] comments149 Summary: [brief takeaway]150151## Recommendations152- [Actionable recommendation 1]153- [Actionable recommendation 2]154- [Actionable recommendation 3]155```156157### Step 5: Save the report158159```bash160cat > reddit_research_[topic].md << 'EOF'161[compiled report]162EOF163```164165## Examples166167### Example 1: Validate a SaaS idea168169**User request:** "Research Reddit to see if people need a better project management tool for small agencies."170171**Research approach:**1721. Search queries: "project management agency", "PM tool freelancer", "manage client projects"1732. Target subreddits: r/agency, r/freelance, r/smallbusiness, r/projectmanagement1743. Look for: complaints about existing tools, feature wish lists, "what do you use" threads1754. Analyze: frequency of complaints, which tools are mentioned negatively, unmet needs176177**Key findings format:**178```179Pain Points Found:1801. "Asana/Monday are too complex for a 5-person team" (seen 15 times)1812. "No good tool combines project tracking with client invoicing" (seen 9 times)1823. "Switching between 4 tools to manage one project" (seen 12 times)183184Validation Signal: MODERATE-STRONG185- Clear demand exists, but space is crowded186- Differentiation opportunity: simplicity + invoicing integration187```188189### Example 2: Analyze sentiment around a product launch190191**User request:** "What is Reddit saying about the new Arc browser?"192193**Research approach:**1941. Search for "Arc browser" across all subreddits1952. Fetch top 50 posts and their comments from the past 3 months1963. Categorize sentiment per feature area (UI, speed, extensions, sync)1974. Identify most loved and most criticized features198199### Example 3: Discover underserved niches200201**User request:** "Find underserved developer tool niches by mining Reddit complaints."202203**Research approach:**2041. Search r/programming, r/webdev, r/devops for frustration keywords2052. Queries: "annoying that", "wish there was", "no good tool for", "why is there no"2063. Group complaints by category (testing, deployment, documentation, etc.)2074. Rank by frequency and engagement2085. Cross-reference with existing tools to identify true gaps209210## Guidelines211212- Always add a 1-second delay between API requests to respect Reddit's rate limits.213- Set a descriptive User-Agent header. Reddit blocks requests without one.214- Reddit's public JSON API has a 100-post limit per request. Use pagination with the `after` parameter for larger datasets.215- Do not scrape user profiles or collect personally identifiable information.216- Present findings with context: a single upvoted complaint does not equal a validated market need. Look for patterns across multiple discussions.217- Always include source links so the user can verify findings and read full context.218- Distinguish between vocal minorities and genuine widespread sentiment. A post with 500 upvotes carries more weight than one with 3.219- Note the subreddit context: complaints in r/technology have different implications than those in r/startups.220- For idea validation, look for both demand signals (people wanting a solution) and supply signals (existing tools already addressing the need).221- Save all raw data alongside the analysis so the user can explore further.222- If the public API is rate-limited or returns errors, suggest the user try again after a brief wait.