Open rates are a vanity metric. The only number that matters is replies. Here’s how to write cold emails that start conversations — not just trigger a pixel fire in someone’s inbox.
I’ve audited outbound programs for product companies in the $3M–$50M range, and the failure pattern is consistent. The emails aren’t getting ignored because outbound is dead. They’re getting ignored because they commit the same four mistakes, every time.
They’re too long. The average cold email in a B2B sequence runs 180–250 words. Prospects spend 3–5 seconds deciding whether to keep reading. If your email looks like a wall of text on a phone screen, it’s done. The emails that get replies are 50–100 words. Three to five sentences. That’s it.
They’re too generic. “I help companies like yours grow revenue” could be sent by anyone to anyone. Prospects can smell a mail-merge from the first line. If your email reads like it was written for 5,000 people, it was — and it’ll perform like it. Generic emails earn generic results: the archive button.
They’re too salesy. The first email in a sequence is not the place to pitch. You don’t walk into a networking event and open with your pricing page. A cold email has one job: start a conversation. Not close a deal, not book a demo, not deliver your value proposition in bullet points. Start a conversation.
The CTA is wrong. “Would you be open to a 30-minute call to discuss how we can help you optimize your revenue operations?” That’s a 30-minute commitment from a stranger. Nobody says yes to that. The right CTA is low-friction: a question that can be answered in one sentence. “Is this a problem you’re dealing with right now?” — that earns replies.
All four of these mistakes stem from the same root: writing from your perspective instead of the prospect’s. They don’t care about your product. They care about their problem. Every word in your email should prove you understand that problem. For a deeper look at how all this fits together, see our complete outbound prospecting guide.
A cold email that gets replies has four components. Not three, not five. Four. In this order.
1. Subject line. Gets the open. We’ll cover this in detail below, but the rule is simple: short, lowercase, curiosity-driven. No clickbait. No ALL CAPS. No emojis. It should read like something a colleague would send, not something a marketer would write.
2. Opening line. Proves you know who they are. This is where 90% of cold emails fail. “I hope this email finds you well” is a delete trigger. Your opening line should reference something specific about the prospect — their company, their role, their situation — that makes them think: this person did their homework.
3. Value proposition. One sentence. Not a paragraph. Not a feature list. One sentence that connects their problem to a result you’ve delivered. “We helped a $12M SaaS company cut their sales cycle from 42 days to 26 by rebuilding their follow-up sequences.” Specific. Provable. Relevant.
4. CTA. A question, not a request. “Is this something you’re running into?” beats “Can I get 30 minutes on your calendar?” every time. The goal is to start a thread, not schedule a meeting. Meetings come from conversations. Conversations come from replies. Replies come from easy questions.
Before you send a cold email, pull it up on your phone. If the prospect has to scroll to see the CTA, it’s too long. If the first two lines don’t hook you, they won’t hook anyone. Every cold email should fit on one phone screen without scrolling. That’s roughly 50–75 words.
Your subject line has one job: get the email opened. Not sell. Not summarize. Not impress. Open.
Here’s what works:
Lowercase. “quick question about {company}” outperforms “Quick Question About {Company}” by 10–15% in open rates. Lowercase reads like a real email. Title Case reads like marketing. Your prospect gets 80+ emails a day. The ones from real humans are lowercase.
Short. Four to seven words. “{company}’s pipeline this quarter” works. “Helping B2B SaaS Companies Accelerate Revenue Growth Through Optimized Outbound Strategies” does not. If your subject line wraps on mobile, it’s too long.
Curiosity, not clickbait. You want the prospect to think “what’s this about?” not “this is spam.” “saw something re: {company}” creates curiosity. “10x Your Pipeline In 30 Days” triggers the spam filter — both the algorithmic one and the mental one.
No gimmicks. Re: when there’s no prior thread. Fwd: with no forwarded content. [Urgent] when it isn’t. These tricks worked in 2019. In 2026, they damage trust before the prospect even opens the email. If you need trickery to get opens, your targeting is wrong.
Three patterns that consistently perform: (1) “{company} + {specific topic}” — e.g., “{company}’s lead follow-up”; (2) “question about {role-relevant problem}” — e.g., “question about your outbound pipeline”; (3) “{mutual connection/trigger} + {company}” — e.g., “congrats on the Series B.” All lowercase. All under seven words.
Here’s a hard truth: most “personalization” is cosmetic. Swapping {first_name} and {company_name} into a template is not personalization. Neither is “I saw your recent LinkedIn post about leadership — great insights!” That line is in every AI-generated cold email on the internet. Prospects can spot it instantly.
Real personalization demonstrates that you understand the prospect’s specific situation. It requires research — not 30 minutes per prospect, but 2–3 minutes of focused signal-gathering. Here’s what to look for:
The goal isn’t to prove you stalked their LinkedIn. It’s to prove you understand the problem they’re likely facing — and that your observation is sharp enough to be worth a reply. Good lead enrichment makes this kind of personalization scalable without making it generic.
Personalization that earns replies isn’t about flattery — it’s about relevance. Reference a trigger event, a tech stack signal, or a public pain indicator. If your “personalized” opening line could apply to 500 other prospects, it’s not personalized.
One email is not outbound. One email is a lottery ticket. Outbound is a sequence — typically three emails over 7–10 days, each with a distinct purpose. Here’s the structure that consistently produces replies for the outbound programs we build.
Lead with a problem the prospect is likely facing. Don’t pitch. Don’t mention your product or service. Show that you understand their world better than the other 20 cold emails they got this week. End with a low-friction question.
Example structure: “Most $10M–$20M product companies we talk to have the same issue — they’ve built outbound, but reply rates are stuck below 2% because the sequences were written for a 2022 inbox. Is that something you’re seeing?”
Now you’ve earned the right to reference your work. But briefly. One sentence about a specific result, not a paragraph about your methodology. The social proof should feel like evidence, not a pitch.
Example structure: “Following up on my note about outbound reply rates. We rebuilt the cold email sequences for a $15M SaaS company last quarter — reply rate went from 1.8% to 6.2% by rewriting around the prospect’s problem instead of the product’s features. Happy to share what changed if that’s useful.”
The breakup email works because it removes pressure. You’re signaling: this is the last email, no hard feelings. But pair it with a piece of value — a relevant observation, a resource, a framework — so the final impression is useful, not pushy.
Example structure: “Last note on this. Whether we connect or not, one thing worth checking: if your cold emails are over 100 words, that’s likely the biggest drag on reply rates. Shortening to 60–80 words typically lifts replies 30–40%. Either way, good luck with the outbound push.”
Three emails in three days is harassment. Three emails over 14 days loses momentum. The sweet spot: Day 1, Day 4, Day 8. Each gap gives the prospect time to forget your last email just enough to notice the next one without feeling chased. If you’re running multi-channel, weave LinkedIn touches between the emails — not on the same days.
Two classic copywriting frameworks adapt well to cold email — but only if you strip them down to cold-email scale.
PAS (Problem – Agitate – Solve) works best for Email 1. Name the problem in one sentence. Twist the knife in one sentence — what happens if they don’t fix it. Then offer a light opening, not a hard pitch. “Most $10M product companies run outbound without a separate sending domain. (Problem.) That means every bounced cold email hurts the deliverability of your entire company’s email — including customer communications. (Agitate.) Worth a quick check if you haven’t already? (Solve.)” Total: 47 words.
AIDA (Attention – Interest – Desire – Action) works better for Email 2, where you have social proof. Attention: a stat or observation. Interest: how it applies to their situation. Desire: a specific result you’ve delivered. Action: a low-commitment CTA. The entire email should still be under 80 words. If AIDA pushes you past that, cut the Desire section to one clause.
Both frameworks share the same principle: lead with the prospect’s world, not yours. The moment you start talking about your solution before you’ve established the problem, you’ve lost them.
Most teams “test” cold emails by changing three things at once and hoping something improves. That’s not testing. That’s guessing with extra steps.
Here’s how to test properly:
One variable at a time. Test the subject line with identical body copy. Test the opening line with identical subject and CTA. Test the CTA with everything else held constant. If you change two things, you don’t know which one moved the needle. It’s slower. It’s also the only way to know what’s actually working.
Sufficient sample size. A test with 50 sends per variant tells you nothing. You need 200–300 sends per variant to get meaningful signal on open rates, and 400–500 per variant for reply rates. If your list is too small for that, test fewer things — don’t test more with less data.
Test the right things in the right order. Start with subject lines — they affect opens, and nothing else matters if the email doesn’t get opened. Then test opening lines — they affect read-through. Then CTAs — they affect replies. Testing your CTA when your open rate is 15% is solving the wrong problem.
Test one variable at a time, in order: subject line first, opening line second, CTA third. Give each test 200+ sends per variant. Disciplined testing compounds — a 20% lift in opens, a 15% lift in read-through, and a 25% lift in reply rate together can double your replies from the same list.
Every company wants to know the benchmark. Here’s what we see across outbound programs for B2B product companies in the $3M–$50M range:
Open rates: 45–65%. If you’re below 40%, your subject lines or deliverability need work. If you’re above 70%, check that you’re not in spam — some spam filters “open” emails for scanning, which inflates the number. Deliverability is a whole topic on its own — we cover it in our cold email deliverability guide.
Reply rates: 3–8%. This is the number that matters. Below 3% means your targeting, messaging, or both need rebuilding. Above 8% is exceptional and usually indicates very tight ICP targeting combined with strong personalization. The 3–8% range is where competent, disciplined outbound programs land.
Positive reply rate: 40–60% of total replies. Not every reply is a good reply. “Not interested” and “take me off your list” are replies. Track positive replies separately — the ones that lead to actual conversations. If your positive reply rate is below 40%, your messaging is attracting attention but not the right kind.
Meeting booked rate: 1–3% of total sends. This is the bottom line. If 1,000 emails generate 10–30 meetings with qualified prospects, your outbound is working. If it’s generating opens but not meetings, the problem is usually in the sequence — not enough follow-ups, wrong CTA, or no multi-channel reinforcement.
These numbers assume clean infrastructure, warmed domains, and verified contact data. Without those foundations, no amount of copywriting will save you. Get the plumbing right first, then optimize the words.
30-minute discovery call. We’ll map your stack and show you where the margin is hiding.
Schedule Call