Home › Blog › Stop Emailing the Same Company Twice: Domain Suppression and Account Collisions

Back to Blog
Data Ops5 min readJuly 21, 2026

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.

Cold Email Expert · WarmInboxes
Domain-level suppression preventing repeat cold emails to one company

Quick Answer: Dedupe at the Domain Level

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.

The Failure Email Dedupe Cannot See

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.

Building the Contacted-Domains Ledger

  • •Source it from sends, not lists: the ledger should contain domains you actually emailed, not domains that merely appeared in some CSV. Export sent-to contacts from every sequencer workspace, extract domains, drop free providers. Lists you built but never launched do not belong in it.
  • •Keep it dumb and durable: one column, one domain per row, appended after every campaign. It survives sequencer migrations, agency handoffs, and tool changes precisely because it is a text file and not a feature of some platform, the same logic as the master-database approach to person-level dedupe.
  • •Set an expiry policy: a domain contacted 18 months ago with no engagement can reasonably be re-approached with a genuinely new angle. Store the last-contacted date next to the domain and let entries age out on a timeline you choose (9-12 months is common), rather than suppressing forever or never.

The Two Checks, One Pass

Per-campaign workflow
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.

The rule that prevents the worst version: no two active campaigns may target overlapping company lists without an explicit plan. Before launching campaign B, diff its domains against every currently running campaign's domains, not just historical sends. Simultaneous collisions from different senders are the variant that gets tenant-level blocks, and they are invisible to any per-campaign check.

Frequently Asked Questions

Why is email deduplication not enough?

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.

How do I exclude previously contacted companies from a new list?

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.

What is an account collision and why does it matter?

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.

How many contacts at one company is safe in a single campaign?

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.

How do agencies prevent collisions across clients?

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.

Get FREE .com Domains

Prewarmed Inboxes So You Can Send Cold Emails Today

Get Prewarmed & Fresh Inboxes

Prewarmed & Fresh Inboxes

Google, 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