A sales team that buys intent data and pipes it into a dashboard has bought a report. A sales team that routes the same data into the CRM, scores it against ICP fit, and puts it in front of the right rep at the right hour has bought a motion. The difference is entirely plumbing.
Over the last year we have built this in HubSpot and Salesforce for about a dozen B2B teams. The architecture is consistent enough that it is worth writing down.
Most teams start too broad. A signal is only useful if a rep can act on it within a week and if the action is obviously different from what they would have done anyway. In practice that narrows the list quickly:
Everything else — funding rounds, generic content downloads, LinkedIn follows — goes into the enrichment layer as context, not into the queue as a trigger.
Signals belong on the company object. We create a small set of properties — signal type, signal date, signal source, signal strength — and write to them from Clay or the vendor webhook.
The winning setups were never the ones with the best data. They were the ones where acting on the data was the path of least resistance.
Collapsing ICP fit and buying intent into one number destroys information. A perfect-fit account with no activity needs nurture; a poor-fit account browsing pricing needs a qualification call, not a sequence.
Signal-driven tasks should disappear. We set a 10-day time-to-live on every triggered task: if it has not been worked, it closes and the account drops back to the standard cadence.
The metric that matters is not how many signals fired. It is the reply rate and meeting rate of signal-triggered outreach against your baseline cadence over the same window.