Define your keywords, pick your sources, run it on a schedule. New buying signals show up in Slack or your inbox with relevance scores. No browser extensions, no SaaS subscriptions — just a script and a cron job.
Get Started Setup GuideSplit your keywords into two intent levels. High-intent keywords score 3 points each — these are direct buying signals like "looking for a tool" or "competitor alternative". Medium-intent keywords score 1 point — topic and pain signals.
Posts matching multiple keywords accumulate points. A post matching one high-intent and two medium-intent keywords scores 5. You see the highest-scoring signals first.
State is stored in a local JSON file. Each source tracks its cursor: Reddit stores the newest post ID per subreddit, HN stores a timestamp, RSS stores the newest GUID per feed.
On each run, only truly new posts are checked. First run establishes a baseline without notifying. Delete .state.json to reset and re-scan everything.
Fetches new posts from each configured subreddit via the public JSON API. No OAuth, no API key. Rate limited at 1.5s between requests. Configurable number of posts per subreddit.
Searches HN via Algolia with configurable queries and a minimum points filter. Posts with 10+ points get a bonus score. Timestamp-based dedup means zero duplicates across runs.
Parses any RSS feed via rss-parser. Strips HTML from content before keyword matching. GUID-based dedup. Add as many feeds as you want — industry blogs, competitor blogs, news sites.
Clone the repo and install dependencies. Node 18+ required.
Copy the example config and edit it. Add your high-intent buying signals, medium-intent topic keywords, subreddits, RSS feeds, and HN search queries.
First run scans recent posts and saves a baseline. Second run onwards notifies you about new signals only. Results always print to console.
Optionally add Slack or email notifications. Set environment variables and signals arrive automatically.
Run a one-time 30-day backfill to find signals you missed. Uses Reddit's search API (broader than the /new endpoint) and a 30-day HN lookback. RSS feeds return whatever history they retain, typically 2-4 weeks.
The backfill does not touch .state.json, so it's safe to run alongside the regular monitor. Optionally sends an email digest with all results.
Sends Block Kit messages via incoming webhook. Each signal shows source, linked title, relevance score, matched keywords, and a body preview. Up to 10 signals per message.
HTML digest via Resend with color-coded score badges. Red for high relevance (3+), amber for medium (2), grey for low (1). Timestamps in AEST.