Skip to content

Cold email · 6 min read

How to verify emails before cold outreach, step by step

A practical workflow to verify emails before cold outreach: export, verify, sort by result and import clean segments into your sequencer safely.

Nov 29, 2025 · SimpleCold team

A worked example: 1,500 exported leads become 1,430 after dedupe, then sort into deliverable, catch-all, role-based, no response and undeliverable

Most cold email problems that look like deliverability problems start as list problems. A sequence goes out to 2,000 leads, 80 of them don't exist anymore, the mailbox provider sees a sender hitting dead addresses, and the next week's opens fall off a cliff. Verifying the list before it reaches your sequencer is the cheapest fix you have, and it takes less time than writing the first email.

This guide walks through the workflow we'd use for any outbound list, whether it came from Apollo, a scraped directory, an enrichment tool or a spreadsheet a colleague built two years ago.

Why verify emails before cold outreach at all

Cold email has less room for error than newsletters. You're sending from domains that are usually young, to people who never asked to hear from you, often through mailboxes that only send a few dozen emails a day. A handful of hard bounces in a small daily volume is a large share of your traffic.

Mailbox providers watch bounce patterns because hitting nonexistent addresses is one of the clearest signs that a sender bought, scraped or guessed its list. The widely used rule of thumb in outbound is to keep hard bounces under 2% of sends. No provider publishes that number as a hard limit, but most teams that stay below it don't have bounce-driven reputation problems, and most teams that blow past it do.

Your sequencer will also react. Most cold email platforms watch bounce rates per campaign or per mailbox and will warn you or pause sending when they climb. Getting paused mid-campaign is annoying. Getting a sending domain flagged is worse.

Step 1: Export the list with its context

Export everything, not only the email column. Keep first name, company, title, LinkedIn URL, lead source and any custom fields your sequence uses. You want to be able to re-import a cleaned file without rebuilding personalisation.

A few habits that save time later:

  • Export to CSV, UTF-8. Excel files with merged cells and formulas cause more trouble than they're worth.
  • Keep one email address per row. If your source puts work and personal emails in separate columns, decide which one you're mailing before you verify.
  • Add a column with the source and export date. When you see a list with a high invalid rate six months from now, you'll want to know where it came from.

Step 2: Remove the obvious junk first

Before paying to verify anything, do a quick pass in a spreadsheet:

  1. Remove duplicates. Most sequencers dedupe on import, but verifying the same address three times wastes credits.
  2. Trim whitespace and lowercase the domain part.
  3. Delete rows where the email cell is empty or clearly broken (no @, a URL instead of an address, two addresses in one cell).

If you want a hand with format checks, the email syntax checker shows what's wrong with a specific address.

Step 3: Run the list through a verifier

Upload the CSV to a bulk email verifier. A proper verifier runs several checks on every address:

CheckWhat it catches
SyntaxMalformed addresses, illegal characters
Domain and MXDomains that don't exist or can't receive mail
DisposableThrowaway inboxes from temporary mail services
Role-basedShared addresses such as info@ or sales@
Catch-all probeDomains that accept mail for any address
Mailbox checkWhether the server accepts the specific mailbox

The result for each row should be a category plus a reason. "Undeliverable: mailbox does not exist" tells you something different from "Undeliverable: domain has no mail server", and both are more useful than a score of 34.

Step 4: Sort the results into send decisions

This is the step most people skip. They delete the undeliverables and send everything else, which defeats part of the point.

ResultWhat it meansCold email decision
DeliverableThe server confirmed the mailboxSend
Risky, catch-allThe domain accepts any address, so the mailbox can't be confirmedSeparate segment, small batches
Risky, role-basedA shared inbox like info@Usually skip for 1:1 outreach
Risky, disposableA temporary inboxRemove
Risky, no responseThe server wouldn't answer clearlyHold, re-verify later
UndeliverableMailbox or domain doesn't existRemove and suppress

Catch-all addresses deserve their own campaign. Many B2B domains are configured to accept everything, so a large share of your list may land here. Some of those addresses are real and some aren't, and nobody can tell from the outside. Send to them more slowly, from your healthiest mailboxes, and stop if bounces rise. We cover the trade-offs in should you send to catch-all emails.

Step 5: Import clean segments into your sequencer

Import deliverables as your main campaign. Import catch-alls as a second campaign or tag them so you can throttle them. Keep the result and reason columns on the contact if your sequencer lets you map custom fields. It makes later debugging much easier.

We have short walkthroughs for the common tools:

For each, the pattern is the same: export, verify, segment, re-import. None of it needs an integration to work.

Step 6: Suppress what you removed

Add undeliverable addresses to a suppression list in your sequencer or CRM. Otherwise the same dead addresses come back the next time someone exports a similar list from the same source. Most sequencers have a blocklist at workspace level. Use it.

How fresh does the verification need to be?

B2B data goes stale because people change jobs, companies get acquired and domains lapse. A list verified three months ago is not a list verified today. A practical rule for outbound:

  • Verify every list right before its first send.
  • Re-verify anything that's been sitting unused for more than a month or two.
  • Re-verify no-response results after a few days rather than discarding them.

Verification is cheap next to the cost of rebuilding a domain's reputation, so err on the side of checking again.

A worked example

Say you export 1,500 leads for a SaaS outbound campaign. After dedupe you have 1,430. The verifier sorts them into deliverable, catch-all, role-based, no response and undeliverable. Your actual numbers will depend heavily on the source and how old it is, so treat the following as a process rather than a benchmark:

  1. Deliverables go into campaign A, sending at your normal daily volume.
  2. Catch-alls go into campaign B at a fraction of that volume, from mailboxes with the most history.
  3. Role-based addresses get reviewed by hand. For a five-person company, sales@ might be the founder. For an enterprise, skip it.
  4. No-response addresses go into a "re-verify next week" file.
  5. Undeliverables get added to the suppression list.

The whole thing takes about 20 minutes of hands-on time, most of it in step 4.

Where SimpleCold fits

SimpleCold returns one of three categories for every address, Deliverable, Risky or Undeliverable, with a status and a plain reason next to it, and the CSV you download keeps every column you uploaded. Catch-all, role-based, disposable and no-response addresses are separate statuses inside Risky, so the table above maps straight onto the status column. That makes step 4 a filter instead of a research project. If you're running outbound for clients or several domains, the cold email solution page covers how teams set it up. You can also check a single lead with the free email checker before you commit to a full list.

Check your list before you send it

Start with 200 free credits. Pay per credit after that.