Your cold email campaign is running. Your copy is solid. Your list is targeted. Then you check your delivery rates and realize 30-40% of your emails aren't even hitting the inbox - they're going straight to spam.
This isn't bad luck. It's infrastructure.
Most people think spam filtering is random or that Gmail just hates cold email. It's not. Spam filters use specific, measurable signals - and if you control those signals, you control your deliverability. Here's what actually determines whether your emails land in the inbox or the trash folder.
1. Your Email Domain Authentication - SPF, DKIM, DMARC
This is the foundation. If your authentication isn't set up correctly, you're already losing 20-30% of your emails to spam filters before they even read your copy.
SPF (Sender Policy Framework): This tells Gmail, Outlook, and other providers which servers are allowed to send emails from your domain. Without it, filters assume you're spoofing.
Your SPF record should look like this:
v=spf1 include:sendgrid.net include:mailgun.org ~all
If you're using lemlist, SendGrid, Mailgun, or another platform, they'll give you the exact string. Add it to your domain's DNS records. Check it at mxtoolbox.com - you should see a pass.
DKIM (DomainKeys Identified Mail): This cryptographically signs your emails so recipients know they actually came from you.
Your email platform will generate a DKIM record. It looks messy - a long string of characters - but it goes in your DNS exactly as provided. Once it's live, mxtoolbox will show "pass" for DKIM validation too.
DMARC (Domain-based Message Authentication): This tells providers what to do if SPF or DKIM fails. Set it to a strict policy, not a lenient one.
v=DMARC1; p=quarantine; rua=mailto:[email protected]
This quarantines failed emails instead of delivering them. It's stricter, which is what you want. It signals to providers that you take authentication seriously.
Setup takes 20 minutes. Not doing it is leaving money on the table.
2. Your Sending Volume and Warmup Schedule
Spam filters track sending patterns. If you send 500 cold emails from a new domain on day one, filters flag you immediately as a bot or spammer.
You need a warmup. Here's the actual schedule:
- Week 1: 10-20 emails per day to trusted contacts (reply-friendly addresses like Gmail, Yahoo, Outlook accounts). Send from your own domain, not a mass platform yet.
- Week 2: 30-50 emails per day, still to warm accounts.
- Week 3: 50-100 emails per day. Mix warm contacts with cold outreach (60% warm / 40% cold).
- Week 4+: 100-200+ emails per day. You can go full cold now.
This isn't optional. Gmail and Outlook monitor new sending patterns closely. A domain that looks like it went from silent to blasting 1,000 emails overnight gets throttled hard.
3. Email List Quality Matters More Than You Think
Sending to invalid or outdated email addresses tanks your spam score. Here's why: every bounce, every hard failure, every "address not found" response tells Gmail your list quality is poor. They assume you're not careful about where you're sending, which means they assume you spam.
Clean your list before you send:
- Use ZeroBounce or NeverBounce to validate addresses. Cost: $0.005-0.01 per email. Remove any bouncing or risky addresses.
- Remove free email addresses from corporate campaigns (Gmail, Yahoo, Outlook personal accounts). Filters weight these differently than company domains.
- Remove old or harvested addresses. If you can't verify the address was collected in the last 6 months, it's a risk.
A clean list of 500 high-quality addresses outperforms a dirty list of 5,000 in both deliverability and reply rates.
4. Your Email Content - The Signals That Trigger Filters
Even with perfect authentication, certain content patterns trigger spam filters automatically.
Avoid these:
- All caps words or lines ("CHECK THIS OUT" or "LIMITED TIME")
- Multiple exclamation marks ("This is amazing!!!")
- Excessive links - more than 2 links per email increases spam score by 40%
- Tracking pixels alone (use them, but don't rely on them)
- Spam-trigger words like "free," "guarantee," "act now," "risk-free," "no credit card"
- HTML that looks like it was built by a mass mailer - stick to plain text or minimal formatting
What actually works: Plain text emails with one clear call-to-action. Short paragraphs. Natural language.
Hey [Name], I noticed [Company] recently [specific trigger]. We work with [similar companies] to [outcome]. Worth a quick conversation? [Your name]
This format - conversational, no hype, one link - has a 5-8% reply rate and gets flagged by filters maybe 2-3% of the time. Compare that to templated, formatted emails with multiple CTAs. They hit spam at 15-20% rates.
5. Monitor Your Reputation Score
Every time someone marks your email as spam, your sending reputation drops. Gmail and Outlook track this per sending IP and per domain.
Monitor it using:
- Google Postmaster Tools - shows your reputation, authentication status, and complaint rates. Aim for complaint rates below 0.3%.
- Your email provider's dashboard - lemlist, SendGrid, and Mailgun all show bounce and complaint rates.
- Return Path Sender Score - free tool that rates your overall sender reputation. Anything above 80 is good. Below 70, you have problems.
If your complaint rate hits 0.5%, reduce sending volume immediately. You're getting reported too much. If it climbs to 1%, providers will block you.
6. Soft Bounces and Hard Bounces - Handle Them Differently
A soft bounce is temporary (mailbox full, server down). A hard bounce is permanent (address doesn't exist). Treat them differently or your reputation tanks.
Hard bounces must be removed immediately and permanently. Keep sending to a hard bounce address and filters assume you don't maintain your list. Hard bounces above 5% of your sends will trigger blocks.
Soft bounces can be retried once, but not repeatedly. Most platforms retry automatically - that's fine. But if an address soft bounces 3+ times in a week, remove it.
7. Use a Dedicated Sending Domain
Never send cold email from your main business domain. Your brand domain is too valuable. One campaign with a slightly high complaint rate poisons it for transactional email (invoices, confirmations, password resets) for months.
Set up a subdomain for outreach. Something like:
- outreach.yourdomain.com
- campaigns.yourdomain.com
- sales.yourdomain.com
Use this subdomain exclusively for cold email. Your main domain stays clean. If the outreach domain takes a hit, your core business email still lands in inboxes.
The Gap: Knowing This vs. Running It Well
Reading this, you now understand the mechanics. You can set up authentication, build a warmup schedule, clean a list, and write inbox-friendly copy.
But running this at scale - managing multiple sending domains, monitoring reputation scores across platforms, adjusting volume based on complaint rates, handling list maintenance, testing and iterating based on delivery data - that's where most people stumble. It's not one decision. It's ongoing operational work.
That's where many teams bring in an expert. Not because the fundamentals are hard - they're not - but because managing all of it simultaneously while also writing copy, managing replies, and tracking metrics is a full-time job that distracts from closing deals. Some teams hire for it, others outsource so they can focus on what they do best.
Related Guides
- How to Write Cold Emails That Actually Get Replies
- How to Book 20 Meetings a Month with Cold Email (Without Losing Your Mind)
- B2B Email Outreach Best Practices: Stop Wasting Time on Dead Leads
- How to Use lemlist for Cold Email - A Practical Guide
- How to Find Email Addresses for B2B Cold Email (Without Losing Your Mind)