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.

Screenshots on this page use a made-up brand and demo data.

The Earshot inbox. A Reddit post asking whether the Northwind Coffee subscription is worth it is labeled Respond, with three reply drafts and Copy buttons. Below it, a Bluesky post about a product problem is labeled Escalate.

Demo data. Northwind Coffee and every username shown are made up.

10 Sources watched, from Reddit to any RSS or Atom feed
4 Triage calls: respond, monitor, no action or escalate
48 Hours of webhook retries if your endpoint is down
0 Third-party packages: plain Node with built-in SQLite

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.

How Earshot works Five steps from left to right: sources, filters, a SQLite store, AI triage and drafts, then delivery to Slack, email, webhooks, feeds, the API and MCP. Below delivery, a person approves every reply before it is posted. Below the first steps, a note that Earshot is self-hosted. 1 Sources Reddit · Hacker News Bluesky, in real time GitHub · Mastodon Stack Exchange Dev.to · Lobste.rs Forums · RSS feeds 2 Filters Words, phrases, domains, wildcards site:, type:, author: NOT and OR $tag: decides where each match goes 3 Store One SQLite file on your machine Searchable archive, 7 days by default Matches kept until you delete them 4 AI triage Claude reads the post and your reply guide Respond, monitor, no action, escalate 2 or 3 reply drafts on your Claude plan 5 Delivery Slack, by tag Email digests Webhooks, 48h retries RSS and JSON feeds API and MCP A person approves every reply Drafts appear in Slack and the inbox. Your team edits and posts. Earshot never does. Self-hosted Runs on your Mac (it starts at login) or in Docker on a small server. Your filters, matches and settings live in your own SQLite file.
How Earshot works Five steps from top to bottom: sources, filters, a SQLite store, AI triage and drafts, then delivery. At the end, a person approves every reply before it is posted. 1 Sources Reddit, Hacker News, Bluesky (live), GitHub, Stack Exchange, Mastodon, forums and more 2 Filters Words, phrases, domains, site:, type:, NOT $tag: decides where each match goes 3 Store One SQLite file on your machine A searchable archive plus every match 4 AI triage Claude reads the post and your reply guide A triage call and 2 or 3 reply drafts 5 Delivery Slack by tag, email digests, webhooks, RSS and JSON feeds, the API and MCP A person approves every reply Drafts appear in Slack and the inbox. Your team edits and posts. Earshot never does.
  1. 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.

  2. 02

    Match

    Every new item is checked against your filters. A filter that matches records which rule fired and which tags it carries.

  3. 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.

  4. 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.

  5. 05

    Deliver

    One Slack message per mention, with the drafts underneath. Email, webhooks, feeds and the API get the same match, routed by tag.

  6. 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.

No API key

Reddit

Watched subreddits (posts and comments), named authors, and site-wide keyword searches across Reddit.

SubredditsAuthorsKeywords
Every item

Hacker News

Every new story and comment, including replies to a named account.

StoriesComments
Real time

Bluesky

All new public posts and replies from the live firehose, matched as they arrive.

PostsReplies
Q&A

Stack Exchange

Questions, answers and comments on Stack Overflow and any other Stack Exchange sites you list.

QuestionsAnswers
Developers

GitHub

Public issue comments, pull request review comments and commit comments. A free token raises the limits.

IssuesReviews
Fediverse

Mastodon

Federated public timelines from the Mastodon servers you choose.

Public timelines
Articles

Dev.to

New articles, read in full so a mention deep in the post still counts.

Articles
Tech news

Lobste.rs

New stories and comments from the link-sharing community.

StoriesComments
Communities

Discourse forums

The latest public posts from any Discourse forum you add, such as a product's community site.

Forums
Anything with a feed

RSS and Atom

Newsletters, blogs, forum feeds and Google Alerts feeds, so almost any site can become a source.

RSSAtom
Reddit, honestly

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.

The Earshot Sources page with ten cards: Reddit, Hacker News, Stack Exchange, GitHub, Dev.to, Lobste.rs, Bluesky, Mastodon, Discourse forums and RSS. Each card has an on switch, a short description, items collected and coverage notes.
The Sources page: each community has its own switch, options and coverage notes. Item counts are demo data.

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.

Anatomy of a filter The filter site:reddit.com/r/coffee/ "cold brew" subscription NOT recipe $tag:category, split into five parts: where to look, an exact phrase, a plain word, an exclusion and a routing tag. site:reddit.com/r/coffee/ "cold brew" subscription NOT recipe $tag:category Where to look one subreddit, posts and comments Exact phrase any case, punctuation ignored Plain word must appear too Exclusion skips recipe threads Routing tag picks the Slack channel or email
Anatomy of a filter The filter site:reddit.com/r/coffee/ "cold brew" subscription NOT recipe $tag:category, split into five parts: where to look, an exact phrase, a plain word, an exclusion and a routing tag. site:reddit.com/r/coffee/ Where to look One subreddit, posts and comments "cold brew" Exact phrase Any case, punctuation ignored subscription Plain word Must appear too NOT recipe Exclusion Skips recipe threads $tag:category Routing tag Picks the Slack channel or email

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 like roast*, NOT and OR
  • site:, type:post, author:, replyto: and title:
  • 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
The Earshot filter editor with seven demo filters for Northwind Coffee, a panel listing the subreddits and site-wide searches Reddit is polling as a result, and a syntax reference beside it.
The filter editor. Below it, Earshot shows what Reddit will poll because of these filters.

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
Three demo matches in the Earshot inbox: a Hacker News comment labeled Monitor with one draft, a Reddit post about a competitor's price rise labeled Respond with a needs-client-approval warning and two drafts, and a post about a different business labeled No action.
Monitor, Respond with an approval warning, and No action, each with Claude's reason. Demo data.

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.

Chat

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.

Per channelDrafts inline
Inbox

Email digests

Right away, hourly, every 6 hours or once a day, sent through your own mail server or a Gmail app password.

ImmediateHourlyDaily
Integrations

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.

JSON48h retries
Readers

RSS, Atom and JSON feeds

Private feed URLs for a feed reader, Microsoft Teams, Zapier or Make, filtered with ?tag=.

RSSAtomJSON
Developers

Token API

POST endpoints for matches, archive search, filters and settings, behind a bearer token, with clear rate-limit replies.

Bearer tokenREST
Records

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.

CSVPer tag

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
The Connect Claude panel in Earshot settings, showing the one-line claude mcp add command and an example API call with a placeholder token.
Connecting Claude takes one command. The token here is a placeholder.
The Check schedule panel in Earshot settings, set to Only at set times: 07:00, 12:00 and 21:00 in the America/Chicago timezone, each run lasting 20 minutes, with Save schedule and Run a check now buttons.
Check schedule, set here to three windows a day.

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
Earshot Self-hosted
1file
SQLite database Filters, settings, archive and matches
Local
7days
Default archive window Change it in settings, matches stay until deleted
Yours
0pkgs
Third-party packages Every line can be read and changed
Plain Node

Under the hood

What it's built with.

Node.js 22+ Built-in SQLite Full-text search Plain HTML, CSS & JavaScript Claude Code MCP Slack webhooks SMTP RSS & Atom macOS launchd Docker

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.