Marketing

Why Your Cold Emails Are Failing (And It's Not Your Copy)

Why fixing subject lines and CTAs doesn't move the needle, the list quality problems most senders ignore, and the minimum viable fix.

By Makeinfo Team
#cold-email #email-deliverability #bounce-rate #list-quality #email-verification

You rewrote the subject line. You shortened the email. You added personalization tokens. You A/B tested the CTA. And your reply rates are still flat — or getting worse.

This post is for people who have already done the copy work. We’re skipping the “write like a human, not a robot” advice. What we’re covering here is the thing that kills campaigns before the first word is even read: the list.


The Symptoms You’re Seeing

Before diagnosing, let’s confirm you’re dealing with a list problem and not something else.

Signs that copy is the culprit:

  • High open rate (>30%), low reply rate (<2%)
  • Consistent delivery but no engagement
  • Unsubscribes from people who clearly read the email

Signs that your list is the culprit:

  • Open rate dropping week over week without changing anything
  • Bounces above 2% on campaigns
  • ESP sending warnings about engagement or delivery
  • Google Postmaster shows your domain reputation degrading
  • Replies that used to come within hours are now appearing as spam for recipients

If you’re seeing the second set of symptoms, copy changes will not help. You’re either not reaching inboxes, or you’re reaching inboxes at a declining rate because your domain reputation is being damaged by the list you’re sending to.


Why Copy Changes Fail at Scale

When open rates drop, the instinct is to blame the subject line. When reply rates fall, the instinct is to blame the pitch. Both of these are wrong diagnoses if the underlying problem is inbox placement.

Here’s the sequence that actually happens:

  1. You send a campaign to a list that has 8% invalid addresses (not unusual for a list that’s 4 months old)
  2. Those invalid addresses generate hard bounces — the mail server says “this mailbox doesn’t exist”
  3. Your ESP records a bounce rate above 2%
  4. Your sending domain starts accumulating a negative reputation signal with major ISPs
  5. Future campaigns from the same domain land in spam for a growing percentage of valid recipients
  6. Your open rate drops — but not because your subject line got worse

You change the subject line. Open rate stays flat. You conclude subject lines don’t matter. You move on to the body copy.

The actual problem — list decay — is still compounding every day you don’t address it.


What “List Rot” Actually Looks Like

Email addresses expire. This is not a theory — it’s a documented, consistent phenomenon.

The B2B case is the clearest: the average professional changes jobs every 2–3 years. When they leave, their old work email bounces. Not gracefully with an out-of-office. It just stops existing. The mail server returns a permanent failure.

Some decay benchmarks:

List AgeExpected Invalid Rate (B2B)Bounce Risk
< 1 month1–2%Low
1–3 months3–5%Moderate
3–6 months5–10%High
6–12 months10–20%Critical
> 12 months20–30%+Do not send

These numbers vary by acquisition source. LinkedIn exports go stale faster than inbound opt-ins. Purchased lists are often already stale at the time of purchase.

The uncomfortable implication: a list you verified when you built it 4 months ago is not a verified list anymore. Verification is a snapshot of a moment in time, not a permanent status.


The Hidden Constraints Most Senders Ignore

Catch-All Addresses Look Valid But Aren’t Confirmed

A catch-all domain is configured to accept all incoming mail to any address at that domain. Small businesses often set this up so nothing slips through. *@theirbusiness.com accepts everything, whether jim@, james@, or jimbob123@.

From a verification standpoint, any address at a catch-all domain returns catch-all — not valid. This means:

  • The domain exists
  • The domain accepts mail
  • You have zero confirmation the specific mailbox exists

Teams that treat catch-all the same as valid are accepting unknown bounce risk. When you send to 500 catch-all addresses, some percentage will bounce — you just don’t know how many or which ones.

For cold sends to people you’ve never emailed: Remove catch-alls. The potential damage to domain reputation is not worth the marginal reach.

Role Addresses Are Rarely the Right Person

info@, hello@, support@, contact@, sales@, admin@ — these verify as technically valid. They’re real inboxes. But they’re almost never managed by a decision-maker.

They’re often:

  • A shared inbox checked intermittently by whoever is available
  • Auto-routed to a support ticket system
  • Filtered aggressively against anything that looks like cold outreach

Sending to role addresses generates low reply rates, higher-than-average spam complaints (when someone who didn’t ask for email opens one), and zero pipeline. Filter them before verification — you’re wasting credits verifying addresses that won’t convert.

Your Sending Infrastructure Fails Before Any List Problem Matters

A clean list sent from a domain with broken authentication still bounces and lands in spam. Check these before anything else:

RecordWhat It DoesHow to Check
SPFAuthorizes your ESP to send on your domain’s behalfdig TXT yourdomain.com or MXToolbox
DKIMCryptographically signs outgoing mailCheck your ESP’s sending settings; look for DKIM in email headers
DMARCTells ISPs what to do with failed SPF/DKIMdig TXT _dmarc.yourdomain.com

If SPF is missing or misconfigured, your mail fails authentication checks at the recipient server — the result looks like a bounce even though the address is valid.

Fix infrastructure first. If you skip this, everything else is irrelevant.


The Minimum Viable Fix

This is the setup that addresses the list problem without requiring a complete workflow rebuild.

Step 1: Verify Right Before Each Send, Not When You Build the List

Timing of verification matters more than people realize. A list verified today and sent tomorrow is clean. A list verified in January and sent in April is not clean — it’s a January snapshot.

Verify within 48 hours of your planned send date. Not when you acquire leads. Not on a weekly schedule. Right before you send.

Step 2: Remove Catch-All Addresses From Cold Sequences

After verification, filter your list to valid only for cold sends. catch-all, unknown, and invalid addresses should not receive cold outreach.

For warm re-engagement sequences (people who have opened before, who you have prior contact with), catch-alls are lower risk. Not for cold.

Step 3: Pre-Filter Role Addresses Before Verification

Before running verification, remove addresses with these prefixes: info, hello, contact, admin, support, sales, noreply, no-reply, team, help, billing

You’re spending verification credits on each address. Role addresses don’t convert — don’t waste credits verifying them.

Step 4: Set a Re-Verification Schedule

Any list segment that hasn’t been emailed in 60 days should be re-verified before the next send. Tag or date-stamp when each segment was last verified and enforce this as a checklist item before scheduling a campaign.


When Copy Actually Is the Problem

To be fair: copy does matter. Once your list is clean and your infrastructure is set, these are the legitimate copy issues that cap performance:

Low open rate (< 20%) despite healthy delivery: Subject line, from name, or preview text. These are the only variables visible before the open.

High open rate, low reply rate: The email body. Usually too long, too generic, or asking for too much commitment in the first message. The “minimum viable ask” framing (a simple yes/no question) outperforms everything else in cold contexts.

High reply rate, low conversion: Qualification mismatch. You’re reaching people, but they’re not the right people. This is a targeting problem, not a copy problem.

The sequence matters: infrastructure → list quality → targeting → copy. Most cold emailers are trying to fix problems at step 4 when the damage is happening at step 2.


Setting Up Verification Without Leaving Google Sheets

If your list lives in Google Sheets (common for teams using LinkedIn Sales Navigator exports, Apollo exports, or manual prospecting), the friction point is usually the CSV loop: export → upload to verification tool → download → reimport → VLOOKUP.

The Smart Email Verifier Add-on runs verification directly inside Sheets. You select the column, click verify, and statuses appear in the adjacent column — no export required. The free plan handles 50 verifications per day; the premium plan ($79/year) covers 500/day.

What this changes in practice: verification becomes a 10-minute step before each send instead of a 2-hour data management exercise. Which means it actually gets done, instead of getting skipped because it’s tedious.


The reason cold email “doesn’t work” for most teams is not the words in the email. It’s the reality that a significant percentage of emails are never delivered to anyone, and the act of sending to invalid addresses is actively degrading the deliverability of the emails that could reach someone.

Fix the list. Then fix the copy.


Clean your list before your next send. Try Smart Email Verifier free — no credit card required →