Productivity

How to Verify Emails in Google Sheets (Step-by-Step)

Three methods to verify email addresses directly in Google Sheets — from a free regex formula to a one-click add-on. Includes a copyable cleanup checklist.

By Makeinfo Team
#google-sheets #email-verification #productivity #tutorial

Your email list lives in a Google Sheet. That part is easy. The hard part is knowing which addresses are actually deliverable before you hit send — and doing that without leaving the spreadsheet, copying data into some other tool, waiting, downloading a CSV, and pasting it back.

This guide covers three methods for verifying emails directly in Google Sheets, from the simplest (a free formula) to the most reliable (a tool that handles the whole thing in-sheet). Each method has real trade-offs. We’ll cover what breaks, when to use what, and give you a checklist you can copy for your pre-send workflow.


Why Email Verification Matters Before You Send

Every ESP (email service provider) — Mailchimp, SendGrid, Instantly, Lemlist — tracks your bounce rate. If hard bounces climb above 2–5%, the consequences get serious fast:

  • ESP warnings and sending limits — your account gets flagged
  • Domain reputation damage — your sending domain gets associated with bounces
  • Deliverability collapse — future sends, even to valid addresses, land in spam

Most senders hit a bounce problem when working from scraped lists, old CRM exports, or contacts that haven’t been emailed in 6+ months. The addresses look fine. The list loaded into Sheets fine. But enough of them have gone dark, changed jobs, or never existed.

Verification catches this before the damage is done.


The Three Methods

MethodWhat it checksCostSheets-nativeAccuracy
REGEXMATCH formulaSyntax only (format is valid)FreeYesLow
Manual CSV upload to providerLive SMTP handshakePay-per-useNoHigh
Smart Email Verifier Add-onLive SMTP handshake, in-sheetFree / $79/yrYesHigh

A formula can only tell you that john@example is malformed. It cannot tell you whether [email protected] is a real, active mailbox. For cold outreach or any campaign where deliverability matters, you need the SMTP handshake — a live check that the mailbox accepts mail.


Method 1: REGEXMATCH Formula (Free, Syntax Only)

Use this when you want a fast sanity check — catching obviously broken formats before a larger workflow.

The formula:

=REGEXMATCH(A2, "^[a-zA-Z0-9._%+\-]+@[a-zA-Z0-9.\-]+\.[a-zA-Z]{2,}$")

Drop this in column B, drag it down. Returns TRUE for valid-looking formats, FALSE for anything that’s clearly broken.

What it catches:

  • Missing @ symbol
  • Invalid domain format
  • Spaces inside the address
  • Missing TLD (.com, .io, etc.)

What it does NOT catch:

  • Whether the mailbox exists
  • Whether the domain accepts mail
  • Disposable addresses (guerrillamail.com, mailinator.com)
  • Catch-all domains that accept everything
  • Role addresses (info@, noreply@, admin@) — these send but rarely reach a person

When to use it:

  • Form validation (catch typos at signup)
  • Pre-filtering before a paid verification run (remove the obvious garbage first)
  • Quick list audit where deliverability isn’t critical

Limitations: Do not rely on this for cold outreach. A 100% pass rate on REGEXMATCH tells you nothing about whether a single email will actually deliver.


Method 2: Manual CSV Export → Provider Upload → Reimport

This is how most teams handle verification before they find a better way. It works. It’s just slow and error-prone.

The flow:

  1. Export your Sheets column as a CSV
  2. Upload to NeverBounce, ZeroBounce, or MillionVerifier
  3. Wait for results (minutes to hours depending on list size)
  4. Download the results CSV
  5. VLOOKUP or paste the statuses back into your Sheet

What you get: Accurate results. These providers run a live SMTP handshake — they connect to the mail server and verify the mailbox exists before returning a status.

The problems:

  • Data is stale by the time it’s back. If you export Monday and reimport Wednesday, the list has aged 48 hours. Job changes happen constantly in B2B.
  • The VLOOKUP step breaks things. Mismatched row counts, encoding issues from the CSV download, and human error during copy-paste are all real failure modes.
  • You’re context-switching. Most people doing this are also managing a campaign. The extra friction means verification gets skipped when time is short.
  • API key management is separate. You’re paying three different platforms and managing three different dashboards.

