Haoli GlobalIndustrial outbound field notes

Cold Email

Cold Email Follow-Up: Why the Second Pass Is Nearly Free

Verifying 282 addresses took weeks. Touching them a second time costs almost nothing. Where list decay does and does not change that arithmetic.

Last Friday the first round closed. Every one of 282 companies has now been contacted once, and on Monday I start the second email to the same list.

The interesting part is that the second round is almost free, and it took me until the end of the first one to understand why.

Where the money went the first time

The first list was assembled by an agent pipeline, and I published the yield on it in full: 500 companies requested, 130 to 150 with complete records, about 119 email addresses recovered, 74 surviving verification, 57 contactable at the end. Eleven point four percent, end to end. The API bill was around 14 yuan, which is not the interesting number.

The interesting number is time. Weeks of enumeration and verification, plus twenty-four days warming five mailboxes before the first email went out at all. Then the sending itself, capped at eight per mailbox per morning.

Almost none of that was spent on writing. The copy was the cheap part.

The asset is the address, not the email

Which means the thing I built in six weeks is not a campaign. It is a list of 282 verified addresses attached to named decision-makers, and the second email to that list skips every expensive step. No sourcing. No enrichment. No verification, because the addresses have already been proven to accept mail — I have the bounce data and the out-of-office notices to show it.

What the second round costs is tokens to re-render the sequence and a slot in the morning. That is it.

This reframes what a follow-up is. It is not a nag. It is the cheapest contact I will ever buy against that list, because someone else — me, six weeks ago — already paid the acquisition cost.

Decay is real, and at my size it is not my problem

The standard objection is data decay, and the numbers behind it are solid enough. HubSpot's decay simulation, built on older MarketingSherpa research, puts B2B contact records at 2.1 percent going bad per month, compounding to about 22.5 percent a year. Measured on email addresses alone, ZeroBounce put roughly 23 percent going bad annually in its 2026 figures. Job changes drive most of it; when someone leaves, the mailbox is usually dead inside ninety days.

You will also see 70.3 percent a year attributed to Gartner. At least one analysis has gone looking and could not find a Gartner report that says it. I would not repeat that one.

Run the credible rate against my actual list. 282 addresses at 2.1 percent a month is about six addresses going bad per month. If I spread three touches across two months, something like a dozen addresses die on me during the sequence.

A dozen. Against four positive replies, that is inside the noise. Decay is a real problem for a database of ten thousand records and a rounding error for a list of 282, and the vendor framing that turns it into urgency is selling to the first case while quoting at the second.

One piece of the advice survives the arithmetic anyway: re-verify on a trigger, not on a calendar. A hard bounce is a signal to re-check that record. The passage of six weeks, by itself, is not.

How many times to go back

The benchmark figures that circulate in sending-platform reports are consistent on this, and they point somewhere slightly awkward. Three messages total tends to be the ceiling. Two follow-ups roughly doubles total reply rate against a single email. Sequences running three or more follow-ups show a lower average reply rate, which is probably a mix of exhausted lists and people who send more because nothing is working.

So the second and third touches carry most of the remaining return in the whole exercise, at close to zero marginal acquisition cost. Then it stops paying, quickly.

The other figure I keep in front of me: campaigns that do not track opens report substantially higher reply rates than those that do. Some of that is a deliverability effect from the tracking pixel and some is selection. Either way I stopped tracking opens, and the first thing that changed is that I no longer had a number to comfort myself with. If you would rather have the reply classification done for you than sort out-of-office notices by hand every Monday, that is a standard feature in the platforms.

What the second email says

Shorter than the first. One question, not two. Nothing that manufactures guilt — no bumping this to the top of your inbox, no just following up again.

In my case the second email has one advantage the first did not: I now have documentation to attach. Three of my four positive replies were requests for a catalogue or a website, so the material I could not send in June is itself the reason to write again in August. That is a real reason to be in someone's inbox, which is more than most follow-ups have.

The open-source layer I would actually adopt

I went looking for what could replace the paid parts of this, and the honest answer is: one layer, not all of them.

Worth running locally. email-verifier, Go, MIT, does syntax, disposable-domain and MX/DNS checks without touching SMTP at all. It costs nothing, runs in a second, and kills dead domains before you spend a paid credit on them. There is no argument for not having this in front of a paid verifier.

Worth knowing about, not worth self-hosting yet. check-if-email-exists, Rust, around nine thousand stars, is the real open-source SMTP verifier. It is dual-licensed commercial and AGPL-3.0, with a pull request opened in March 2026 to move it to MIT. The blocker is not the licence, it is port 25: most ISPs and many cloud hosts block outbound SMTP on 25 to suppress spam, and without it the tool hangs and returns unknown rather than an answer. Self-hosting therefore means renting a box with 25 open and a clean IP, and some mail providers refuse real-time verification regardless. At 282 addresses that is a weekend project to save a few dollars. At a few thousand addresses re-verified monthly the arithmetic flips, and then it is genuinely the right tool.

Worth using instead of a platform, for now. mailmerge is a small Python CLI that sends one individual message per recipient from a template plus a CSV, reads its SMTP settings from a config file, and refuses to send anything until you pass a flag — dry run is the default. Five mailboxes means five config files, and eight sends each is exactly the volume it is built for. What it does not do is detect replies, thread conversations, or schedule anything. It replaces the sending. It does not replace the inbox, and the inbox is where the work is.

What I would not adopt. A self-hosted all-in-one marketing automation stack. My failure mode in this channel is deliverability and domain reputation, not missing features, and moving my own mail infrastructure in-house takes on that risk for no gain. The authentication work is the part that actually decides whether the second email arrives.

What the second pass really costs

Not money. Mornings.

Forty emails a day across five mailboxes is my ceiling, and it consumes an entire morning. The same morning is the only window when marketplace enquiries are worth working — the ones that show up in the afternoon are already taken, obviously mismatched, or fraudulent, and I get about two usable ones a day. Every hour the follow-up round takes is an hour taken from quoting, and quoting is the only activity in this job that has ever produced revenue.

So the constraint on the second pass was never the cost of the list. It is that the cheapest contact I can buy still has to be paid for out of the same four hours as everything else.

FAQ

How many follow-ups should a cold email sequence have?

Two, for a total of three messages. Benchmark data consistently shows two follow-ups roughly doubling total reply rate against a single send, while sequences with three or more follow-ups show lower average reply rates.

Do you need to re-verify email addresses before a second touch?

Not on a short interval. If the addresses passed verification and did not hard bounce on the first send, they are proven live. Re-verify when something triggers it — a bounce, a job change you can see, a domain that stopped resolving — rather than on a fixed schedule.

How fast do B2B email lists decay?

About 2.1 percent per month, compounding to roughly 22.5 percent a year on the most widely cited estimate, driven mainly by job changes. Email addresses specifically run around 23 percent a year. The figure of 70.3 percent a year that gets attributed to Gartner does not appear to trace back to any Gartner report.

Is self-hosted email verification worth it?

Only above a few thousand addresses, and only if you can get a host that leaves outbound port 25 open. Below that, run a free local syntax and MX check to strip the obvious dead weight, then pay per credit for SMTP verification on what survives.

What should the second email say?

Less than the first, with one question and a lower bar to answer. If something has genuinely changed since you first wrote — new documentation, a new reference, a price you can now quote — lead with that, because it is a reason to write rather than a reminder that you did.