RedditWatch turns noisy Reddit communities into ranked, source-backed market signals.
A self-hosted community intelligence workspace for PMs, founders, marketers, researchers, and builders who want to understand repeated pain, demand, advice-seeking, workarounds, and product mentions across public Reddit communities. Reddit search helps you find threads. RedditWatch helps you find the patterns hiding across them, with source quotes and Reddit links behind every signal.
RedditWatch uses public Reddit endpoints and local storage, so it does not require Reddit API credentials or a hosted vendor account. Public Reddit surfaces can still change, but the app is designed to be easy to inspect, adapt, and run yourself.
- Subreddit data inventory — catalog sources, counts, and starter subset
- Architecture notes — data flow and subsystem overview
- No Reddit API key required — Uses public old.reddit.com endpoints and local storage.
- Free and open source — Self-host it. No subscriptions, no vendor lock-in.
- Ranked, source-backed market signals — Find repeated pain, demand, advice, and product signals from public Reddit communities.
- Works with free local models — Defaults to Ollama (llama3.1:8b). Zero cost, fully private. Also supports Claude and OpenAI.
- Semantic search — Find related signals by meaning using ChromaDB embeddings.
- Evidence-first exports — CSV, JSON, Markdown, or full market signal reports with source quotes and Reddit links.
git clone https://github.com/Aditya1001001/RedditWatch.git
cd RedditWatch
cp .env.example .env
docker compose upRedditWatch defaults to local LLM analysis with Ollama. For Docker, include the Ollama compose file:
docker compose -f docker-compose.yml -f docker-compose.ollama.yml upThe Ollama compose override sets OLLAMA_BASE_URL=http://ollama:11434 for the app container automatically.
git clone https://github.com/Aditya1001001/RedditWatch.git
cd RedditWatch
./scripts/setup.sh
./scripts/run.sh- Python 3.9+
- Ollama with
llama3.1:8bmodel, or a Claude/OpenAI API key
# Install Ollama and pull a model
ollama pull llama3.1:8bCreate an audience for the market, persona, competitor space, or customer segment you want to research. Add subreddits directly or browse the curated catalog. Follow the audience when you want RedditWatch to include it in scheduled or manual collection.
Click Collect All. RedditWatch collects posts and comments from followed audiences using public Reddit endpoints, with local rate limiting and fallbacks for empty or blocked responses.
After collection, analysis runs automatically when an LLM provider is available. The LLM reads each post and its comments, then extracts:
- Pain Signals — Repeated frustrations with signal strength scores (0-100)
- Demand Signals — "I wish there was a tool that..."
- Product Mentions — Tools/services discussed, with sentiment
- Opportunities — Market gaps and unmet needs
- Themes — Signals grouped by theme (e.g., "onboarding_friction"), ranked by frequency x signal strength
- Semantic Search — Find signals by meaning, not just keywords
- Ask — Ask natural-language questions about a selected audience using retrieved signals, with source cards under grounded answers
- Evidence — Review source quotes and open the underlying Reddit discussion
- Export — CSV, JSON, Markdown, or generate a source-backed market signal report
RedditWatch is designed to keep market signals tied to source evidence:
- Verbatim quotes required — Extracted quotes must come directly from the post or comments.
- Quote validation — The analyzer checks extracted quotes against the source text and removes quotes it cannot verify.
- Self-promotion handling — Posts that are mostly founder promotion are de-weighted or skipped unless the community response contains useful signal.
- Low-signal skips — Deleted, thin, or low-response posts can be marked as skipped before spending LLM calls.
- Source links stay attached — Signals, Ask answers, and reports preserve subreddit context, source quotes, and Reddit links.
- Local-first storage — Collected conversations, signals, and search indexes live in your local runtime data.
These signals are evidence for product and market thinking, not proof of demand by themselves.
Theme: From Reddit noise to market signals.
Recommended short demo flow:
- Open a populated audience.
- Show signal categories and ranked themes.
- Filter to Pain Signals.
- Open a quote-backed signal and follow the Reddit source link.
- Export a market signal report.
Avoid live collection or live LLM analysis during short demos unless the run has been preflighted. A pre-populated local database makes the first “aha” moment faster and more reliable.
RedditWatch works out of the box with Ollama. All settings are optional.
Copy .env.example to .env for cloud LLM providers:
# Optional: For Claude API
ANTHROPIC_API_KEY=sk-ant-...
# Optional: For OpenAI API
OPENAI_API_KEY=sk-...Edit backend/config.yaml to customize:
llm:
provider: ollama # or "claude" or "openai"
collection:
posts_per_subreddit: 25
include_comments: true
server:
cors:
allowed_origins:
- "http://localhost:8000"RedditWatch is designed for local/self-hosted use and does not include authentication. Do not expose it directly to the public internet without adding access control in front of it.
42+ endpoints across 9 modules. Full interactive docs at http://localhost:8000/docs
| Module | Prefix | Key Endpoints |
|---|---|---|
| Health | /api/health |
Health check |
| Posts | /api/posts |
List, get, delete, stats |
| Subreddits | /api/subreddits |
CRUD, catalog, collect per-sub |
| Collection | /api/collect |
Trigger collection, status, refresh comments |
| Analysis | /api/analyze |
Trigger analysis, themes, signals, status |
| Search | /api/search |
Semantic search, similar, duplicates |
| Export | /api/export |
CSV/JSON/Markdown export, reports, quote cards |
| LLM | /api/llm |
Provider status, test |
| Insights | /api/insights |
Direct signal queries; route name kept for API compatibility |
| Themes | /api/themes |
Direct theme queries |
Browser (Alpine.js + Tailwind + Chart.js)
|
FastAPI Backend
|-- SQLite (posts, comments, signals)
|-- ChromaDB (vector embeddings)
|-- LLM Providers
|-- Ollama (local, default)
|-- Claude API
|-- OpenAI API
- Backend: FastAPI, SQLAlchemy (async), SQLite
- Frontend: Alpine.js, Tailwind CSS, Chart.js (no build step)
- LLM: Ollama (default), Claude, OpenAI
- Vector Search: ChromaDB with sentence-transformers
- Public Reddit Conversations: HTTP requests to old.reddit.com (no API key needed)
- Testing: pytest, pytest-asyncio
- CI: GitHub Actions
# Run tests
cd backend
python -m pytest tests/ -v
# Run with coverage
python -m pytest tests/ --cov=app --cov-report=term-missing
# Run dev server with hot reload
uvicorn app.main:app --reload --port 8000To record a fresh first-run demo, archive local runtime state and recreate an empty SQLite schema:
./scripts/reset-runtime-data.shThis only moves runtime files under data/. It does not delete the curated subreddit catalogs in backend/app/data/.
To load a deterministic local demo audience without live Reddit collection or live LLM analysis:
./scripts/load-demo-data.shThis creates a SaaS Starter audience with sample posts, comments, quote-backed signals, and a rebuilt local search index. The seeded data is for demos and screen recordings; use live collection when you want fresh public Reddit conversations.
See CONTRIBUTING.md for contribution guidelines.
- Core collection and market signal analysis pipeline
- Semantic search with ChromaDB embeddings
- Export (CSV, JSON, Markdown, full research reports)
- Analytics dashboard with Chart.js visualizations
- Audience grouping and filtering with subreddit suggestions
- 283-subreddit curated catalog across 50 categories
- 6,089-subreddit expanded directory for discovery
- Security hardening, background tasks, testing, Docker
- Scheduled collection (APScheduler)
- Post signal scoring and low-signal skip reasons
- Deterministic sample dataset for offline portfolio demos
- Full migration framework beyond lightweight SQLite upgrades
- Inspired by GummySearch and PainOnSocial
- Built with Ollama, FastAPI, ChromaDB
If RedditWatch is useful to you, consider giving it a star — it helps others discover the project.




