Recap
- A demographics-only ICP (industry, headcount, title) tells you who fits in theory. It does not tell you who has a reason to reply this week.
- Build the ICP from triggers and behaviors instead. Demographics set the boundary, signals set the timing.
- Use a simple taxonomy: company-level triggers, role-level triggers, and your own first-party engagement.
- Then refine. Let replies and engagement promote signals that work and retire the ones that do not.
If your ICP is a list of firmographic filters (industry, headcount, a few titles), it is static and it is weak. It describes who could buy in the abstract and says nothing about who has a live reason to talk to you. Build your ICP from triggers and behaviors instead. Keep the demographics as a fence around the universe, then let real-time signals decide who inside that fence you contact and when.
Why does a demographics-only ICP fall short?
A demographic ICP is a snapshot of identity, and identity does not change often enough to drive outreach. A 200-person fintech in Austin looks identical in your filters whether they just lost their head of growth or are perfectly happy. You send the same cold email to both. One ignores it. The other might have needed you last Tuesday. The filter cannot tell them apart.
The deeper problem is timing. Most buying happens in a window that opens when something changes: a new hire, a new tool, a new round, a new regulation. A static ICP has no concept of a window. It treats a whole industry as equally reachable forever, which is why list-based outbound feels like spraying and gets the deliverability it deserves.
What does an intent-based ICP look like instead?
An intent-based ICP has two layers. The bottom layer is the boundary: the firmographics that say a company could plausibly buy at all. The top layer is the trigger set: the observable events and behaviors that say a specific account has a reason now. You only reach out when a boundary match also shows a trigger. That single rule kills most of the noise.
The shift is from a list to a queue. A list is everyone who fits, sorted once. A queue is everyone who fit and then did something, sorted by how fresh and strong that something is. Here is the contrast in plain terms.
| Dimension | Demographics-only ICP | Intent-based ICP |
|---|---|---|
| Core question | Who fits? | Who fits and has a reason now? |
| Shape | Static list | Live queue |
| Refresh | Quarterly, by hand | Continuous |
| Timing | Whenever you get to them | Inside the buying window |
| Gets better when | You buy a newer list | Replies tell you which signals work |
What signals should go in the taxonomy?
Group signals into three buckets so you can reason about them. Company-level triggers are events at the account: a funding round, a leadership change, a hiring spree, a new tool detected on the site, a registry or SEC filing, a press mention. Role-level triggers attach to a person: a job change, a new title, a public post about a problem you solve. First-party signals come from your own properties: a pricing-page visit, a repeat open, a reply, a demo no-show.
Not all signals are equal. Rank them by how directly they imply a need and how fresh they are. A pricing-page visit from someone inside your boundary is worth more than a funding round, because it is closer to intent and it just happened. Use a rough scoring scheme so the strongest, freshest signals rise to the top of the queue.
- Company triggers. Hiring for a relevant role, funding, tech adoption or removal, M&A, a public filing, a launch. These say the account is in motion.
- Role triggers. A new decision-maker in seat, a job change into a buying role, a public complaint about the problem you fix. These say the person can act.
- First-party engagement. Pricing visits, repeat opens, link clicks, replies. These are the strongest because they are about you, not the market.
How do you score and stack signals together?
One signal is a hint. Stacked signals are a reason. Score each signal on strength and recency, then add them up per account, with a decay so a six-week-old trigger counts for less than a six-day-old one. An account that just hired a relevant role and visited your pricing page should jump the queue ahead of one with a single stale signal.
Keep the math boring on purpose. You do not need a model to start. A weight from one to five per signal, multiplied by a recency factor, summed per account, gets you a workable priority queue. The point is not precision. The point is that the queue reorders itself as the world changes, which a static list never does.
How do you refine the ICP from reply and engagement data?
This is the part that makes a signal-based ICP compound. Every send is an experiment that tells you whether a trigger actually predicts interest. Tag each prospect with the signal that put them in the queue. When replies come back, look at which signals sit behind the good replies and which sit behind the silence. Promote the winners. Cut the losers.
Watch reply quality, not just reply rate. A signal that produces lots of polite no-thanks is worse than one that produces fewer real conversations. Over a few hundred sends per segment, patterns get clear: maybe funding rounds underperform for you while a specific tech change is gold. Feed that back into the weights and into the boundary itself. The ICP stops being a document you rewrite once a quarter and becomes a thing that learns.
One caution. Absence of a signal is not a reason to deprioritize an account that otherwise fits. Many real buyers leave no public trace. Use signals to pull people forward, not to permanently bury everyone who is quiet.
What does a simple framework look like start to finish?
Five steps, in order. First, set the boundary with firmographics so you are not chasing accounts that cannot buy. Second, pick three to five trigger sources you can actually watch every week. Third, score and stack signals into a priority queue. Fourth, reach out inside the window, with copy that names the trigger so the message earns its reply. Fifth, tag, measure, and refine from what comes back.
The hardest part is doing this every week without it decaying into a stale list again. That consistency is what an autonomous operator like LaunchSurface is built to hold, watching signals, reordering the queue, and folding reply data back into who it targets, so the ICP keeps moving instead of aging on a shelf. Whether you automate it or run it by hand, the principle is the same. Stop targeting who people are. Start targeting what they just did.
