Watched subreddits (posts and comments), named authors, and site-wide keyword searches across Reddit.
Home Web development Earshot
Earshot · our product
Every mention of your brand, within earshot.
Earshot watches Reddit, Hacker News, Bluesky and seven more sources for your brand, your competitors and the questions your buyers ask. Claude sorts the matches and drafts replies from your reply guide. A person on your team decides what gets posted.
Demo data. Northwind Coffee and every username shown are made up.
How it works
From a public post to a reply your team approves.
Every mention goes through the same five steps, and a person makes the final call before anything is posted.
-
01
Listen
Each source checks for new posts and comments on its own timer. Bluesky streams in live, and every source picks up where it left off after a pause.
-
02
Match
Every new item is checked against your filters. A filter that matches records which rule fired and which tags it carries.
-
03
Store
Items go into a full-text archive you can search with the same filter syntax (Bluesky is matched live instead), and matches are kept until you delete them. Reposts by the same author are labeled.
-
04
Triage
For tags with a reply guide, Claude reads the post, the thread around it and your guide, then picks a triage call and writes reply drafts.
-
05
Deliver
One Slack message per mention, with the drafts underneath. Email, webhooks, feeds and the API get the same match, routed by tag.
-
06
Approve
Someone on your team picks a draft, adapts it and posts it from their own account. Earshot reads and suggests. It does not post.
Where it listens
Ten sources, one inbox.
Each source is a small module of its own, so you can switch one off, change its options or add a new community without touching the rest.
Hacker News
Every new story and comment, including replies to a named account.
Bluesky
All new public posts and replies from the live firehose, matched as they arrive.
Stack Exchange
Questions, answers and comments on Stack Overflow and any other Stack Exchange sites you list.
GitHub
Public issue comments, pull request review comments and commit comments. A free token raises the limits.
Mastodon
Federated public timelines from the Mastodon servers you choose.
Dev.to
New articles, read in full so a mention deep in the post still counts.
Lobste.rs
New stories and comments from the link-sharing community.
Discourse forums
The latest public posts from any Discourse forum you add, such as a product's community site.
RSS and Atom
Newsletters, blogs, forum feeds and Google Alerts feeds, so almost any site can become a source.
How Reddit works without an API key.
Reddit stopped handing out self-service API keys and blocks anonymous data requests, so Earshot reads it through public feeds instead. It works out what to fetch from your filters.
- Subreddits named in a filter: every post and comment, a few minutes behind Reddit, through a free public Reddit archive
- Keyword filters with no subreddit: posts across all of Reddit through Reddit's search RSS, which allows about one request a minute
- When a feed says slow down, Earshot waits and backs off longer each time instead of hammering it
- If Reddit approves an official API app for you, switch modes for much higher limits
Site-wide search only sees new posts. To catch comments that mention you, add the subreddit to the filter.
Filters
Say exactly what to listen for.
One filter per line, in a small language built for mentions. Every example below uses a made-up coffee brand.
The filter language
Precise enough to skip the noise.
Words match whole words in any case. Domains also catch their subdomains and tricks like example[.]com. Comments and variables keep a long list readable, and the editor flags errors and warnings as you type.
"exact phrases", wildcards likeroast*,NOTandORsite:,type:post,author:,replyto:andtitle:lang:, which only rejects a post when the language guess is confident$tag:to route a match to the right channel or inbox- Preview any line against the archive before you save it
// Brand and website, everywhere "northwind coffee" $tag:brand northwindcoffee.com $tag:brand // Buyer questions in two subreddits SUBS=site:reddit.com/r/coffee/ site:reddit.com/r/espresso/ ${SUBS} subscription OR "beans delivered" NOT recipe $tag:leads // Competitor threads, new posts only "harbor roasters" OR "copperline coffee" type:post $tag:competitors // Brand mentions, but not in German "northwind coffee" NOT lang:de $tag:brand
Built in
Save, and it starts listening.
Saving the filters reloads them straight away. Reddit's fetch plan is rebuilt from your filters, so adding a subreddit to a rule is all it takes to start watching it.
- Syntax reference and click-to-add examples next to the editor
- An archive search that uses the same rules as live matching
- An optional AI check per filter (
$accept) to drop off-topic matches before alerts, using an Anthropic API key
Triage and drafts
Claude reads each mention so your team doesn't start from zero.
Write a reply guide for a brand once: what you can say, what needs sign-off, what to never touch. Earshot hands it to Claude with every matching post.
One call per mention
Four labels, a reason, and drafts to adapt.
- RespondWorth a reply. Comes with 2 or 3 drafts, each with a different angle.
- MonitorKeep an eye on the thread. Sometimes one draft, just in case.
- No actionNot about you, or nothing to add. No drafts.
- EscalateFlag to the client today. No drafts, and no reply from your accounts.
- A plain one or two sentence reason for every call
- A warning when a reply touches a topic that needs client approval
- For Reddit comments, Claude also sees the thread post and the comment being answered
- Runs through Claude Code with no tools turned on, and post text is treated as data, never instructions
- Uses your existing Claude plan, so there's no bill per mention
Delivery
Matches go where your team already works.
Every destination takes a tag. A destination tagged all gets everything, and the rest only get matches with their tag.
Slack, routed by tag
One incoming webhook per channel. Each mention arrives as a single message with Claude's call and the reply drafts underneath. A terse mode drops the filter line.
Email digests
Right away, hourly, every 6 hours or once a day, sent through your own mail server or a Gmail app password.
Webhooks with retries
A JSON array of new matches, including the drafts. If your endpoint is down, Earshot retries with growing gaps for up to 48 hours.
RSS, Atom and JSON feeds
Private feed URLs for a feed reader, Microsoft Teams, Zapier or Make, filtered with ?tag=.
Token API
POST endpoints for matches, archive search, filters and settings, behind a bearer token, with clear rate-limit replies.
CSV mention logs
An append-only CSV per tag on your machine, with blank Triage and Notes columns, rebuilt from history if the file is deleted.
Matches an AI check rejected, and NSFW ones by default, stay out of Slack and email. They are still in the inbox, the API and webhooks.
Claude in chat (MCP)
Ask about your mentions in plain English.
Earshot has an MCP endpoint, so Claude can read your matches and help with filters right from a chat. Ask "what did people say about us on Reddit this week?" or "write a filter for people asking for alternatives to a competitor, and preview it."
- preview_filter
- get_matches
- set_match_seen
- get_filters
- lint_filters
- set_filters
- get_delivery_settings
- get_source_status
- get_stats
- get_filter_syntax
- The save tool tells Claude to show you the exact new filter text and wait for your OK
- Delivery settings are read-only from chat
- Protected by the same bearer token as the API
Check schedule
All the time, or only when you want it.
By default Earshot checks continuously, with watched subreddits every 2 to 3 minutes. Or set check windows: the times, your timezone and how long each run lasts.
- Each run picks up where the last one stopped, so nothing from the gap is missed
- A warning when a window is too short for your Reddit searches
- "Run a check now" opens a window on demand
Self-hosted
It runs on your machine, and your data stays there.
Earshot is plain Node 22 or later with its built-in SQLite, and no third-party packages. It runs on a Mac or on any small server, with nothing to subscribe to.
- On a Mac, a background service starts it at login and restarts it if it crashes
- A Dockerfile for a small VPS, behind HTTPS with an admin password
- Without a password, the inbox only opens on the machine it runs on
- Automated tests for the filter language, the schedule and the reply drafts
Under the hood
What it's built with.
Questions
Common questions.
Do I need a Reddit API key?
No. In its default mode Earshot reads the subreddits in your filters through a free public Reddit archive, a few minutes behind Reddit, and runs site-wide keyword searches through Reddit's public search RSS. Reddit only allows about one of those searches a minute, so Earshot spaces them out and backs off when it is asked to slow down. If Reddit approves an official API app for you later, you can switch to it for higher limits.
Does the AI cost extra?
The triage and reply drafts run through the Claude Code app signed in to your existing Claude plan, so there is no separate bill per mention. The one exception is the optional per-filter AI check, which needs an Anthropic API key if you want to use it.
Will Earshot ever post a reply for me?
No. Earshot only reads public posts and suggests replies. A person on your team reads the drafts, edits them and posts from their own account. Escalated mentions come with a note to flag them to the client instead of replying.
Where does my data live?
In one SQLite file on the machine Earshot runs on. That holds your filters, settings, the searchable archive (kept for 7 days by default) and every match until you delete it. What leaves the machine is the requests to the sites it watches, the alerts you send to Slack, email or webhooks, and the post text sent to Claude for drafts.
Can it run on a server instead of a Mac?
Yes. It runs anywhere Node 22 or later can stay running, and there is a Dockerfile for a small VPS. On a server you put it behind HTTPS and set an admin password, because without one the inbox only opens from the machine it runs on.
Which sites does it not cover yet?
YouTube, X, podcast transcripts, Product Hunt and general web page monitoring are not built yet. Each source is one small module, so a new community can be added without touching the rest of the app. For other custom builds, see web development.
Let's talk
Want Earshot watching your brand?
Book a call. Tell us your brand, your competitors and where your buyers talk, and we'll show you what Earshot would catch. It's used for client brand monitoring today.
me[at]wesleetrout[dot]com