4,000 Reddit posts a day, down to the ten a week worth answering
A watch list they control → read, filtered, AI-scored → the threads worth a reply, in Slack
This firm won real work from Reddit whenever somebody remembered to look. A small business owner asks who people use for bookkeeping, a genuinely useful answer lands in the first hour, and a week later there is a call in the calendar. The catch is that it only works if you are there. A thread is busy for an hour and dead by morning. Their marketing manager was checking twenty-five communities several times a day and still finding the good ones twelve hours late. Now a headless browser reads every new post and comment in those communities, a cheap filter throws out the obvious 95%, and a model scores what is left on intent, fit, and whether there is anything useful to say. Anything over the line lands in Slack about six minutes after it was posted, with its score and the reason for it. Which communities get watched is theirs to change: a dashboard where they add one, say what counts as a match, and pause another, without anyone touching the pipeline. The system never posts anything itself.
What it's worth
Time back
- Communities watched
- 25
- Hours a day finding threads, before
- 1.5 hrs
- Hours a day triaging the Slack feed, after
- 0.25 hrs
- Hours back per day
- 1.25 hrs
- Working days per year
- 240
- Hours back per year
- 300 hrs
- Marketing manager cost
- $35 / hr
- per year
- $10,500
What the system costs to run
- Posts and comments read per day
- ~4,000
- Headless browser hosting
- ~$35 / mo
- Residential proxy
- ~$45 / mo
- AI scoring, on the ~5% that clear the first filter
- ~$15 / mo
- Orchestration and storage
- ~$25 / mo
- Running cost per year
- ~$1,440
- per year
- ~$1,440
How this was calculated — every assumption
- The hours counted are finding time, not reply time. Writing a good answer took the same effort before and after, so it is not in this figure. Only the checking, scrolling, and searching came back.
- The 1.5 hours a day is the marketing manager's own estimate of what keeping up with twenty-five communities took. The 15 minutes after is reading the Slack feed and deciding what to answer.
- Marketing manager time is costed at $35/hour, salary plus tax, benefits, and overhead.
- 240 working days a year, allowing for holiday.
- Running cost is metered, not estimated: browser hosting, proxy, model calls, orchestration, and storage come to about $120 a month at 4,000 items a day. Watching more communities costs more, roughly in line with volume.
- The dollar figure understates the result, and it is not why the firm built this. Checking by hand covered the hours somebody was at a desk. A thread posted at 11pm was found at 9am, by which point the useful answers were already written and nobody was reading it any more. There is no honest way to price the threads nobody was awake for, so it is described here rather than counted.
- Nothing is claimed about clients won. Reddit is largely unattributable: someone reads a thread, remembers the name, and arrives through a search a month later with no trace of where they came from. Threads surfaced and threads answered are both in the logs and both countable. Turning those into revenue would be a guess dressed up as a measurement.
Results at a glance
- ~$9,000 a year of time back, after what it costs to run
- 25 communities watched continuously, including overnight
- The firm adds, tunes, and pauses communities itself from a dashboard
- ~4,000 posts and comments read a day, filtered and scored down to roughly 10 a week worth answering
- Every thread scored out of 100 on intent, fit, and answerability, with the reason attached
- Score thresholds set per community, tuned weekly against the near misses
- About six minutes from a post going up to it being in Slack
- Every alert carries the thread, the ask, and that community's self-promotion rules
- The system never posts, votes, or messages. People reply from their own accounts
- A community that goes quiet raises an alert, so a broken scraper cannot pass for a slow week
The problem
The channel already worked, which was exactly the problem. Answering questions in small-business communities brought the firm real enquiries, so it needed doing every day, and it was the first thing to slip in a busy week. Busy weeks are tax season, which is also when people go looking for a bookkeeper. Recency is most of the value here: a thread gets read for about an hour, and an answer posted the next morning is written for nobody. Half the good asks are not new posts at all, they are comments buried three levels down in a thread from last week, where no amount of checking the front page will find them. Keyword alert tools were tried first and could not tell the difference between someone looking for a bookkeeper, someone complaining about theirs, and someone answering a question two years ago. What was needed was not an alert when a word appeared. It was somebody reading twenty-five communities all day and only speaking up about the handful that mattered.
What was built
The dashboard
The watch list is theirs, not a config file. They add a community, write what counts as a match in it, set its score threshold, record its self-promotion rules, pause one that has gone noisy, and see what each has surfaced lately. A watch list only the developer can edit is a watch list that stops matching the business within a quarter.
Adding one safely
A new community is checked before it goes live: that it exists, that it is public, that the page parses. Then it runs in observe mode for a day, showing what it would have surfaced without sending anything. A bad filter floods Slack, and a flooded Slack channel gets muted, which quietly ends the whole system.
The rules, per community
Twenty-five are on the list today, each with its own rules stored alongside it: where a direct answer is welcome, where anything promotional is removed on sight, where a flair or a disclosure is required. These differ per community, and getting one wrong costs the account.
Reading the page
A headless browser walks the public new feed and the comment trees of active threads, seeing exactly what a logged-out visitor sees. No account, no login, nothing private.
Slow on purpose
One request at a time per community, spaced out, with caching so the same thread is never fetched twice. The crawl runs far below what the site would tolerate. Cloud IP ranges are blocked outright, so traffic goes through one stable residential IP: the proxy is there to be consistent, not to hide.
Cheap filter first
A keyword and heuristic pass reads all 4,000 items a day and throws out about 95% of them. Running a model over every comment in twenty-five communities costs twenty times as much and does not read them any better. The model's job is the hard 5%, not the obvious 95%.
AI scoring on what survives
Each remaining item is read and scored out of 100 on three things: intent, whether this is somebody looking for help now rather than complaining about a bookkeeper or answering somebody else; fit, whether it is the kind of work the firm actually takes; and answerability, whether there is a useful reply to give without pitching. The score comes back with a one-line reason. Threads at 80 go to Slack, the rest are logged.
The threshold is a dial, per community
Each community carries its own cut-off, set in the dashboard. A quiet, well-targeted community can afford a lower bar; a busy general one needs a higher one. A single global threshold means either missing good threads in one place or drowning in noise from another.
Memory
Every item seen is stored, so an edited post, a thread that resurfaces, or a repeat crawl does not alert twice. Threads somebody already answered are marked as handled.
Into Slack with the context
The alert carries the thread, the ask in the poster's own words, the score and why it scored that way, what that community allows, and a suggested angle. A bare link means the person still has to do all the reading, which is the work that was supposed to go away.
Knowing when it breaks
Page markup shifts without warning. Selectors are checked against known-good fixtures on every run, and each community has an expected volume range. A community returning nothing raises an alert instead of quietly reporting a quiet day.
Logging
Every run records what was read, what was surfaced, and why. The filter gets tuned against threads it actually missed, rather than against somebody's impression of how it is doing.
What keeps it from breaking
It never posts
No automated replies, no votes, no DMs. Everything it produces is for a person to act on from their own account, in their own words. Automated posting is against site rules, obvious to every reader, and the fastest way to lose the channel completely.
Logged out, public pages only
No account and no login. If a logged-out visitor cannot see it, the system does not read it. Private communities and anything behind a sign-in are out of scope by design, not by omission.
Community rules travel with the alert
Each community's self-promotion rules are attached to every thread surfaced, so the person about to reply sees what is allowed before they write. One ban costs more than a year of alerts.
The score is a number you can argue with
Every alert shows what it scored and why, and the near misses are kept. Once a week the threads that scored just under the line are reviewed, so the threshold gets tuned against threads it actually missed rather than against a feeling that it has gone quiet. A score nobody can inspect is just a filter with better marketing.
A silent scraper is the dangerous failure
A scraper that breaks and returns zero rows looks exactly like a quiet week. Volume checks and selector fixtures exist so that difference is never left to somebody's judgement.
It stores threads, not people
Public posts, comments, and permalinks are kept. No profiles of individual users are built across communities. The system watches for questions being asked, not for anybody in particular.
How the approach worked
Everywhere else in this portfolio, browser automation is the second choice and an API is the first. Here it is the other way round, which is worth stating plainly: the official API's terms and pricing do not cover reading public communities at this volume for commercial purposes, and its search cannot find a request for a recommendation sitting three levels deep in a month-old thread. So the system reads the public page, slowly, logged out, the way a person would. The scraping was never the hard part. The hard part was cutting 4,000 items a day down to ten a week without losing the good ones, scoring them in a way somebody can inspect and argue with rather than trust, staying welcome in communities that can remove you permanently, and making sure that when the page changes the system says so instead of going quiet.
The results
Twenty-five communities are read continuously now, including the hours nobody was working. About 4,000 posts and comments a day go through the filter, get scored, and roughly ten a week clear the line and reach a person, carrying the thread, the ask, the score and its reason, and that community's rules. Alerts arrive about six minutes after a post goes up, which is inside the window where an answer still gets read. Twenty-five is only where the list sits today: adding a community, retuning what counts as a match in it, or pausing one is something the firm does in the dashboard, not something it raises a ticket for. The manual checking stopped, which is about 300 hours a year back. How much work it brings in is not measured and is not claimed: a channel like this is largely unattributable, and the firm would rather publish the threads it can count than a revenue figure it would have to invent.
Communities checked by hand a few times a day, and barely at all in a busy week. Overnight threads found at 9am, long after the useful answers were written.
Everything read continuously, filtered to the handful that match, in Slack about six minutes after posting, with the community's rules attached. The list is theirs to change.
Tools & technologies
Have a process like this slowing your business down? Tell me your stack and goals and I'll send back a build plan.
Take the stack assessment →