How the score is built.
One model, one rubric, and a score you can disagree with because you can see what it keyed on.
What the number is
Every thread gets one score. A model reads the post against the rubric below and returns a value from 0.00 to 1.00, which the product shows as 0 to 100. There is no blend of sub scores, no weighting you cannot see and no proprietary index. One model call, one number, one sentence explaining it.
Intent scoring runs on openai/gpt-4.1-nano in JSON mode. Reply drafting runs on deepseek/deepseek-v4-flash. Both are called through OpenRouter. We name the models because a score is only arguable if you know what produced it.
Calibration anchors
The model is given these anchors, not a vague instruction to be strict. They are what stops the whole corpus drifting into the seventies.
| Shown | Raw | What it means |
|---|---|---|
| 5 | 0.05 | news, meme, showcase, irrelevant discussion |
| 25 | 0.25 | topic-adjacent chatter, no specific pain or ask |
| 45 | 0.45 | generic "what does everyone use for X?", some curiosity, no pain context |
| 60 | 0.60 | named pain plus implicit ask, buyer is circling the problem |
| 75 | 0.75 | clear pain plus specific named tool plus explicit ask for input |
| 88 | 0.88 | explicit shopping, comparing tools, trial ending, budget mentioned |
| 97 | 0.97 | "we have to pick something this week, send recs" |
Signals that raise the score
- Explicit ask: "any recs?", "what do you use?", "looking for", "need a tool", "alternative to X"
- Active comparison: "tried X but...", "comparing A vs B", "trial ends in...", "evaluating options"
- Named pain plus named tool: "HubSpot is too expensive", "Apollo is killing us with pricing"
- Budget or timeline: "we have $X budget", "by end of quarter", "before our renewal"
- Switching intent: "moving off", "ripping out", "want to replace", "canceling X"
Signals that lower it, or disqualify
- Show-and-tell or launch: "I built X", "just shipped", "launched today", "here's my project"
- News, memes, hot takes, political or AI discourse with no purchase ask
- Past-tense decision already made: "we just signed with...", "we chose X last month"
- Pure venting, no question or ask
- Author appears to BE the vendor or an employee
A thread the model cannot write a specific triggering event for is capped at 0.40 by the prompt. That is the single rule doing most of the work: without a concrete thing the author just said, there is nothing for you to reply to.
Lead type
- buyer_ready
- evaluating
- switching
- advice_seeker
- not_relevant
Why the quoted phrases are verbatim
Alongside the score the model returns up to four buyer signals, and the prompt requires each one to appear character for character in the post. It is told not to paraphrase and not to invent. That rule is what makes the score checkable: when you disagree with a number, the phrases show you where it went wrong, and if a phrase is not actually in the thread then the output is wrong in a way you can see rather than wrong in a way you have to take on trust.
The same rule is enforced on our side. The evidence rows on the home page are rejected at build time if the quoted phrase is not present in the quoted excerpt.
Answer rank, and what it is not
Answer rank is a second number, separate from intent, estimating how long a thread stays useful. It is not search volume. We query no keyword tool, we have no impressions data, and we do not know where any thread ranks in Google or whether a model has ever quoted it. A language model asked for "search demand" will return a confident number for something it cannot observe, and that number is worth nothing.
What we actually compute, in full:
- durability: a model judgement from 0 to 1 on whether the question is evergreen or tied to a moment, and whether people ask it again. Weight 0.65.
- reach: log10(1 + upvotes + 3 x comments) divided by log10(1 + 2000), clamped to 1. Weight 0.35. A comment counts for 3 upvotes because a thread people return to and argue in is a thread that keeps being read.
- maturity: below 48hours old, measured reach is shrunk toward the durability estimate in proportion to the thread's age.
The maturity correction is the part that matters most. A thread posted an hour ago has no engagement yet, and reading its two upvotes as evidence of low value would bury exactly the threads worth answering first. The weights above are imported into this page from the module that computes the score, so this description cannot drift from the formula.
The monitor scores it automatically only for leads that already cleared the intent threshold, because it is a second model call and a thread nobody is buying from rarely earns one. Any other lead can be ranked on request from its detail panel.
Direct messages: when, and who sends them
PluckLead will write one message to one person, and it will not send it. There is no Reddit write credential anywhere in the product, no scheduler on this path, and no function that accepts more than one lead. Pressing the button copies the message to your clipboard and opens Reddit's own composer in your browser, under your session. Everything after that is you.
A lead is only eligible when all of these hold, which is why the button is absent far more often than it is present:
- the lead is from Reddit, where a composer deep link exists
- the intent score is at least 0.75, the anchor for explicit shopping
- the lead type is buyer_ready or switching, meaning they publicly asked for something a vendor supplies
- the author still has a resolvable username
Past that gate, the model is instructed to refuse. It returns nothing if the author is not clearly looking for something a vendor could supply, if the post is a showcase, launch, vent, meme or poll, if the author appears to be a vendor themselves, if the useful thing it would say is already the top answer in the thread, or if the only message it could write is a pitch. A refusal is the correct outcome, not an error, and the interface says so.
One thing we could not verify: whether Reddit still prefills its composer from the URL parameters. It answers an unauthenticated request with a bot interstitial, so checking would take a logged-in session we did not open. The message is therefore copied to your clipboard as well, and the button promises only that.
What the free tools share with the paid product
The buyer intent scanner calls the same intent model with the same rubric the paid product uses, so a score you get for free is the score you would get inside the product.
The reply generator does not. It runs a shorter public prompt, because the paid draft prompt takes your product context, your previous drafts and your voice, and there is nowhere to put those without an account. The drafts it produces are therefore more generic than the ones in the queue. We would rather say that than imply otherwise.
The subreddit finder is a different job and a different model. It does not score intent.
Posting: what is off, and what would have to change
We shipped a Reddit posting pipeline in June 2026. It put connected accounts at risk, including our own, and we switched it off across the product and left it off. Three things hold that in place today:
- A server flag, REDDIT_POSTING_ENABLED, which is unset. With it unset the posting action returns a permanent "disabled" error to every caller.
- The scheduler that drove it, reddit-drip-dispatcher, is no longer registered. A cron test fails if anything re-registers a job that targets the posting path.
- Two test suites, listeningOnly and queue-posting-gate, fail if a reply ever reaches Reddit regardless of which caller asks.
Being straight about the gap: an Autopilot toggle is still present in settings, controlling a pipeline that cannot run. It is on its way out. Until it is gone, the accurate statement is the one above, which is why the home page says it that way instead of claiming no setting exists.