Cold Email Landing in Spam — Diagnosis
A deliverability report: seed-test placement per provider before and after, the SPF/DKIM/DMARC result, blocklist status for domain and IP, bounce rate before and after cleaning, the content changes made, and the corrected ramp schedule. One line per fix stating whether placement moved, so cause and effect stay attached.
Before you start
- DNS access for the sending domain
- Admin access to the sending tool and mailbox
- Send stats for the last 30 days: delivered, bounced, replied
- A seed-test inbox set on at least Gmail, Outlook and one corporate domain
- The sending domain and whether it is the company's primary domain
- Daily send volume and how fast it was ramped
- Bounce rate and reply rate over the last 30 days
- The exact email body, including links, images and any tracking
The steps
- Prove it is spam placement, not silence — Low replies alone prove nothing. Send the live campaign to a seed set across Gmail, Outlook and a corporate domain and record where each one lands — inbox, promotions, or the spam folder. Open rate is not evidence either way: image blocking and privacy proxies make it unreliable in both directions. Without a seed test you are guessing at which of the next five steps to do.
- Check authentication, which is the cause more often than the copy — Verify SPF resolves and stays under ten DNS lookups, DKIM signs with a key the receiver can fetch, and DMARC exists at least at p=none with a reporting address. A missing or broken DKIM sends mail to spam no matter how well it is written. This is a ten-minute check and it settles most cases.
- Check what the domain is sending on — Look up the domain and the sending IP on the main blocklists, and read Google Postmaster if you send enough volume to register. A shared IP carries other senders' behaviour, so a clean domain can still sit behind a poisoned IP. Note which of the two is the problem before changing anything.
- Clean the list before touching anything else — Bounce rate above 3% will bury a domain regardless of authentication. Verify the list, remove role addresses (info@, contact@, sales@) and anything unverifiable, and re-check the rate. A list that bounces is the fastest way to lose a domain and the easiest thing on this page to fix.
- Strip the email down — Remove open-tracking pixels, shorteners, images and HTML formatting. Plain text with at most one link reaches inboxes that reject the same message dressed up. Test the stripped version against the seed set — if it lands, add elements back one at a time and find which one costs you.
- Fix the ramp — A new domain sending 200 a day in week one gets filtered on volume alone. Start at 20/day per mailbox and step up roughly 20 a week, adding mailboxes rather than pushing any single one past ~50. Warm-up traffic helps only alongside real replies — it does not substitute for them.
- Re-seed and write down what changed — Run the seed test again after each fix, not after all of them, or you will never know which one worked. Record placement per provider before and after so the next incident starts from evidence instead of memory.
If it goes wrong
The team rewrites the copy first and changes nothing
Copy is rarely the cause. Do authentication, list quality and ramp first — in that order. Rewriting subject lines against a broken DKIM record burns weeks and teaches nothing.
Cold outbound is sent from the primary company domain
Move it to a separate domain that redirects to the main site, with its own authentication and its own warm-up. If the primary is already damaged, stop all outbound on it immediately — recovery takes months and your real mail is in the blast radius.
Open tracking is dragging placement down
The tracking pixel adds a remote image and a redirect domain, both of which filters weigh. Turn open tracking off for cold sequences and measure on replies, which is the only number that pays anyway.
Warm-up tools are running while placement stays bad
Warm-up mail talking to other warm-up mail is a pattern receivers recognise. It supports a real ramp; it does not create reputation on its own. Fix authentication and list quality, then let genuine replies do the work.
Several fixes are applied at once and placement improves
You have learned nothing and will repeat the incident. Re-seed after each change. It costs one extra test per fix and turns the next occurrence into a ten-minute job.
All OpenLabor playbooks