Last February I sent 3,847 outbound emails on a Tuesday. Wednesday morning I had 11 replies. Nine of them were out-of-office. One was a bounce. One was a very polite "please remove me."
The SDR team blamed the copy. I blamed the copy. We rewrote the copy for two weeks straight. The number went from 11 to 14 replies. Something was off, and it wasn't the subject line.
That week cost us roughly $4,100 in tooling, SDR hours, and a warm domain that had been aging nicely for 14 months. I'm writing this so you don't repeat it.
The Problem You Think You Have
When outbound underperforms, most teams point at the same three suspects: copy, offer, and timing. If you've ever rewritten a sequence five times trying to find the "right" subject line, you know the feeling.
But here's what I didn't want to admit for a long time: in about 70% of the campaigns I've audited since 2021, the copy was fine. The list was the problem.
Not the volume. The list itself — who was on it, whether their addresses were deliverable, whether the domain sending to them was even authenticated, and whether "business contact" in that context meant what we thought it meant.
The Deeper Issues Nobody Puts in the Onboarding Doc
1. "Business Contact" Is a Loaded Term
I used to assume a "business contact" was just any email that wasn't a personal Gmail. Man, was that lazy.
A business contact, properly defined, is a person reachable through a channel that carries implied professional relevance — usually a work-domain address, often tied to a role, sometimes tied to a buying committee. That last part matters. A generic business contact like info@ or sales@ is technically a business contact. It's also usually a black hole.
When should a B2B sales team actually use a business contact? Roughly three cases:
- When you know the person's role and can personalize against it
- When the domain signals the company matches your ICP
- When you've verified the mailbox is live and not a role alias with 40 other people cc'd
If none of those are true, you don't have a business contact. You have a string. Strings don't reply.
2. Decision Maker Search Is Sold as a Feature, Not a Filter
Every tool promises "find the decision maker." What they actually deliver is a title match against a LinkedIn scrape that may or may not be current. I once pulled 400 "VP of Marketing" contacts. Twelve of them had left the company. Another 38 were at companies that had pivoted out of our ICP entirely.
So when I see okki go decision maker search listed as a feature — and I've used it, I like it — I treat it the same way I'd treat any decision-maker filter: as a starting point, not an answer. The output still needs enrichment, and it still needs verification.
This is where most teams quietly fail. They run a search, export a CSV, send. The search worked. The list didn't.
3. SPF, DKIM, DMARC Are Not "Email Stuff" for the IT Guy
I spent two years thinking SPF/DKIM/DMARC was somebody else's problem. Then Google and Yahoo announced their February 2024 bulk sender requirements, and suddenly every domain sending 5,000+ daily emails needed a properly aligned DMARC record or risked being routed to spam.
Per RFC 7489 (the DMARC spec), the record needs to actually align SPF and DKIM against the visible From: domain — not just exist. "We have a DMARC record" is not the same as "our DMARC record is aligned and enforcing."
What I do now, before any new sending domain goes live:
- Verify SPF has fewer than 10 DNS lookups (RFC 7208 limit)
- Confirm DKIM is signed with a 2048-bit key, and the selector is published
- Set DMARC to p=none for the first 3 weeks, check aggregate reports, then move to p=quarantine
Takes about 45 minutes. Saved us from a 3-day deliverability hit last November that would have cost more than our entire tooling budget for the quarter.
4. API Email Verification Documentation Is Not Marketing Copy
Here's a pet peeve. Most vendors list "API email verification" as a bullet and bury the documentation two clicks deep. Then you read the docs and realize the endpoint returns a status code with no timestamp, no confidence score, and no fallback for catch-all servers.
Real API email verification documentation tells you four things:
- The response schema, including confidence bands (valid / risky / unknown / invalid)
- Rate limits and how they're applied (per key, per IP, per minute)
- How the service handles catch-all and role-based addresses
- Whether the result is cached — and how stale it might be
If a vendor doesn't publish those, assume the worst and re-verify before sending. I learned that one the hard way on a 6,000-contact import where "99% verified" turned out to mean "99% syntactically valid, unknown deliverability."
5. API Company Data Is Where the Real Buy Signal Lives
Firmographic data — headcount, industry, funding, tech stack — used to be a manual research task. Now it's an API call. Good API company data endpoints will return things like a recent funding round, a hiring spike in a specific department, or an infrastructure change that signals scaling.
That's the closest thing to a real buying signal most sales teams will ever get for free.
I'll be honest though: I'm still not sure why some signals correlate so well with reply rate and others don't. My best guess is timing — a hiring spike in SDR roles usually means they're about to go outbound, so they're primed to evaluate outbound tooling. But a hiring spike in engineering? Nothing. Same data shape, wildly different outcome.
What This Actually Cost Us
Let me put numbers on it, because vague advice is useless:
- $4,100 in wasted tooling and SDR hours on that February campaign
- 14 months of domain-warming destroyed in 72 hours (we rebuilt it, slower)
- ~6,200 contacts we had to re-verify across three different lists
- One SDR who, to this day, flinches when someone says "just send it"
Granted, some of that was growing pains. But most of it was avoidable.
The Fix (Short Version)
I keep a four-step pre-send checklist on our team wiki now. It runs in about 90 minutes per campaign:
Step 1 — Define what counts as a business contact for this campaign. Role, domain, and deliverability. If a contact doesn't hit all three, it doesn't go on the list.
Step 2 — Re-verify at send time, not import time. Use an API email verification endpoint with a documented confidence score. Anything in the "risky" or "unknown" band gets suppressed. Data goes stale — a list verified in January is roughly 12–18% decayed by April.
Step 3 — Confirm SPF/DKIM/DMARC alignment on the sending domain. Every campaign. Not once a quarter. The RFCs don't change, but your DNS records do — usually during a domain migration someone forgot to mention.
Step 4 — Pull decision maker search data and enrich it with current company data via API. Cross-reference titles against recent activity. If the title match is older than 90 days, treat it as a hypothesis, not a fact.
That's it. That's the whole thing. Tools like okki-go handle most of this in one place now, which is why I stopped rolling my own — but the checklist is what actually prevents the mistakes. The tool just makes the checklist faster to run.
I only write these up when I've personally eaten the cost of ignoring them. This one, unfortunately, I've eaten twice.


