Home › Blog › Stop Emailing the Same Company Twice: Domain Suppression and Account Collisions
Email-level deduplication is solved; company-level deduplication is where campaigns still burn accounts. The contact changed jobs, the new export has a different person at the same firm, two of your campaigns target overlapping segments, and suddenly one company has received five cold emails from three of your inboxes in a week. Their IT admin blocks your domain for the entire org. Here is how domain-level suppression and account-collision checks work, and the free tool that runs both.

Keep a running file of every company domain you have ever emailed (email domains minus free providers). Before every import: remove new-list contacts whose domain is in the file, then check the remaining list for account collisions, companies where this one campaign would hit more than 2-3 people. The free Suppression Checker runs both checks in your browser and returns an import-ready CSV.
Picture the timeline: in February you email the VP of Sales at Acme. She does not reply. In July, a fresh export surfaces Acme's new Head of Growth, different person, different address, zero overlap with February's list. Every email-level check passes. But Acme's mail tenant remembers your sending domains, the VP vaguely remembers deleting you, and the second campaign lands with a strike already against it. Multiply by every company in the intersection of two exports, and the "fresh" list is quietly relitigating months of old impressions. Domain-level suppression is the only check that operates at the same granularity as the memory you are up against.
INPUTS campaign.csv the list you want to send contacted-domains.csv the ledger suppression files customers, opt-outs, bounces CHECK 1: DOMAIN SUPPRESSION drop any campaign row whose email domain matches the ledger or a suppressed email's domain (free providers excluded) CHECK 2: ACCOUNT COLLISIONS group remaining rows by domain flag every company with > 2-3 contacts keep the best-fit contact, stagger or cut the rest OUTPUT clean.csv import this suppressed.csv every removed row + reason collisions review list, decide deliberately
The Suppression Checker runs this exact flow client-side: it accepts multiple suppression files at once, treats any pasted bare domains as company suppressions, auto-excludes free providers so gmail.com can never nuke your list, and reports collisions against a per-company limit you set. The Pre-Send Checker re-checks the collision count as part of full campaign QA, so the gate exists even when someone skips the first pass.
Because the atom of cold email risk is the company, not the address. B2B contact data churns at roughly 2-3% a month: people leave, titles change, vendors re-scrape. Two exports six months apart can share almost zero email addresses while covering largely the same companies. Email-only dedupe reports the lists as clean; the companies still get hit twice. Everything a mail filter, an IT admin, and an annoyed prospect remembers is keyed to your domain hitting their domain, so that is the level deduplication has to run at.
Extract the company domain from every email you have ever sent to (the part after the @, with free providers like gmail.com excluded), keep that as your contacted-domains file, and match every new list against it before import. Contacts whose domain appears in the file get removed regardless of whether the specific person was ever emailed. Our free Suppression Checker does this in the browser: upload the new campaign CSV, upload past-campaign exports or paste domains, and download the clean list with all columns intact.
An account collision is several of your emails converging on one company at the same time, either multiple contacts in one campaign, or multiple campaigns and senders overlapping on the same account. To the receiving mail system it looks like a coordinated blast: several messages from related senders inside a short window. Google Workspace and Microsoft 365 filter at the tenant level, so the block that results applies to everyone at that company, and it is one of the quickest ways to permanently lose an account you cared about. Community threads about multiple inboxes hitting the same company are almost always this failure.
Two to three, spaced, is the practical ceiling for most B2B motions; beyond that, replies do not increase but filtering risk does. The better pattern for larger accounts is sequential, not parallel: contact one, wait for the sequence to resolve, then contact the next with context. If you multi-thread deliberately (enterprise deals often need it), do it consciously with different angles per persona and days between sends, not three identical templates leaving three inboxes the same morning. Our guide on how many contacts per company covers the sequencing patterns.
This is the nastiest version because no single campaign looks wrong: client A's campaign and client B's campaign each hit acme.com once, from different workspaces, and neither workspace can see the other. If both clients are yours and both send from infrastructure you manage, the receiving filter still sees related traffic converging. The fix is an agency-level contacted-domains ledger, updated from every client export, checked before every launch, kept separate from client data itself (domains only, no contact details, so client confidentiality survives). Cross-checking against it takes one extra upload in the same suppression pass.
Prewarmed Inboxes So You Can Send Cold Emails Today
Get Prewarmed & Fresh InboxesGoogle, Microsoft 365 and Azure inboxes with free prewarmed domains and DNS configured before you log in. Prewarmed inboxes send the day they land; every order is delivered within 48 to 72 hours.
Get Prewarmed & Fresh Inboxes