Most tools sold as "intent data" are counting something adjacent to intent: pages visited, keywords matched, a company that appeared in a topic cluster. All of it is correlation, and none of it tells you what the person actually needs or why you should call them today rather than next quarter.
A buying signal, defined usefully, is narrower:
Public evidence that somebody has a problem they are already spending money on, or about to.
That definition does real work. It rules out a mention of your brand, which is attention rather than need. It rules out a page view, which is anonymous and says nothing about budget. And it rules in three things most tools ignore entirely: a person describing the problem in their own words, a company taking an action that only makes sense if the problem exists, and a customer publicly complaining about the vendor they already pay.
The two questions worth separating
The hard part of intent is not detection. It is knowing whether the tool understood you or understood the world, and most products give you one verdict that blurs the two.
Openpulse's classifier answers them separately, and keeps them apart on screen:
1. SITUATION What is happening, stated WITHOUT reference to the seller.
"A software company is hiring three support agents in Leeds."
2. OPPORTUNITY Does that create a need THIS seller can fill?
"They are scaling support; you sell support automation."You see the fact, and you judge the leap yourself. When a lead is wrong you can tell immediately whether the tool misread the world or misread what you sell, which is the difference between a bug you can fix by editing your plan and one you cannot fix at all.
It has a second effect over the life of a workspace: the same situation can be re-read for a different seller later. A company hiring three support agents is a lead for support automation, for a recruiter, and for whoever fits out the office. The situation does not change; only who it is an opportunity for.
Evidence, not vocabulary
The score is 0–100 across seven components. The most important is purchaseIntent, worth 30, and it measures evidence rather than phrasing.
That distinction is a real bug most intent scoring still has. Ask "did they say they want to buy" and every derived signal scores zero, so a company that has hired three support agents ranks below someone idly asking Reddit for recommendations. One of them spent money. The other typed a sentence.
| Band | What it means |
|---|---|
| 24–30 | They state the need, or are actively shopping |
| 16–23 | The need follows in one step from an action they have taken: hired, leased, raised, migrated, opened, been fined |
| 8–15 | One step from something they said but have not acted on |
| 0–7 | No need this seller can fill |
Signals scored this way are marked scoreVersion: 3. Nothing is retroactively re-scored (that is one model call per historical row for no new information), and the marker is what lets the interface say the scales differ rather than implying they do not.
One hop, and the evidence must be in the post
This is the constraint that separates a derived signal from an invented one, and it is the reason this page can make the claims above without hedging.
ALLOWED "hiring 3 support agents in Leeds"
→ scaling support in Leeds [stated: role, count, place]
→ you sell support software hops = 1
REFUSED "photos from a beach party"
→ attendees are probably affluent [ASSUMED: not in the post]
→ they buy luxury cars → no opportunityTwo stacked assumptions is indistinguishable from invention. A model told to find any way something could be a sale will find one every time. That is not a failure of the model, it is what was asked.
Three things hold the line. The prompt carries a worked failure as well as a worked success, because a model shown only successes reaches further to produce one. Every signal records inferenceHops (0 they said it, 1 one step away), so you can filter the speculative half out entirely. And the prompt states which way to err:
A wrong lead costs a salesperson a morning and some of the customer's goodwill. A missed one costs nothing they will ever notice. Prefer to miss.
That asymmetry is the correct one for outbound, and it is the opposite of what a tool billed per mention is incentivised to do.
Where the evidence comes from
Five shapes of signal, on the sources that actually carry them:
| Evidence | Where it shows up |
|---|---|
| Someone describing the problem in public | Reddit, Hacker News, X, LinkedIn |
| A company hiring for the human role your product replaces | Ashby, Greenhouse, Lever, LinkedIn Jobs |
| A customer publicly fed up with a named competitor | Reddit posts and comments, G2, Trustpilot, YouTube |
| A business whose own reviews prove the pain | Google reviews |
| A situation with money attached: a raise, a lease, a fine | Whatever indexed it |
Coverage is labelled per source before you commit: full text for Reddit and Hacker News, snippet for LinkedIn, X and the job boards, best effort for Facebook. A model judging a 268-character search snippet is the single biggest driver of bad labels in this category, and it is invisible in every product that publishes a platform count instead.
You can audit the filter
Precision claims are cheap. These are the four questions worth asking any vendor, and this product answers all four:
- What did you throw away? Every rejected candidate is kept for 14 days with a reason:
shape,off_topic,excluded,blocked,too_old,duplicate,reranked_out,low_score,noise. Without them precision has no denominator. - Which of my queries are dead? Per-query and per-source yield, with a query that produces candidates but no signals for three runs disabled automatically and reported in the run log.
- Did the model read the post or a snippet? Labelled per source, and downgraded automatically when a vendor key is missing.
- Was this stated or inferred?
inferenceHopson every row.
Cheap gates run before any model call, so filler costs nothing: page shape, keyword topicality, exclusions, blocked domains, recency, duplicate collapse. Then a reranker scores what survives and only the top 25 reach the classifier. On a reference listener that took a run from 102 classification calls to 37 while doubling the search results pulled.
Getting the signal out
Email summaries per run, urgency alerts for the few worth interrupting somebody for, signed webhooks (signal.created, signal.urgent, run.completed, run.failed, pipeline.stage_changed) into your own systems, a scoped REST API, CSV in HubSpot's own import headers, and an MCP server so your assistant can read the workspace directly.
There is no send button, and there will not be one. The product's claim is that it finds people worth talking to, not that it talks to them.