The problem
Outbound quality and outbound volume are usually a trade, we wanted both.
Manual prospecting is 15-25 minutes per company: open the site, figure out what they do, decide if they fit, find the angle, write the email. Across a 16,000-company base that is roughly two person-years of work, so in practice it never happens.
The standard shortcut is merge-field blasts ('Hi {{first_name}}, love what {{company}} is doing'). Those burn sender domains and get the exact reply rate they deserve.
The approach
A seven-stage pipeline where the expensive model only ever sees the good leads.
Research: every domain gets scraped, free path first; anti-bot and JS-heavy sites fall back to a pay-per-success fetcher, so dead sites cost zero. A liveness gate skips unreachable companies before any model spend.
Qualify: a cheap model scores each company against our ICP with hard disqualifiers checked in order (wrong category, holding-company ownership, too big, too small), producing a 0-100 score, an A/B/C tier, a campaign route and the evidence behind each call.
Personalise: for the tiers we choose (that's a checkbox, not a code change), a mid-tier model writes an operational observation, what their current process looks like and where it leaks, and the premium model drafts a 9-step LinkedIn + email + call sequence that quotes it. Proof points come only from a tagged knowledge base of real cases.
The spend control is the point: qualifying a company costs about a cent, so we can afford to look at all sixteen thousand. The expensive copy model only ever runs on the few hundred that earn it.
What was messy
Where the first versions failed, building it honest.
Dead and parked domains poisoned early runs, the qualifier would hallucinate a company from a placeholder page. We added a pre-flight liveness gate: unreachable site plus no enrichment metadata means the company is skipped before any LLM spend.
Anti-bot walls (Cloudflare-class) blanked out a chunk of the base. A rendering fallback that bills only on success fixed coverage without unpredictable cost, a failed fetch costs nothing.
The sequence model kept drifting from the configured cadence, inventing step 10 or merging two emails. We stopped trusting the model with structure: steps map onto the configured plan by key, so the cadence is enforced by code, and the model only writes the words.
The outcome
Prospecting economics that make personalised outbound rational.
- Research + qualify, per company15-25 min manual → under 1 minautomated
- Cost to qualify a companySDR time → ≈1¢ in tokens~99% cheaper
- Personalised 9-step sequence2-3 h manual → ≈35¢ draftreview-only
- Sends without human approval0by design
How we measured it
Every number above is visible in the tool itself.
Cost per company: token usage is logged per run and per stage; the control panel shows ≈$ per run next to each entry. Qualify averages ~5k cheap-model tokens (≈1¢); a full qualified lead, research, qualify, audit, 9-step sequence on the premium model, lands around 30-40¢.
Pipeline integrity: every stage writes an audit log line, ran, skipped (with the reason), or failed, so a run over thousands of companies is fully traceable after the fact.
Time per company: the pipeline processes a company in well under a minute against 15-25 minutes of equivalent manual research. We treat reply-rate claims as not yet earned, the engine is new; ask us on the call how it's converting.
What we did not automate
Nothing reaches a human inbox without a human decision.
Every sequence is a draft until an operator approves it. Push-to-sending-tool is a manual button, per batch, after review.
Every stage that costs money, rendering fallback, contact discovery, review scraping, news intel, ships toggled OFF and is enabled per run from the panel.
Disqualification reasons are kept, not just the score, so a human can audit why the engine said no and overrule it.
What's next
The same engine, white-labeled for your agency, or your clients.
Everything segment-specific: ICP, disqualifiers, scoring, hypotheses, message cadence, tone, is config, not code. Pointing the engine at a different vertical is a settings change with named presets.
For agencies, that means two offers: we run it for your own new business, or we build it into your stack as a service you sell to clients.