Failure points to watch:

  • Provider returns catch-all — you need a policy for these (see checklist below)
  • File encoding issues after export (especially with international characters in names)
  • CSV column mismatch if you sort or filter your Sheet between export and reimport

When to use it: Works fine for occasional, one-off list cleanups. Breaks down if you’re doing this weekly or for multiple campaigns.


This is the workflow that eliminates the export/import loop entirely.

Trigger: Install the Smart Email Verifier Add-on from Google Workspace Marketplace (free install, no credit card).

What it does: Connects NeverBounce, ZeroBounce, or MillionVerifier directly to your Sheet. You bring your own API key from whichever provider you use. The add-on handles the calls and writes results back to a column in your Sheet.

Step-by-Step Walkthrough

Step 1: Install the add-on

Open your Google Sheet → Extensions → Add-ons → Get add-ons → Search “Smart Email Verifier” → Install.

Step 2: Add your API key

Open the add-on sidebar → Settings → paste your NeverBounce (or ZeroBounce or MillionVerifier) API key → Save.

You control which provider you use. If you have credits on ZeroBounce, use ZeroBounce. Switch anytime from the sidebar without reconfiguring anything else.

Step 3: Select your email column

Highlight the column with email addresses (e.g., column B). The add-on detects the selection.

Step 4: Click Verify

The add-on loops through the list, calls your chosen provider for each address, and writes a status directly into the next available column.

What gets written back:

StatusMeaning
validMailbox exists and accepts mail
invalidMailbox does not exist
catch-allDomain accepts all addresses — can’t confirm individual mailbox
disposableKnown temporary/throwaway email service
unknownProvider couldn’t reach the mail server

Step 5: Filter on valid before sending

Use a standard Sheet filter to keep only valid rows for your campaign. Decide on a policy for catch-all (safe to include for warm outreach; skip for cold).

Failure Points and How to Handle Them

API key not set: The add-on shows an error in the sidebar before running. Fix: go to Settings, re-enter the key, verify it’s the correct environment (test vs. live).

Quota exceeded mid-run: The add-on stops and shows how many rows were processed. Fix: upgrade your provider plan or wait for daily quota reset. Rows already verified keep their status — you only re-run the unverified rows.

Catch-all interpreted as valid: This is an accuracy limitation of the provider, not the add-on. Fix: segment catch-alls separately and apply different send rules (send to warm audiences, skip for cold).

Very large lists (10,000+ rows): Provider API calls take time. Run overnight or in batches. The add-on handles batching automatically — you don’t need to split the Sheet manually.

How to Monitor If It Breaks

  • Watch the status column for a sudden increase in unknown results (suggests the provider API is down or your key expired)
  • Check your provider dashboard for quota usage before each campaign run
  • If bounce rate climbs after a campaign, cross-reference against the statuses — if valid addresses are bouncing, the list has aged and needs a re-verification pass

Pre-Send Email Verification Checklist

Copy this into a new Sheet tab and work through it before each campaign:

[ ] 1. Run REGEXMATCH — remove any FALSE rows (broken format)
[ ] 2. Deduplicate (Data → Remove duplicates)
[ ] 3. Remove role addresses: filter out info@, admin@, support@, noreply@, hello@
[ ] 4. Run Smart Email Verifier (or manual upload) — get live statuses
[ ] 5. Keep only "valid" for cold outreach
[ ] 6. Decide on catch-alls: include for warm, exclude for cold
[ ] 7. Remove any previous bounces or unsubscribes from your CRM
[ ] 8. Cap send volume: max 200–400 per sending domain per day for new domains

Which Method Should You Use?

  • Occasional cleanup, small lists (<200): REGEXMATCH first, then manual CSV upload once.
  • Regular campaigns, list in Sheets already: Smart Email Verifier Add-on. The free plan covers 50 verifications per day; the premium plan ($79/year) covers 500/day.
  • One-time bulk clean of a legacy list (>5,000 rows): Manual upload directly to provider for cost efficiency, then move to the Add-on for ongoing maintenance.

The measure of a clean list isn’t just fewer bounces — it’s a sender reputation that holds across campaigns. Teams that verify consistently before sending keep their bounce rate under 1%. Teams that skip it often find out the hard way after the first large send.


Want to skip the export/import loop? The Smart Email Verifier Add-on connects your provider directly to Google Sheets. Install free on Google Workspace Marketplace →