Repository navigation
feat(leads): qualify on public buying intent, not resemblance - #157
Merged
Merged
Conversation
Feedback from someone who had already built a business on this premise: the expensive part of cold outreach is not assembling a list, it is that writing to people who have shown no intent converts badly however good the copy is. Firmographic targeting does not fix that — it selects for people who look like buyers rather than people who are buying. So a campaign can now require evidence that somebody actually asked, and those leads rank ahead of everything found by resemblance. Intent is scored as recency times explicitness. A named budget outranks a request for suggestions, which outranks a bare complaint, and someone leaving their current supplier ranks near the top because the budget already exists and the decision to spend it has been made. All of it decays with a half-life rather than falling off a cliff at a threshold: a 25-hour-old post is not meaningfully worse than a 23-hour-old one. Not only Reddit. The same sentence turns up on Hacker News, Stack Exchange, Quora, Indie Hackers, X, LinkedIn and contract boards, and a pipeline watching one community inherits its demographics as the entire market. Everything except Reddit is read through the search index rather than a platform API — no per-platform auth, rate limits or review, at the cost of an indexing lag that makes hours-old intent reliable and minutes-old intent occasional. Three things the scorer refuses. Intent on somebody else's topic: a flawless "anyone recommend an accountant, happy to pay" is worth nothing to a load-testing company. Anyone who wrote "no vendors" or "don't DM me", whatever else they scored — answering them is the fastest way to lose a channel for everybody. And job ads, which read exactly like budget and are not. Signals are stored as signals rather than prospects. A prospect is a company with a domain you can email; this is a person on a platform. My first pass filed them as prospects and gave every Reddit thread the target key "reddit.com", collapsing the queue into a single lead. Off unless switched on, so no running campaign is silently emptied by a feature it never opted into. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
vu1nz Security Review0 finding(s) in PR #? No security issues found. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Acting on feedback that the expensive part of cold outreach isn't assembling a list — it's that writing to people with no demonstrated intent converts badly however good the copy is. Firmographics select for people who look like buyers, not people who are buying.
Intent = explicitness × recency
switchingsits near the top deliberately: the budget already exists and the decision to spend it has been made.Recency applies a half-life (36h) rather than a threshold — a 25-hour-old post isn't meaningfully worse than a 23-hour-old one, and a step function would rank them as if it were. An undated source takes a flat penalty instead of being assumed fresh, since most scraped entries have no date and would otherwise outrank a real post from yesterday.
Not just Reddit
Hacker News, Stack Exchange, Quora, Indie Hackers, X, LinkedIn, Mastodon/Bluesky, contract boards. A pipeline watching one community inherits its demographics as the entire market.
Everything except Reddit reads through the search index rather than a platform API — no per-platform auth, rate limits or review process. The honest cost, stated in the module: indexes lag, so this finds hours-old intent reliably and minutes-old intent only sometimes.
Three things it refuses
A design error I made and corrected
My first pass filed intent hits as prospects.
normalizeHoston a Reddit thread yieldsreddit.com— so every hit collapsed into one lead under the platform's domain, losing the person entirely. Signals are now their own table: a prospect is a company with an address, this is a person on a platform, and you reply where they asked.Off by default
min_intentis null unless switched on, so no running campaign is silently emptied by a feature it never opted into.Checks
tsc --noEmitclean · 1,073 tests pass (24 new) · build compiles🤖 Generated with Claude Code