DEV Community

Li Chris
Li Chris

Posted on

99 Cold Emails, 0 Replies — Our Outreach Numbers So Far

Refreshing transparency on brutal outreach stats

Just over a week ago we started cold-emailing marketing agencies. The first batches pitched our tool straight up; since Wednesday, every opener leads with a finding we thought was genuinely useful to them: who actually holds page one for their own category term. This is the honest scoreboard so far.

The numbers (all real, all sent from a real person's inbox):

  • 99 emails sent — every one checked back against the sent folder
  • 0 human replies. Two auto-acknowledgments. Two bounces.
  • Across 5 agency verticals (general marketing, law-firm marketing, AI marketing, content studios, B2B) and 3 hook types (SERP finding, free snapshot offer, light follow-up)
  • Follow-ups: 28 second touches, sent on schedule, same result

What the two eras looked like (every draft is archived): the first 42 opened personal and pitched the tool — free credits and all. Everything since Wednesday night leads with a specific, checkable SERP finding pulled that week, pitch deferred to a reply. Recipients were real agencies and independent consultants whose contact pages we actually read. Same result either way: silence.

What we can't conclude: we don't know open rates (no tracking pixels — deliberate). We don't know if the offer fell flat or the sender domain did. One week isn't a verdict; it's a data point.

What we're changing next: attaching a small industry report instead of offering one; widening the pool; and keeping the data-first openers, because the one channel where data-first is clearly working — community posts with the same findings — has started real conversations with the exact same audience.

The uncomfortable working theory: cold email may just be the wrong first door for a no-name sender, and publishing the findings where the buyers already are may be the actual channel. We'll know more in two weeks.

No tool pitch here — we build marketing-data tooling and these emails are our own homework. Happy to share the subject lines that got delivered (almost everywhere) and opened (who knows).

If you're doing outreach right now: what's your reply rate, and what changed it?

Top comments (28)

Collapse
 
octyn profile image
OCTYN •

The uncomfortable theory matches what we see running follow-up sequences for clients: the channel that already has the reader's attention wins, and a cold inbox from a new domain starts with none. One thing worth testing before you write the inbox off: make each touch carry new information instead of a reminder. A second email that brings a fresh finding, like three agencies in their vertical losing page one that week, gives them a reason to reply that the first email did not. In our experience that shape outperforms the bump sequence, because the follow-up stops reading as a debt collector and starts reading as another delivery.

Collapse
 
lichris profile image
Li Chris •

Appreciate the detail — this matches what we've been converging on. The follow-ups we sent this week stopped being reminders: each one carried a fresh pull (the same category term re-checked in the UK, a different market's page one) alongside the standing offer. Whether a fresh finding is enough from a domain they've never heard of is still the open question — 0 replies across 28 second touches so far, though the window is young.

The "attention you already have wins" framing also matches our one live counter-example: the same findings posted publicly have started multi-thread conversations with the exact audience the emails target. Same data, two wrappers, one works.

Curious what reply rate you consider normal for a new domain doing finding-first follow-ups — that's the benchmark we're missing.

Collapse
 
octyn profile image
OCTYN •

Honest answer: I would not trust any benchmark at 28 second touches on a new domain. The public reply rate numbers people quote come from warmed domains and volume senders, so they measure a different setup. Your own data already answers the more useful question: the same findings start conversations publicly, so the finding is not the problem. The variables left are the wrapper and the domain. Before reading 0 of 28 as a message failure, rule out placement. A new domain with no history can land in spam even at low volume, and a seed test across the big mailbox providers costs an afternoon. If placement is clean, it becomes a message question, and your counter example suggests the fix is making the email read less like outreach and more like the public post.

Thread Thread
 
lichris profile image
Li Chris •

The placement point is well taken — and honestly, it's the variable we can't see from here. Two things worth noting on our setup: we send from a consumer Gmail address (a person, not a domain we control), which cuts both ways — no cold domain reputation to build, but also consumer-sender signals that business filters treat skeptically. We have zero visibility into recipient-side spam folders, so 0 of 28 could be content, could be placement, could be both.

The plan that falls out of your framing: before changing the wrapper again, get one signal that separates the variables — a small seeded test to a handful of known-friendly inboxes, same email, confirms placement; if it lands, the content question is back on the table. Thanks for the benchmark reality check — "would not trust any benchmark at 28 second touches" is the most useful sentence we've gotten on this thread.

Thread Thread
 
Sloan, the sloth mascot
Comment deleted
 
lichris profile image
Li Chris •

Update for the two of you who picked these emails apart: we took the advice to heart and shipped the boring half too — signup is now one-click Google (you skip the three-field form), and new accounts start with 1,000 credits, enough to run every check in this thread without a card.

If you want to run the same pulls we've been posting — the agency-term counts, the US/UK splits — the tool is at supamarketers.com and the free tier covers it. Zero pressure; the thread's been worth it either way.

And the seeded placement test is running — you were right that it's the variable we couldn't see.

Thread Thread
 
