A buying signal is worthless until it's wired to an action. Most teams have no shortage of signals: funding rounds, new hires, job changes, intent data, product usage. They collect them in a dashboard, glance at the feed once a day, and reach out three weeks later when the moment has passed. The detection was never the problem. The win isn't spotting the signal, it's building a system that detects it, scores how urgent it is, and triggers the right play before the window closes.
A signal you act on in an hour and a signal you act on in a month are not the same signal, even if the event is identical. This is how to build the system that catches the signal, ranks it, and fires.
What counts as a buying signal (and what doesn't)
A buying signal is an observable business event that changes a company's odds of buying. The word that matters is observable: it has a source you can point to, a press release, a job posting, a product event, a page visit. That's what separates a signal from a hunch.
Flip each event to see what it means, what it triggers, and how long you have
Every buying signal pairs with one specific play and one window. A signal with no mapped play and no clock is just trivia.
Two of those cards are different in kind. A SOC 2 badge or a competitor's logo in the tech stack tells you who a company is. A pricing-page visit or a funding round tells you what they're doing right now. Fit signals tell you who to talk to. Intent signals tell you when. You need both, but only intent signals start the clock, and the clock is the whole game.
Step 1: Map every signal to a play before you turn anything on
Start with the play, not the signal. The most common mistake is turning on a feed of funding announcements and then asking "what do we do with these?" By then you have 200 rows and no motion. Decide the action first, then go find the signal that should trigger it.
Run your closed-won deals through one question: what observable event happened in the 90 days before each deal opened? New exec, new funding, a champion who'd used you elsewhere, a competitor they were unhappy with. Those recurring events are your signals. Everything else is noise you'll pay to collect and never act on.
A signal with no pre-wired play is a notification, and notifications get ignored. For each signal you plan to track, write the play in one sentence before you build anything: who gets contacted, with what message, on what channel, in what window. If you can't write that sentence, don't track the signal yet.
Step 2: Set up signal detection in Clay
Detection is the part most teams overspend on and still get wrong, because they treat every signal as a one-off list buy. In Clay, a signal is a standing monitor: you point it at a set of companies or contacts, pick what to watch for, set how often it checks, and it surfaces new events on a schedule instead of as a stale export.
Pick a signal type to see what it needs, how often to run it, and where to send it
Social profile URL plus company domain, to separate a move from a promotion.
Daily
Reaching a champion in their first weeks beats reaching them in month three.
Slack alert plus CRM update
Each signal type has its own required inputs and its own recommended refresh rate. A job change checked monthly is a job change you missed.
You set how often each signal runs when you create it; run job-change and funding monitors on a tight cadence. Signals can be tuned by frequency, though not pinned to a specific time of day.
Clay's default signals cover the events that move most deals: career moves, funding and news, job postings, brand mentions, and website intent, with the data sources and refresh logic handled for you. The custom signals are where the edge lives. You can turn any digitally accessible source into a signal, including a Google search query like "hiring for RevOps" or "publishes a newsletter," your product-usage data from a warehouse, or competitor mentions pulled from call transcripts. Those are signals your competitors have no structured way to monitor.
Step 3: Enrich the signal so a rep can act without research
A raw signal is an alert, not an action. "Acme posted a CISO role" is a row. A rep still has to find the right contact, get a verified email, and figure out what to say. That research gap is where most signals die: the alert fires, the rep is busy, and by the time anyone digs in, the moment is gone.
Attach the enrichment to the signal itself so the row arrives ready to work. When a signal fires, Clay can immediately find the right contact at that company, pull a verified work email and phone, add the firmographics and tech stack that shape the message, and run AI research on the company's recent news to generate a talking point. The rep opens a complete record, not a to-do list.
“Clay helps us identify and act on the signals that matter most, like funding announcements or leadership changes. It's made our prospecting process faster and more effective.”
Vanta's RevOps team runs exactly this pattern: RSS feeds monitor funding and news, job boards track postings for roles like CISO, and Clay identifies the right contacts and enriches them automatically, so the signal lands as a ready-to-contact record instead of a research assignment.
Step 4: Score the signal's urgency so the hottest ones go first
Not every signal deserves the same response, and treating them equally is how you waste your fastest motion on your coldest leads. A pricing-page visit from a VP at a target account and a blog view from an intern at an out-of-ICP company are both "website intent," and they are not remotely the same opportunity.
Urgency is a function of three things: how strong the signal is, how well the company fits your ICP, and how recently it fired. Score all three and let the math sort your queue.
Drag strength, fit, and recency to watch the right action change
Urgency score
62
Recommended action
Queue for a rep this week
Urgency is signal strength times ICP fit times recency. A strong signal from a poor-fit account that fired last month is not urgent at all.
The weights are not permanent. If competitor-mention signals close at higher rates than content downloads, raise their weight and demote the downloads. The scoring model should learn from your closed-won data, not sit frozen from the day you built it. To make the score trustworthy to sellers, output a plain-language reason field alongside the number, so the rep sees "Series B last week plus two pricing visits" and not just "87."
You can build the urgency classifier with an AI prompt that reads the raw event and returns a structured score. Drop this into a Claygent or AI column in Clay.
Classify this buying signal for sales urgency.Company: {{company_name}}Detected event: {{signal_event}}Source: {{signal_source}}Date detected: {{signal_date}}Our ICP: {{icp_description}}Return JSON only:{ "signal_type": "funding | hiring | job_change | intent | product_usage | other", "strength": 1-5 (how strongly this predicts a near-term purchase), "icp_fit": 1-5 (how well this company matches our ICP), "urgency": "high | medium | low", "reason": "one sentence a rep can read before reaching out", "recommended_play": "the single next action"}
Step 5: Stack signals to separate real momentum from coincidence
One signal is a guess. Stacked signals are a pattern. A pricing-page visit alone is interesting; a pricing-page visit plus a fresh funding round plus a new RevOps hire in the same two weeks is a company in motion. Single-signal triggers flood your reps with weak alerts. Stacked triggers surface the accounts actually worth a same-day call.
Stack signals on the account, then toggle the timing to see momentum change
Signals on Acme Corp
Add signals to see momentum build.
Buying intent lives in the clustering of signals in time, not in any single event. Three signals in two weeks beats the same three spread over six months.
To combine signals, route each one into a central account table with Send Table Data, then use a Formula column to total the active signals and flag an account once it crosses your threshold. Lookup Rows can count how many signals share a company before you act.
Step 6: Trigger the play automatically and route it where reps work
A scored, stacked signal still produces nothing if it sits in a table no one opens. The last step is wiring the signal to fire its play with no human in the loop until the human is actually needed: the rep reading a ready message, not the rep hunting for one.
Route by urgency, not by signal type. A high-urgency account should land as a same-day Slack alert to the owning AE with the contact, the reason, and a drafted opener already attached. A medium-urgency one should write straight into Salesforce or HubSpot as an enriched record on a sequence. A low-urgency one should drop into nurture and re-enter the queue only if a second signal fires. The system, not the rep, decides which path each signal takes.
This is what closes the gap between teams that collect signals and teams that win on them. When Oyster rebuilt its intent-based outbound around orchestrated signals in Clay, the difference showed up in reach.
Increase in accounts Oyster reached through intent-based outbound after orchestrating its signals in Clay.
Read the full storyThe same engine also revives dead pipeline: Oyster used signals of fit to wake dormant accounts that had gone quiet, routing them back into outreach the moment a new event made them relevant again. A signal system isn't only for net-new; it's a standing reason to re-engage every account you already have.
Common failure modes to avoid
The system breaks in predictable ways, and almost all of them trace back to detecting without acting.
The first is collecting signals you never wired to a play, so the feed grows and the response time doesn't. The second is uniform urgency: treating a cold blog view like a hot pricing visit and burning your fastest motion on your weakest leads. The third is acting too late, where the signal is real but the play fires three weeks after the window closed and reads as random. The fourth is single-signal noise, alerting on every weak event instead of waiting for a cluster, which trains reps to ignore the feed entirely. The fifth is a frozen scoring model that never learns from which signals actually closed. Fix the wiring, the clock, the scoring, and the routing, and detection takes care of itself.