Cold Email That Gets Replies: Verify First, Write Second
I spent a month rewriting cold emails that got zero replies. New subject lines. Shorter bodies. Better hooks. The replies stayed at zero — because the writing was never the problem.
The problem was the order I was working in. I was polishing copy for addresses that didn't exist, testing subject lines on a list nobody had verified, and opening with facts I hadn't checked. Every fix landed on the wrong step.
Most cold emails don't fail because of the writing. They fail in three places, in this order: the address, the subject line, the opener.
- The address decides whether the email exists at all.
- The subject line decides whether a busy person opens it.
- The opener decides whether they read past the first line.
Fix them in that order, or you fix nothing.
A reply is a multiplication, not a sum
Here is the formula that runs every campaign, whether you write it down or not:
replies = list × opens × reads
A list factor of zero makes the whole product zero. A subject that nobody opens makes the copy inside irrelevant. An opener that reads like a blast makes the offer below it invisible. Each factor has exactly one job, and each one is checked in order — because a failure at step one makes steps two and three unmeasurable.
That is why "verify first, write second" is not a slogan. It is the order of operations. You cannot A/B test a subject line on a list of dead addresses; you are measuring noise and calling it data. You cannot judge an opener when the email never arrived.
The three factors, in plain words:
1. The list decides whether the email exists
An email to an address that bounces is not an email. It is a small red flag to Google and Microsoft, filed against your domain. Enough of them, and your good emails start landing in spam too — even the ones with perfect copy. The writer blames the subject line. The real problem was the list.
2. The subject decides whether it gets opened
Two seconds, fifty other unread emails, one delete reflex. A subject line has one job: survive that reflex. It does not need to be clever. It needs to be specific enough that the recipient can tell this email is about their business, not about ten thousand businesses.
3. The opener decides whether it gets read
If you survived the verifier and the filter, you have one line to prove this wasn't blasted. One true, specific fact about their business — a new location, a review pattern, a service they just added — beats three paragraphs about you. The opener is the receipt that you looked.
The three steps, in order
Step 1. Verify the address — before a single word of copy
Pull one address per business — the owner's, not info@ — and check it character-for-character against the business's own contact page. Then run the gate: syntax, domain, mailbox. Two minutes per address, and the risky ones get parked, not mailed.
The pain it kills: bounces quietly strangling your domain before your first real campaign. What you get is a list you can defend — one that survives its own first send. The full seven-step version of this gate lives in my first article on the email-enricher stack; the short version above is enough to start tonight.
Side note: if I were starting from zero, I would verify ten addresses by hand before touching any script. The hand check teaches you what a real address looks like; the script just repeats it faster.
Step 2. Write one subject per prospect — never a template blast
Lowercase, specific, curiosity without clickbait. If your subject could be sent to 100 different businesses unchanged, it's dead. The test takes five seconds and catches most bad subjects before they cost you a send.
Before (illustration, not a real email):
Partnership opportunity
After (illustration, same shape as a real send):
yoursite.com — the typo on your services page
The before-subject is wallpaper. The after-subject is a teaser about the recipient's own business — a word quoted from their own site that they will instantly want to find. It isn't a promise or a pitch. It's curiosity about something they own.
Step 3. Open with one real fact — then one question
The first line must prove this email was written for this person. Not "I came across your company and was impressed" — that went to four hundred people today. One sentence about them, found in two minutes of looking. The email becomes a letter to a person, not a flyer to a list.
Before (illustration):
Hi, I'm Alex, founder of Agency X. We help businesses with AI. Would you be open to a quick call this week?
After (illustration, same shape as a real send):
Your Google reviews mention response times twice — clients notice it before they notice the price. We made a 40-second demo showing how yours could answer in under a minute. Worth a look?
Same offer. Different language. One goes to trash, the other starts a conversation — because the second one opens with evidence, not an introduction.
Then stop writing and send like a human: around 30 emails a day per inbox, warmed up, with follow-ups on day 3 and day 7. The follow-ups are short, and they are the same shape every time — a bump, then a breakup:
Day 3 bump:
Just bumping this up — did the demo make sense for your team?
Day 7 breakup:
Closing the loop on my end — if the timing's wrong, no worries. Reply STOP and I won't email again.
No third essay. No "just following up for the fourteenth time." The campaigns that work don't feel like cold email at all — one short note about something real you noticed, with something useful attached.
The pre-send checklist (copy this):
- Verify every address before sending.
- One subject per prospect, never a template blast.
- Opener = one real fact.
- One asset or idea, one low-friction question.
- Follow-up day 3 (bump), day 7 (breakup).
The run that proved the order: 34 clinics, 9 emails, 0–1 replies
Last week I ran the whole stack end to end on real businesses — dental clinics in Tucson, Arizona, pulled from OpenStreetMap. Thirty-four businesses went in. Here is the whole run, with nothing rounded:
- 34 businesses scraped. Names, sites, phones, addresses.
- 12 enriched. The enrich step was capped at twelve fetches, so twelve rows went through the gate.
- 9 of 12 had an email address. Three came back with nothing.
- Tiers of the 12: A:1, B:2, C:5, D:4. One A, two Bs, five Cs, four Ds.
And here is where the nine emails actually came from — the part that decides whether the copy even matters:
- 1 from the website itself (confidence 85). The A-tier clinic. The only address in the run I would bet on.
- 1 from a domain scrape (confidence 70). A real address found on the domain, not guessed.
- 7 pattern guesses (confidence 35 each). firstname@, info@, contact@ — the standard patterns, unconfirmed. Seven of nine.
Now the diagnosis. Suppose you mail all nine and get zero replies. Was it the copy? No — seven of your nine sends went to hypotheses, not addresses. The honest reply rate on a clean, verified list is 3–8%. Nine addresses at 3–8% is zero to one replies. The subject line didn't fail. The list was never clean enough to test it.
The arithmetic that follows is the whole point:
- One batch of 34 businesses → 9 addresses → 0–1 replies.
- Ten batches of 34 → 90 addresses → 3–7 replies.
- The copy is the same in both cases. The list is what changed.
A test run is not a result. Run it weekly, grade before you send, and never mail a D — and the same emails start landing in inboxes that answer.
What doesn't work
- Rewriting the copy first when the list is unverified. A better subject line on a dead list is a better subject line nobody ever sees. Fix the address, then the subject, then the opener — in that order.
- Adding volume to fix zero replies. Volume multiplies whatever your process is doing — including doing it wrong. Ten thousand emails aimed at ghosts is not outreach. It's a deliverability problem with postage.
- Testing subject lines on a dead list. You cannot measure open rates when the emails never arrived. Every "test" on an unverified list is noise with a spreadsheet.
- Buying lists instead. Half the addresses are dead, every send teaches the inbox to ignore your domain, and you paid for the privilege.
- Cold mail from your main domain. One burned domain and your real business email starts landing in spam too. Separate domain, warm it slowly, keep volumes small.
- Judging the system on one batch. Thirty-four businesses is a test, not a result. The honest math says one batch gives you zero to one replies. The system earns its keep at ten batches.
And the honest bottom line: $0 in revenue from the Tucson run so far. The scripts are free, the list is free, and the first sale is still ahead of me. I am not writing this as a victory lap. I am writing it because the order above — address, subject, opener — is the only order in which cold email can be fixed, and it is the order most cold-email content never mentions.
TLDR
Cold emails fail in three places, in order: the address, the subject line, the opener. Verify the address first — syntax, domain, mailbox — then write one subject per prospect, then open with one real fact. Follow up day 3 (bump) and day 7 (breakup). A real run: 34 clinics → 12 enriched → 9 emails, seven of them pattern guesses at 35 confidence, so zero replies meant the list, not the copy. At a 3–8% reply rate, one batch is zero to one replies — run it weekly and the same copy becomes a pipeline.
Try it free
The pre-send checklist (email-gate SOP) plus 3 opener prompts are free here: https://nyzza.online/leadgen/?utm_source=devto&utm_medium=article&utm_campaign=leadgen-funnel&utm_content=cold-email-verify-first
The full kit behind it — 5 Python scripts, 4 SOPs, 20 prompts, $27 one-time, 30-day guarantee — is linked from that page, not pushed here. Fix the list first.
Top comments (0)