Overview
This workflow scans 10 target subreddits every Friday to extract pain points, tool mentions, and emerging market signals from community discussions. For each subreddit, it searches for relevant topics and classifies posts by type: pain point, tool recommendation, comparison request, or general discussion. Product teams use the output to prioritize features, and marketing teams use it to refine messaging based on real user language.
Trigger
Cron schedule (every Friday at 8:00 AM UTC)
Schedule
Runs every Friday at 8:00 AM UTC
Workflow Steps
Load subreddit watchlist
Read the list of 10 target subreddits and associated search queries from configuration.
Search each subreddit for relevant discussions
Query Scavio Reddit search for each subreddit with topic-specific queries to find recent discussions.
Classify post types
Categorize each post as pain point, tool mention, comparison request, or general discussion based on title keywords.
Extract tool mentions
Parse post titles and snippets for specific tool and product names to build a mention frequency table.
Generate weekly market report
Compile findings into a structured report with pain point trends, tool mention rankings, and notable discussions.
Python Implementation
import requests
import json
from pathlib import Path
from datetime import datetime
from collections import Counter
API_KEY = "your_scavio_api_key"
SUBREDDITS_AND_QUERIES = [
{"subreddit": "SaaS", "queries": ["frustrated with", "looking for alternative"]},
{"subreddit": "startups", "queries": ["tool recommendation", "what do you use for"]},
{"subreddit": "webdev", "queries": ["best API for", "switching from"]},
{"subreddit": "SEO", "queries": ["rank tracking tool", "SERP API recommendation"]},
{"subreddit": "artificial", "queries": ["AI agent tools", "search grounding"]},
]
PAIN_WORDS = ["frustrated", "hate", "terrible", "broken", "expensive", "slow", "unreliable"]
TOOL_WORDS = ["recommend", "alternative", "switched to", "using", "tried"]
def search_subreddit(subreddit: str, query: str) -> list[dict]:
res = requests.post(
"https://api.scavio.dev/api/v1/search",
headers={"x-api-key": API_KEY},
json={"platform": "reddit", "query": f"{query} {subreddit}"},
timeout=15,
)
res.raise_for_status()
return res.json().get("organic", [])
def classify_post(title: str) -> str:
lower = title.lower()
if any(w in lower for w in PAIN_WORDS):
return "pain_point"
if any(w in lower for w in TOOL_WORDS):
return "tool_mention"
if "vs" in lower or "comparison" in lower or "versus" in lower:
return "comparison"
return "general"
def run():
date = datetime.utcnow().strftime("%Y-%m-%d")
all_posts = []
tool_mentions = Counter()
post_types = Counter()
for config in SUBREDDITS_AND_QUERIES:
for query in config["queries"]:
posts = search_subreddit(config["subreddit"], query)
for post in posts:
title = post.get("title", "")
ptype = classify_post(title)
post_types[ptype] += 1
all_posts.append({
"subreddit": config["subreddit"],
"title": title[:120],
"score": post.get("score", 0),
"type": ptype,
"link": post.get("link", ""),
})
report = {
"date": date,
"subreddits_scanned": len(SUBREDDITS_AND_QUERIES),
"total_posts": len(all_posts),
"post_types": dict(post_types),
"pain_points": [p for p in all_posts if p["type"] == "pain_point"][:10],
"tool_mentions": [p for p in all_posts if p["type"] == "tool_mention"][:10],
"top_posts_by_score": sorted(all_posts, key=lambda x: x["score"], reverse=True)[:10],
}
Path(f"reddit_market_{date}.json").write_text(json.dumps(report, indent=2))
print(f"Reddit Market Scan {date}: {len(all_posts)} posts from {len(SUBREDDITS_AND_QUERIES)} subreddits")
for ptype, count in post_types.most_common():
print(f" {ptype}: {count}")
if __name__ == "__main__":
run()JavaScript Implementation
const API_KEY = "your_scavio_api_key";
const TARGETS = [
{ sub: "SaaS", queries: ["frustrated with", "looking for alternative"] },
{ sub: "startups", queries: ["tool recommendation"] },
];
async function searchReddit(query) {
const res = await fetch("https://api.scavio.dev/api/v1/search", {
method: "POST",
headers: { "x-api-key": API_KEY, "content-type": "application/json" },
body: JSON.stringify({ platform: "reddit", query }),
});
if (!res.ok) throw new Error(`scavio ${res.status}`);
return (await res.json()).organic ?? [];
}
const allPosts = [];
for (const target of TARGETS) {
for (const q of target.queries) {
const posts = await searchReddit(`${q} ${target.sub}`);
allPosts.push(...posts.map((p) => ({ sub: target.sub, title: (p.title ?? "").slice(0, 100), score: p.score ?? 0 })));
}
}
allPosts.sort((a, b) => b.score - a.score);
console.log(`Scanned ${TARGETS.length} subreddits, found ${allPosts.length} posts`);
for (const p of allPosts.slice(0, 5)) console.log(` [${p.sub}] ${p.title} (score: ${p.score})`);Platforms Used
Community, posts & threaded comments from any subreddit