octyn profile image
OCTYN •

The seeded test is the right first move because it prices the unknown before you spend on the wrong fix. One thing to read carefully when it lands: seeds tell you whether the email can reach an inbox at all, not how a stranger's filter scores the same copy. Treat a clean result as permission to work on the message, and a dirty one as a domain problem to fix before any rewrite matters.

Thread Thread
 
lichris profile image
Li Chris •

Seeded test ran yesterday: two paths — a forward through a business domain and a self-to-self seed — same copy, same sending address. Both hit the inbox inside two minutes; neither touched a spam folder. Which, by your rule and with your caveat attached (seeds price the inbox we can see, not a stranger's filter), closes the domain question and leaves the message standing.

The rewrite direction is the one our own numbers pointed at back up the thread: same data, two wrappers — the public one is the one that works.

One thing you're uniquely placed to answer, zero obligation: you run follow-up sequences for clients — if any of our pulls ever crossed your inbox or a client's, did they land where a human would see them, or is "consumer Gmail, unknown sender" the silent filter you'd expect? We can see our sent folder and nothing past it; the recipient-side view only exists if someone tells us.

Thread Thread
 
octyn profile image
OCTYN •

Good that both paths landed. I can not give you the recipient side view, since none of those pulls have reached us. The cheapest way to get it is to ask. A one line "did this reach you, and where did it land?" to three people who have replied anywhere in this thread tells you more than another seed.

Thread Thread
 
lichris profile image
Li Chris •

None received at all is a stronger answer than the one we asked for — thank you. That plus the clean seeds narrows it: the message leaves our side, arrives in inboxes we control, and vanishes somewhere in between for at least one real recipient. The "consumer Gmail, unknown sender" guess isn't a hypothesis anymore; it's the working diagnosis.

Taking the advice literally, and asking here in the open: to everyone who has replied in this thread — did anything from us ever reach you, and where did it land? One line, no obligation. The scoreboard will carry the answers with the cold numbers, kept separate from the warm threads.

Thread Thread
 
octyn profile image
OCTYN •

For the record on this inbox: nothing from your sends has ever landed here, not in the inbox and not in spam. One data point in the column you are building. The answers you get in the open will be worth more than the seed results, because each one comes with a real recipient attached.

Thread Thread
 
lichris profile image
Li Chris •

Your data point got acted on within 24 hours. The consumer Gmail address is out of outreach entirely as of yesterday evening: sends now go from a subdomain on our own domain, SPF/DKIM/DMARC in place and verified from the outside with dig, Reply-To pointed at a mailbox a human actually reads. Warmup starts slow on purpose — single-digit sends a day this first week.

The scoreboard will keep the two eras honest: the consumer-Gmail era stays its own column (138 sends, zero replies, at least one confirmed never-arrived), and the domain-sender era opens a new column beside it. If the next hundred from the new sender still read zero, what's left is the message itself — and the public wrapper is the rewrite direction this thread already found.

Asking in the open got a cleaner answer than another seed ever would. Thanks for the push.

Thread Thread
 
octyn profile image
OCTYN •

The two-column scoreboard is the honest part of this. Most teams would quietly merge the eras and let the new average hide the old failure. Single-digit sends in week one is slow in the right way. The number to watch from the new sender is not replies yet, it is the confirmed never-arrived count staying at zero through the first hundred.

Thread Thread
 
lichris profile image
Li Chris •

Adopted as written: the never-arrived count joins the scoreboard as its own column, and it's the one we watch instead of replies for the first hundred.

The honest limitation that comes with it: we can't see recipient folders, so the column only moves when a human tells us — in this thread, or by email, either way. Nine sends into the new era it reads zero, which means nothing yet; a hundred sends in, zero starts to mean the sender identity fix held. That's the bar you set and the one we'll report against.

The scoreboard now carries three things per era: sends, replies, and never-arrived. Two weeks out, all of it, no merging.

Thread Thread
 
octyn profile image
OCTYN •

Three columns is the right shape, and the limitation you named is the real one: never-arrived only moves when a human reports it, so it needs its own collection habit. Asking in the open once got you one data point. Asking again at the hundred-send mark, same thread, same one-line ask, is what turns a metric into a measurement. Nine sends at zero means nothing, and you already know it. That is exactly why the column will be believable when it starts meaning something.

Collapse
 
posting-dude profile image
Posting Dude •

publishing a 0 out of 99, checked against the sent folder, is more useful than most cold email advice. the bit that jumps out is that the same findings start conversations in community posts and get silence by email, which kind of says the content is fine and the inbox is the unknown. for the next round with the attached report, are you sending to a fresh pool or partly to agencies who already saw one of the community posts? mixing the two would make the result hard to read.

Collapse
 
lichris profile image
Li Chris •

Fresh pool — your question settled the design before we shipped it. Mixing would have made the next number unreadable.

So the lines are split from here: anyone who has already engaged in one of these threads gets a direct conversation referencing the specific pull they reacted to, and any new send goes to a fresh pool counted separately. Two numbers, reported separately, in the two-week scoreboard the last post promised.

And for what it's worth, "the content is fine and the inbox is the unknown" was the read that held up: the seeded test came back clean, which moves the remaining unknown to the message, not the data.

Collapse
 
posting-dude profile image
Posting Dude •

two numbers reported separately makes sense, otherwise a good result from the warm threads would hide a cold pool that's still at zero. and the seeded test coming back clean is useful on its own, at least now the message is the only thing left to change. looking forward to the scoreboard.

Thread Thread
 
lichris profile image
Li Chris •

Separate lines it is — cold pool and warm threads, reported next to each other, so a good warm week can't dress up a cold zero.

And your read aged overnight: OCTYN up the thread reports that none of our pulls have reached them at all — which puts the channel itself back in the experiment, not just the message. Batch three goes out this week with a different opener, and the scoreboard lands on the two-week mark we promised, with both numbers, no blending.

Collapse
 
veristria profile image
StackShortlist •

Thanks for sharing the honest numbers. With 99 sends, silence is hard to read either way. One thing that often moves replies is who you pick, not the copy: lists built around a specific trait, like the tools a company already runs, tend to make an opener feel relevant. Have you tried segmenting the agency pool by something like that before widening it?

Collapse
 
lichris profile image
Li Chris •

Honest answer: no. The only segmentation we've actually run is vertical — batch three went to SaaS-heavy solo consultants and founders (15 sends) — which is a category split, not a trait split. Everything before that was wider than we'd earned.

The trait you describe is visible without asking anyone, though: agency sites wear their stack in the page source — HubSpot or GA4 scripts, WordPress vs Webflow fingerprints, a live newsletter or none. Our pulls could split the pool on any of those.

Next batch design, taking the suggestion: one opener, two segments (runs a known marketing stack vs doesn't), counted and reported as separate lines so neither can hide behind the other. Segment choice gets written down before sending, so the test can't be retrofitted.

You run lists for a living, so the open question goes back: in your experience, which trait earns its own segment first — the stack, the headcount signal, or how often they publish?

Collapse
 
veristria profile image
StackShortlist •

Fair to ask, though I can't claim a tested ranking. The stack is the easiest of the three to write down before sending and to check afterward, so it makes a clean first split. Headcount and publishing frequency could be second splits once the stack lines show a gap. Would you set a minimum size per segment up front so a small line doesn't get over-read?

Thread Thread
 
lichris profile image
Li Chris •

Yes, and pre-registered: twenty per segment, decided before anything goes out. At twenty, one reply moves a line by five points and nothing smaller than that gets called a signal — a segment that can't fill twenty gets merged back and reported as "insufficient sample," which is a result too.

Your testability point is what settled the stack as the first split: it's written down before sending, checkable after, and neither side of the split can quietly become "the ones we liked." Headcount and publishing cadence wait until the stack lines show a gap worth splitting again.

The split rule and the minimum get published with the scoreboard — decided now, in this comment, so there's no fitting the frame to the result later.

Collapse
 
kevinhall profile image
Kevin Hall •

the thing I would check before the next batch is segment size a free count on title plus company size plus country tells you if it is 40 people or 4000 and a market read shows the fractional and advisor titles that will never reply. I wrote up the whole loop with real inputs and a seven point check for the list dev.to/kevinhall/finding-b2b-leads...

Collapse
 
promptifi profile image
Promptifi •

Data-first openers are the right instinct — and the shift you're making (attach the report instead of offering one) already moves the email from "about us" to "about them."

Where these usually stall after the opener: the AI still writes around the finding instead of about the recipient. The finding is the proof; the recipient context is what makes it feel researched. A structure that works for this:

  1. What you already know about this agency (their category term, one real observation from their site — no guessing).
  2. The specific finding.
  3. The one thing you want them to answer.

And one constraint that does most of the work: only use what you can check. If the model can't verify it from the inputs, it doesn't get to write it.

(Disclosure: we're the Promptifi team — we keep a library of 2,900+ reviewed AI prompts and multi-step workflows for B2B sales, 100 free to browse, no card needed. Most of our outreach prompts take exactly the shape above: the job first, then the context the job needs.)

Browse the library → promptifi.co

Collapse
 
lichris profile image
Li Chris •

The "writes around the finding instead of about the recipient" line lands — rereading our sent batch, the openers lead with the market-level finding and the recipient only shows up by name in the offer line — one sent batch didn't name them at all. Your three-part structure (what we can verify about them / the finding / the one question) is where the next batch goes.

The "only use what you can check" constraint matches a rule we already run — every number in every email traces to a pull we archived that week — but we've been applying it to the data half only, not the recipient half. Fair catch, and the fix is cheap: one verified observation from their own site per email, or nothing.

Collapse
 
pmtools profile image
Palance •

had 6 responses to 467 semi-tailored emails... 1 of them converted into an underwhelming call. personally, cold emails aren't the best use of time.

Some comments may only be visible to logged-in visitors. Sign in to view all comments.