GTM Engineering
Signal-Based Outbound: 10,000 Names or 620 Reasons to Call
Spray a static list and reply rates sit at 1 to 3 percent. Wait for a real buying signal and they hit 10 to 20 percent. Here is the build order, the deliverability ceiling, and a worked example that reconciles to the meeting count.
· 15 min read
For a decade, outbound meant volume. Buy a list of 10,000 names, load it into a sequencer, spray all 10,000, and book from the 2 percent who reply. That arithmetic broke. Woodpecker’s analysis of 26,000 campaigns puts spray-and-pray reply rates at 1 to 3 percent and signal-triggered outbound at 10 to 20 percent. Same rep, same product, roughly seven times the reply rate, because one path emails a static list on a calendar and the other waits for a funding round, a new VP, a champion who changed jobs, then moves.
The list is not the asset. The reason to call is the asset. A list of 10,000 high-intent accounts sitting in a spreadsheet does not count until it is wired to a trigger, and once you wire the trigger the number you send collapses hard. Ten thousand names become 620 accounts that have a current reason to talk this week, and those 620 book more meetings than the full ten thousand did. Watch the collapse before you read the argument.
The automation is the cheap part. You can wire a trigger in an afternoon: detect the event, enrich the account, draft the opener, route it to a sender. The expensive part is deciding which signals predict a conversation, because every signal you add is a standing credit cost and a standing source of noise. Wire the wrong ones and you rebuild the spray machine with extra steps and a bigger bill.
A signal is an event with a deadline
The signals that pay for themselves share three traits: they are timely, they are specific to your ICP, and they point at a problem you sell into. A Series B raise is a signal. A Series B raise stacked with five open data-engineering reqs is a far better one, because the second half tells you what the company is about to build and where you fit. A single event alerts. Stacked events convert. The distinction is the whole discipline: a lone data point rarely clears the bar, and two correlated data points on the same account clear it easily.
Timing is not a nice-to-have on top of the signal. It is inside the signal. New executives spend roughly 70 percent of their discretionary budget in the first 100 days, so a VP-hire signal has a shelf life measured in weeks. Funding tends to convert if you reach out 7 to 14 days after the announcement, once the congratulations noise has died and the mandate is real. A pricing-page revisit is a same-day signal or it is nothing. Reply rates decay on the same clock: a fresh signal replies near 22 percent at 72 hours, around 11 percent at 7 days, and about 7 percent at 14 days. The event that fired last quarter is a fact, not a signal.
Run every candidate through one question before it earns a wire. Does this event imply a job that someone at this account now has to do, and can I help with that job? If the answer is no, the signal stays a dashboard number and never routes to a sender.
The ranking that decides your build order
Not all signals are equal, and the gap between the best and the worst is the difference between a 15 percent reply rate and a queue that replies like a wall. Here is how the common signals rank on the two things that matter: whether the signal names a specific human, and whether it implies a job right now.
| Signal | Freshness window | Names a human? | Implies a job? | Verdict |
|---|---|---|---|---|
| Champion job change | Weeks, decays fast | Yes, the champion | Yes, warm door | Wire first |
| PQL / usage spike (PLG) | Days | Yes, the active user | Yes, first-party | Wire first |
| Web de-anonymization | Real-time | Sometimes, US only | Yes, active research | Wire, US accounts |
| Funding, relevance-gated | Weeks to months | No, needs enrichment | Yes, budget plus mandate | Wire, pair with hiring |
| Technographic install | Months | No, needs enrichment | Sometimes, replace case | Wire selectively |
| Role-specific hire | Weeks | Via hiring manager | Yes, written in the JD | Wire |
| LinkedIn engagement | Days | Yes | Weak on its own | Stack only |
| Third-party intent score | Vague | No | No | Skip |
The two at the top are worth the most and cost the least to reason about. A champion job change is a warm door in a cold list: someone who already trusted your product now sits at a new company with buying authority and no incumbent loyalty. UserGems reports a 114 percent win-rate lift, a 54 percent larger deal size, and a 12 percent shorter cycle when outbound rides that signal instead of a cold list. First-party usage signals win for a different reason. A jump in product usage inside an account is current and yours, not a vendor’s guess about intent, and PQLs convert at 20 to 30 percent when the motion is built well.
View as table
| Item | Value |
|---|---|
| Champion job change | 18% |
| PQL / usage spike | 15% |
| Web de-anon | 12% |
| Funding + hiring | 10% |
| Role-specific hire | 8% |
| 3rd-party intent | 2% |
The bottom of the table is where credits go to die. A third-party intent score with no named contact is not a lead source. You cannot email a heat map. An anonymous website visit you cannot tie to a person is the same problem in a different wrapper. I wired a third-party intent feed once because the dashboard looked impressive at 400 in-market accounts a week, and it produced a queue that felt full and replied like a wall, because none of the 400 named a human or implied a job. The feed survived two renewals on the strength of a number that booked nothing, which is the quiet way a bad signal stays in the stack.
The deliverability ceiling caps the whole game
Volume outbound assumes you can send as much as you want. You cannot, and the reason is now written into email law. Since February 2024 for Gmail and Yahoo, and May 2025 for Microsoft, bulk senders must pass SPF, DKIM, and DMARC with alignment, honor one-click unsubscribe within two days, and hold spam complaints under 0.30 percent. That 0.30 percent is a hard cap you never want to reach; the working target is under 0.10 percent. Cross it and placement collapses, so 98 percent delivery quietly becomes 40 percent inbox and you never see the bounce.
That ceiling sets the arithmetic. Plan on 30 to 50 sends per inbox per day, with 2 to 3 mailboxes per domain, after a 2 to 4 week warmup. To spray 10,000 contacts inside a week you are standing up dozens of inboxes across many secondary domains, warming each one, and rotating sends so no single mailbox trips a filter. To send 620, you barely stress a handful of inboxes and your complaint rate never gets near the cap, because the 620 people have a reason to hear from you and mark you spam far less. The signal path is not only higher-converting. It is the only path that respects the ceiling without an infrastructure sprawl you then have to maintain forever.
A worked example that reconciles to the meeting count
Take the same 10,000-name list and run it down both paths. The spray path emails all 10,000. The signal path enriches to a valid, reachable set, gates that set to accounts carrying a live signal, and sends only those. The numbers below are the ones behind the survivor field at the top of this piece.
| Path | Contacts sent | Reply rate | Replies | Book rate on replies | Meetings | Sends per meeting |
|---|---|---|---|---|---|---|
| Spray all 10,000 | 10,000 | 2% | 200 | 15% | 30 | 333 |
| Signal-gated | 620 | 15% | 93 | 40% | 37 | 17 |
The spray path sends 10,000 emails and books 30 meetings, one for every 333 sends, while burning reputation across three dozen inboxes and flirting with the complaint cap. The signal path sends 620 emails and books 37 meetings, one for every 17 sends. It books more meetings from 16 times fewer emails. The book rate on replies also splits, because a cold reply is often “take me off this list” while a signal reply is a person with a live reason to answer, so a larger share converts to a held meeting.
The reason spray still books anything is pure scale: 2 percent of 10,000 is a real number of replies. But that number is bought with volume the deliverability rules no longer let you run cleanly, and it trains a rep to work a queue that is mostly cold. The signal path gets to a higher meeting count with a queue the rep can trust, and trust is the compounding asset here. A rep who opens a queue of 620 accounts that each carry a current reason to talk works all 620. A rep who opens a queue of 10,000 mostly-cold rows skims it, and the one genuinely hot account in the pile gets the same two-minute treatment as the noise.
The artifact: gate the list before it sends
The whole discipline lives in one query. Enrich first, then join the enriched, valid contacts to a signals table, and let only rows with a fresh, high-confidence signal through to the sender. Everything that fails the join stays a dashboard number.
-- Gate the enriched list to accounts carrying a live signal.
-- Only these rows earn a send; the rest stay a report, never a sequence.
SELECT a.account_id,
a.domain,
c.contact_id,
c.verified_email,
s.signal_type,
s.observed_at
FROM accounts_enriched a
JOIN contacts_enriched c ON c.account_id = a.account_id
AND c.email_status = 'valid'
JOIN account_signals s ON s.account_id = a.account_id
WHERE a.icp_tier IN ('T1', 'T2')
AND s.signal_type IN ('champion_job_change', 'pql_usage_spike', 'funding_plus_hiring')
AND s.observed_at >= CURRENT_DATE - INTERVAL '14 days' -- freshness window
AND s.confidence >= 0.8
ORDER BY s.observed_at DESC;
Two lines carry the argument. The observed_at >= CURRENT_DATE - INTERVAL '14 days' clause enforces the decay curve, so a signal that fired last quarter never routes. The signal_type IN (...) list is the top of your ranking table and nothing below it, so a third-party intent score cannot sneak into a sequence. Change the freshness window per signal (same-day for a pricing-page revisit, 14 days for funding) and you have the entire policy encoded in a query a scheduler runs every morning.
Machine handles volume, human owns two decisions
Once a signal clears the bar, the system runs the pipeline: detect the event, enrich the account and the specific contact the event implies, let a model draft an opener that cites the signal by name, route it to the sender. Two decisions stay with a person, and they are the two that are expensive to reverse and cheap to check.
Whether the trigger is real takes a person about five seconds to eyeball. Is this actually a Series B, is this actually the champion who used us, or did the feed match on a name collision. Whether a new segment belongs in the program is a fit judgment no model has the context to make alone. Everything else, the research and the draft and the routing, is high-volume and low-stakes per record, which is what the machine should own. Draw the line wrong and the cost is not theoretical. A draft once cited a funding round that had closed for a different company with a similar name, and the sentence read clean and confident. A person caught it in the sample read in three seconds. At volume, without that read, a congratulations that is flatly wrong goes out to every lookalike in the batch, each one filing you under “does not know who I am,” with your domain on it.
| Volume blast | Signal trigger | |
|---|---|---|
| What starts it | A static list and a calendar | An observed event inside a freshness window |
| Who gets emailed | Whoever the list had | The person the event implies |
| First line | Template, no specific hook | Cites the signal by name |
| Reply rate | 1-3% (Woodpecker) | 10-20% (Woodpecker) |
| Sends per meeting | ~333 in the worked example | ~17 in the worked example |
| Deliverability | Dozens of inboxes near the 0.30% cap | A handful, well under the cap |
| Failure mode | Reputation burn at volume | A false trigger, caught in the sample read |
The build order: wire one rung at a time
Do not turn on eight signals at once. That rebuilds the noise you were trying to kill and gives you nothing to attribute. Eric Nowoslawski’s crawl-walk-run holds here: add one new signal from the next tier, prove it books meetings, then add the next. The ladder below is the order I wire, bottom to top, each rung earning its place before the one above it lights up.
- L5Orchestrated multi-signal stackingstacked
Only now combine signals into a scored trigger: usage spike on a funded account with a recent champion arrival. Stacked events convert where any single one would not. This is the top rung, not the first.
- L4Web de-anonymization, USreal-time
Add RB2B or similar for US traffic once the warmer signals run. Real-time and active-research, but coverage is US-skewed and person-level match is partial, so it stacks, it does not lead.
- L3Funding plus hiring, stacked7-14d
A raise alone is noise. A raise plus open reqs for a role you sell into implies budget and a mandate with a deadline. Reach out 7-14 days after the announcement, not the same day.
- L2Champion job change+114%
Watch your closed-won and active-user contacts for a company change (UserGems). A past champion at a new company is the warmest cold door there is: +114 percent win rate, +54 percent deal size.
- L1First-party usage and PQLs20-30%
Start with the signal you already own. A usage spike or a PQL is current, first-party, and names the active user. No vendor guess, no enrichment gap. Convert at 20-30 percent (Benchmarkit-band PQL data).
- 1
Pick the rung closest to your buying moment
For PLG that is L1, a usage spike. For sales-led it is often L2, a champion job change. One signal, not five.
- 2
Run it through the one question
Does this event imply a job I can help with, for this account, right now? If it does not name a human and a job, drop down a rung.
- 3
Enrich the right contact, not the whole company
Pull the event, then enrich the specific person the event implies. A verified email on the right contact beats ten guesses, and a four-tool waterfall returns valid for about 62 percent.
- 4
Let the model draft an opener that cites the signal
Ground it in the specific fact, cap the length at 50 to 125 words, and read a sample every run so a fabricated detail never reaches a prospect.
- 5
Route only gated rows, keep two decisions human
Who gets contacted and whether the trigger fired for real stay with a person. The scheduler owns the volume it cannot get wrong.
Done right, a rep opens a queue of accounts that each carry a real, current reason to talk, and they work every one because the queue has earned their trust. This is the highest-leverage layer in the SDR to GTM engineer path, and it only stands on an enrichment layer you trust, which is why the enrichment waterfall comes first: the 620 in the worked example are the survivors of a waterfall, not a raw provider filter. Start with one signal, end to end, this week. One sharp trigger running beats five you are still arguing about, and 620 reasons to call will out-book 10,000 names every quarter you measure it.
Keep reading
One email. Every week.
One email a week: a system I built or broke, with the config, the numbers, and what I would change. No roundups, no theory, unsubscribe whenever it stops being useful.
The newsletter opens soon.
Connect a provider in src/config.ts