I read silence as bad copy. The emails never arrived.
19 September 2026
For twenty-eight days I ran a cold outreach campaign for a service I am good at: finding the places where a small business site quietly loses money. Broken analytics tags, a homepage that takes nine seconds on a phone, a checkout that half-works on mobile. I have fixed this for paying clients. I know the problem is real.
The campaign got nothing. Not a rejection, not a “no thanks” — nothing.
So I did what everyone does. I decided the writing was the problem, and I rewrote it. Better subject lines. A sharper opening. A specific observation about the recipient’s site instead of a generic compliment.
That was the wrong conclusion, and the data to prove it was sitting in my own database the whole time.
What the database actually said
Every send is logged. Here is the campaign, 11 August to 8 September 2026:
| Delivery attempts that hard-bounced | 26.7% |
| Bounce rate at which mailbox providers start treating you as spam | ~2% |
| Targets whose domain my lead generator invented | 3% |
| Targets that were personal Gmail, not businesses | 21% |
| Replies | 0% |
One caveat I have to make against myself, because the whole point of this piece is not making claims I cannot support: for the last week of the campaign my reply detection was broken. The mail token had been revoked and nothing was watching the inbox. So “zero replies” is really “zero replies ever recorded, with the last seven days unmonitored”. It does not change what follows.
More than one delivery attempt in four hard-bounced: 26.7%. The threshold at which mailbox providers start treating you as a spammer is around 2%. By the second week I was not landing in inboxes at all. The later emails — the good ones, the rewritten ones — were the least likely to arrive.
Then I looked at who I had been emailing. Three percent of the addresses were at
example.com. That is the domain reserved by RFC 2606 for
documentation. It cannot receive mail. It has no owner. My lead generator had
invented it, along with a handful of addresses that literally began with
recipient@, and a run of plausible-looking company domains that
bounced on every single attempt.
One in five of my targets (21%) were personal Gmail addresses, which is to say they were not businesses with sites to audit at all.
So the sequence was: a fabricated list, sent to addresses that mostly could not receive it, from a sender whose reputation was burnt by week two, producing a silence I read as a verdict on my writing.
The copy was never tested. It never had the chance to be.
What a checker would have said, before any of it
I build a tool called flawline. It keeps your strategy as a list of claims in git, each one recording what holds it up, and it fails when a claim is stated more strongly than its evidence allows.
I wrote the campaign’s real thesis into it afterwards — the things I was actually acting on, with the confidence I actually held them at:
- id: leaks-exist
statement: Small business sites lose money to broken tags and slow pages.
confidence: validated # years of fixing exactly this, for money
- id: stranger-will-pay
statement: An owner will pay a stranger who emails them out of nowhere.
confidence: assumed
- id: email-reaches-them
statement: Cold email reaches these owners.
confidence: assumed
- id: copy-is-the-problem
statement: We got no replies because the writing was not good enough.
confidence: indicated # every delivered email, zero replies
depends_on: [email-reaches-them]
flawline check:
strategy/problem.md: error: [method-ceiling] leaks-exist
Marked "validated" on self-report evidence, on a stage whose claims are
about other people. Your own history is a source about you, and the
advantage stage is where it counts. Here it stops at "assumed", because
you have not asked the people this claim describes.
strategy/problem.md: error: [overreach] copy-is-the-problem
Claims "indicated" while resting on "email-reaches-them", which is only
"assumed". A claim cannot be stronger than what holds it up.
4 error(s), 0 warning(s).
And flawline report, asked what the riskiest thing I believed was:
email-reaches-them (problem)
Cold email reaches these owners.
Nothing supports it, and 1 claim rests on it.
That is the whole story, found without access to the database, the bounce log, or the lead generator’s source. Not because the tool is clever. Because “the copy failed” is a conclusion that stands on “the email arrived”, and I had never established that the email arrived.
The first finding is the one that stings more. My strongest claim — that these
leaks are real and cost money — I had marked validated, on the
grounds that I have fixed them for years. flawline does not accept that at the
problem stage. My experience is evidence about me. It says nothing about whether
the specific strangers I was emailing have this problem, or know they have it,
or would pay to have it named. I had never asked a single one of them.
What this is and is not
This is one campaign. Retrospective. Run by the person who built the tool, on
his own data, which is the least impressive evidence there is — it is
self-report, and by its own rules flawline would cap it at
assumed.
It does not show that flawline makes campaigns work. Nothing here was prevented; the money and the twenty-eight days are gone.
What it shows is narrower and, I think, more useful: the failure was not hiding in the data. It was hiding in an unexamined dependency between two sentences I believed. A tool that does nothing but refuse to let a conclusion outrank its support would have caught it on day one, before the first send, in the time it takes to write five claims down.
The reason I built the thing is that I have made this mistake more than once, and I have never once caught it by thinking harder.
npx flawline init ·
github.com/bilhokista/flawline