The pipeline that drafts and queues about 20 personalized outreach touches a day for roughly $0.40 in Claude inference, why I never let the model press send, the Haiku scoring pass that cut drafting cost 60%, and the send limits that keep you out of spam.
I run about 20 outreach touches a day for roughly $0.40 in Claude inference, and I have not hand-written a cold email in four months. The model never sends anything on its own. It researches, scores, drafts, and queues. A one-tap approval and a warmed sending domain do the actual sending.
AI outreach automation is a pipeline where a model does the research, scoring, and drafting of outreach messages while a human or a deterministic rule controls the send button. The model is the writer and the analyst. A person or a rule owns the send.
My pipeline has four stages:
The whole thing is bounded. Each stage is a job that does one thing and exits. No long-running agent deciding on its own to email 400 people at 2am.
Cheap, if you split the work across models. Scoring is high-volume and low-stakes, so it runs on Claude 3.5 Haiku at $0.80 per million input tokens and $4 per million output. Drafting needs more judgment, so it runs on Claude Sonnet 4 at $3 in and $15 out.
Here is the per-touch math:
| Stage | Model | Tokens (in/out) | Cost |
|---|---|---|---|
| Score one lead | Haiku 3.5 | 1,500 / 200 | $0.002 |
| Draft one message | Sonnet 4 | 2,000 / 300 | $0.011 |
| Per qualified touch | combined | 3,500 / 500 | $0.013 |
Twenty sends a day is about $0.26 in drafting. The scoring pass runs over far more candidates than I send, since most get rejected, so the real daily total lands near $0.40. For the record, drafting this post cost about $0.17.
The lesson that took me a month: do not draft with Sonnet until Haiku has already thrown the lead out. Scoring first cut my drafting spend by about 60%, because the expensive model never sees a lead that was going to fail anyway.
Two reasons, and both have cost me before.
First is compliance. Cold email in the US is governed by CAN-SPAM: a real physical address, a working unsubscribe, no deceptive subject lines. Manufactured personas and planted reviews fall under FTC rules that run up to about $51,000 per violation. A model that sends autonomously can put you on the wrong side of that for a week before you notice.
Second is deliverability. The fastest way to burn a sending domain is to blast 200 cold emails on day one from a domain with no warmup history. Once you land in spam, you stay there. The gate is where a human catches the message that reads like a robot wrote it, because sometimes a robot did.
The model invented a product launch the prospect never had, then congratulated them on it. The approval gate caught it before it sent. Now every personalization line has to cite a real field from the lead record or it gets dropped. Ungrounded flattery is worse than no personalization.
The scoring model has one job: reject anyone who is not a fit. For me that means anyone technical enough to build the thing themselves. A developer, an AI engineer, a CS student. They are not buying a website from me.
The disqualifier reads the whole headline, not the job title alone. "Founder" passes. "Founder and full-stack engineer" does not. This one rule, run on Haiku for a fraction of a cent per lead, is the difference between a list worth drafting for and a list that wastes Sonnet tokens.
Personalization is where automation usually falls apart. The fix is to forbid the model from inventing anything. Every variable in the template maps to a real field. If the field is empty, the line is cut.
Write one outreach message to {{first_name}} at {{company}}.
Rules:
- Under 4 sentences.
- Reference exactly one specific fact from: {{headline}}, {{recent_post}}.
- If both fields are empty, write a generic message with no fake specifics.
- Never open with "Saw your work" or "I came across your profile".
- No "I'd love to connect". No compliments you cannot source.
- Plain declarative sentences. No em dashes.
Offer: a $1,499 website build, delivered in two weeks.
The {{recent_post}} and {{headline}} fields come straight from the lead record. The model fills the deterministic slots and resolves the descriptive ones. When both source fields are blank, it writes a clean generic message instead of hallucinating a hook. That single instruction killed most of the embarrassing sends.
This is the part the demos skip. The model can draft 500 messages in a minute. You cannot send 500 messages in a minute without getting flagged.
| Channel | Safe daily volume | Hard cap |
|---|---|---|
| LinkedIn invites | 15 to 20 | ~100 per week |
| LinkedIn 1st-degree DMs | 50 to 80 | no fixed limit |
| Cold email (warmed domain) | 20 to 40 | depends on warmup age |
| Cold email (cold domain) | 0 | warm it first |
A new sending domain needs two to four weeks of warmup before it carries real volume. Start at 10 to 20 a day and ramp. The drafting queue can hold a backlog all it wants. The send rate is what keeps you out of spam.
Not at five messages a day. At that volume, writing them yourself is faster than building the pipeline. The math flips around 15 to 20 touches a day across two channels, where the scoring and drafting work compounds and the gate is the only manual step left. I spend about ten minutes a day approving a queue that would have taken two hours to research and write by hand.
Drafting has no real ceiling. Sending does. Stay under 100 LinkedIn invites a week and 50 to 80 first-degree DMs a day. For cold email, ramp a warmed domain from 10 up to 40 a day over a few weeks. The model fills the queue; the rate limit drains it.
It can, and you should not let it. Keep a human or a deterministic rule on the send. That gate is where you catch hallucinated personalization and CAN-SPAM mistakes before they cost you a domain or a fine.
Claude 3.5 Haiku at $0.80 per million input tokens. Scoring is a reject-or-keep decision that does not need Sonnet. Run the cheap model first so the expensive one only ever sees qualified leads. That ordering cut my drafting cost by roughly 60%.
The one change to make today: put a scoring pass in front of your drafting pass, and never let the same job that writes a message also send it.
Tired of re-keying the same data between tools? Pylonworks builds custom automation and internal tools for businesses without a developer, on a fixed quote you approve up front. Tell us what's eating your time