All posts

How to Verify Emails in Google Sheets or Excel Before Importing to Your CRM

Clean an email list in Google Sheets or Excel before importing to your CRM — a simple export, verify, re-import workflow.

Sabbir Hossain
Sabbir Hossain
SF Email Verifier team
August 10, 2026

You’ve got a spreadsheet. Maybe it’s a trade show sign-in list, an old export from a system you’re migrating off of, or a pile of contacts someone on the team collected over a year and finally handed off. Before it goes into your CRM, there’s one step worth doing that’s easy to skip when you’re in a hurry: making sure the emails in it are actually real.

Import a messy list straight into your CRM, and the bad addresses don’t announce themselves. They just sit there, quietly, until the day someone runs a campaign to “all contacts” and half the bounces trace back to a spreadsheet nobody double-checked six months earlier. This piece walks through why spreadsheets specifically accumulate this kind of error, the actual export-verify-reimport workflow, and how to handle the results once you’re back in Sheets or Excel deciding what to do with each row.

Why this happens with spreadsheets specifically

Spreadsheets accumulate errors in ways databases with built-in validation don’t. Someone hand-types an address wrong. A row gets copy-pasted from an email signature and picks up extra characters. An old contact’s company email address stops working after they leave the job, but the row never gets updated because nobody’s job is to maintain it.

None of this shows up by scrolling through the sheet. It looks fine. It reads fine. The only way to actually know is to check each address against something outside the spreadsheet — the domain’s mail server. A spreadsheet, unlike a CRM with data validation rules built in, has no mechanism to catch any of this on its own. It will happily hold “jhon@copmany.con” in a cell forever, displaying it exactly as clean and unremarkable as the row above it with a perfectly correct address.

Common ways spreadsheet data goes bad, and why each one is invisible until you check

It’s worth walking through the specific mechanisms, since understanding how errors get in helps you judge how much scrutiny a given spreadsheet needs before you trust it.

Manual transcription errors. Someone reading handwriting from a sign-in sheet, or copying an address read aloud over the phone, introduces the same kinds of mistakes a human makes transcribing anything — transposed letters, dropped characters, autocorrect “fixing” something that didn’t need fixing.

Copy-paste artifacts. Pasting an address from an email signature, a PDF, or a webpage sometimes brings along invisible characters, extra spaces, or formatting that looks fine visually but breaks a strict syntax check. This is a specific and surprisingly common source of “why did this obviously correct-looking address fail” confusion.

Autofill and formula errors. If a spreadsheet uses a formula to construct email addresses from first and last name columns (a common pattern for building B2B contact lists at scale), an error anywhere upstream — a misspelled name, an inconsistent domain reference — propagates automatically into every row using that formula, potentially affecting far more addresses than a one-off manual typo would.

Simple staleness. Nobody typed anything wrong at all — the address was correct when entered, and the person has since left their job, the company was acquired, or the domain changed. This is arguably the hardest category to catch by eye, since the spreadsheet itself hasn’t changed at all; the real world underneath it has.

The workflow: export, verify, re-import

  1. Clean up the sheet first. Make sure emails are in a single, clearly labeled column, with no header rows mixed into the data and no obvious duplicate entries (most spreadsheet tools have a built-in “remove duplicates” function worth running first).

  2. Export as CSV. Both Google Sheets (File > Download > CSV) and Excel (File > Save As > CSV) do this natively in a couple of clicks.

  3. Upload to the bulk verifier. It runs every address through the full check — syntax, MX record, SMTP mailbox ping, catch-all/disposable detection — and hands back the same file with a status column added.

  4. Filter the results. Sort by status in your spreadsheet tool. Keep valid, remove invalid, and make a judgment call on risky and catch-all based on how much each contact matters (see what “email verified” actually means for how to weigh each one).

  5. Re-import the cleaned file into your CRM, ideally replacing or supplementing the original messy import rather than layering a second copy on top of it.

What to do with each status once you’re back in the spreadsheet

  • Valid — import as-is, no changes.

  • Invalid — either delete the row or flag it in a separate column for someone to manually follow up (a phone number or LinkedIn profile on the same row might be the better contact path if email failed).

  • Risky/catch-all — import them, but consider tagging them in your CRM so anyone running a bulk send later knows to treat them with more caution than a confirmed-valid contact.

  • Disposable — usually skip; these rarely represent contacts worth carrying into an ongoing CRM record.

Setting up your spreadsheet for an easy re-verification later

If this is a spreadsheet you’ll be adding to over time — an ongoing lead tracker, a running list of event contacts — it’s worth setting it up in a way that makes future verification passes easier rather than starting from scratch each time. A simple approach: add a dedicated “last verified” date column alongside the email column, updated each time you run a verification pass. This lets you filter for rows that haven’t been checked recently (or at all) rather than re-verifying the entire sheet every time, which saves both time and, if you’re on a metered plan, verification credits.

It’s also worth keeping the verification status column itself in the sheet permanently, rather than deleting it after each cleanup pass. A visible, up-to-date status column means anyone glancing at the sheet later — not just the person who ran the last verification — can see at a glance which contacts are confirmed-good versus which need another look before being used for an important send.

Handling large spreadsheets that exceed a single upload’s practical limits

For a genuinely large spreadsheet — tens of thousands of rows accumulated over many years — it’s worth thinking about the cleanup as a staged project rather than a single afternoon’s task, especially if you’re also planning to manually review some of the flagged results rather than purely automating the decision. A reasonable approach: split the spreadsheet by a natural boundary (by year collected, by event, by original source) and verify each chunk separately, rather than treating the entire multi-year accumulation as one monolithic file.

This has a couple of practical benefits beyond just managing upload size. It lets you spot patterns specific to a particular source or time period — perhaps one particular event’s sign-up sheet has an unusually high invalid rate, pointing to a data collection problem specific to that event rather than a general issue with your whole contact base. And it makes the review process more manageable psychologically, since reviewing 500 flagged rows from one identifiable source feels more tractable than reviewing 3,000 flagged rows from an undifferentiated multi-year pile.

Deciding what to do with contacts you can’t verify but also can’t bear to delete

A specific, common dilemma worth addressing directly: what do you do with a contact who comes back invalid, but who you have some other reason to believe might still be a real, valuable relationship — a past client, a long-standing partner, someone you’re fairly sure you’ve met and talked with, even though their specific email address didn’t check out?

The answer isn’t necessarily to delete the contact record entirely just because the email failed verification. Consider keeping the contact but flagging the email specifically as unconfirmed, and looking for an alternate contact method — a phone number on the same row, a LinkedIn profile, a company switchboard number — to re-establish the connection through a different channel. Deleting an entire contact record over one failed email check risks losing institutional knowledge (who this person is, what your history with them was) that a simple status flag preserves for later, even while correctly excluding the bad email address from your next bulk send.

What this looks like when multiple people have contributed to the same spreadsheet over time

Fernbrook-style multi-year, multi-contributor spreadsheets have a specific wrinkle worth naming: different people who added rows over the years likely had different habits and different levels of care. One staff member might have always double-checked addresses before entering them; another might have rushed through a stack of business cards at the end of a long conference day. This means data quality often isn’t uniform across the whole spreadsheet — it clusters by who entered it and when, more than it’s evenly distributed throughout.

If your spreadsheet has any way to trace which contributor or which time period a given row came from — even something as simple as which tab or date range it was added under — cross-referencing your verification results against that can be genuinely useful. A concentration of invalid or messy results tracing back to one specific contributor or one rushed data-entry session is a signal about a specific past process problem, not a random, evenly-distributed decay pattern across your whole contact base, and knowing that helps you calibrate how much you trust similarly-sourced data going forward.

A quick example

A small events company — call it Fernbrook Events — is finally migrating three years of trade-show sign-in sheets, all hand-collected on paper and later typed into a single master spreadsheet by different staff members over time, into a proper CRM for the first time. The sheet has around 2,800 rows, built up gradually with no consistent process behind it. Nobody’s confident in the data quality, because it was never anybody’s job to maintain it — it just accumulated.

Running the export through the bulk verifier before import flags about 400 rows as invalid (dead domains, rejected mailboxes) and another 200 as disposable — addresses people gave at booths specifically to avoid follow-up marketing. Importing all 2,800 unchecked would have meant a CRM full of dead contacts that looked like real leads on paper, skewing every future campaign’s numbers and making the sales team chase contacts that were never reachable in the first place, wasting hours of outreach effort on people who were never going to respond.

Worth adding a specific detail from Fernbrook’s actual cleanup: several of the “invalid” rows turned out, on closer inspection, to be data entry problems rather than genuinely dead addresses — a company name accidentally pasted into the email column, a phone number where an email should have been. This is a useful reminder that “invalid” from a verification check sometimes reflects a spreadsheet data-quality issue upstream of the address itself, not necessarily a dead mailbox, and it’s worth a quick manual scan of the invalid group before assuming every one of them represents an unreachable person. Fernbrook’s office manager ended up spending an extra hour specifically on this manual scan, and it recovered close to a dozen contacts that would otherwise have been discarded as dead, simply because the underlying issue was a copy-paste mistake rather than a real bounce.

Is this worth doing for a one-time migration?

Yes, more so for a one-time migration than for an actively-maintained list, actually — because a spreadsheet that’s been accumulating unchecked entries for years is exactly the kind of list where decay compounds. A list you’ve been actively, carefully maintaining week to week has less to catch. A three-year-old spreadsheet handed off between three different people almost certainly does, and the longer it sits unchecked, the larger that gap tends to grow.

How this connects to your CRM’s own data quality practices going forward

Cleaning up a spreadsheet before import solves the immediate problem, but it’s worth thinking about how new contacts will avoid the same accumulation going forward once they’re inside your CRM. If new contacts keep entering the system through similarly manual, unverified channels — a sales rep manually adding a contact from a business card, a support agent typing in an address from a phone call — the same decay pattern will simply start over inside the CRM instead of in a spreadsheet.

Building a lightweight, ongoing verification habit into your CRM workflow — a periodic bulk re-check of contacts added in the last quarter, say, or wiring the developer API into whatever intake form feeds new contacts into the system — prevents needing another large, one-time cleanup project a few years from now. The spreadsheet cleanup described in this piece is a good moment to also set up that ongoing practice, rather than treating the CRM as a clean slate that will simply stay clean on its own.

A simple template for the columns worth having in a lead-tracking spreadsheet

If you’re setting up a new spreadsheet for ongoing contact collection — rather than cleaning up an old one — it’s worth building in a few columns from the start that make future verification passes far easier than retrofitting them later. Beyond the obvious name and email columns, consider adding: a “source” column (where did this contact come from — which event, which form, which referral), a “date added” column, a “last verified” date column, and a “verification status” column that gets updated each time you run a check rather than only reflecting the most recent state without any history.

This structure costs almost nothing to set up at the start of a spreadsheet’s life and saves considerable effort later, since it means any future cleanup — whether that’s six months or three years from now — has the context needed to prioritize what to check first (older, unverified rows) and to diagnose patterns (a particular source consistently producing lower-quality data) without having to reconstruct that information from scratch.

Clean your spreadsheet before it becomes a CRM problem

Export your Google Sheet or Excel file and run it through the bulk verifier on sfemailverifier.com before your next CRM import. For a handful of addresses instead of a full sheet, the homepage checker handles those one at a time, and if new contacts keep flowing into your sheet on an ongoing basis, the developer API can catch bad addresses automatically going forward rather than waiting for the next big cleanup project to roll around.



Share this post

Sabbir Hossain
Written by
Sabbir Hossain
CTO

Passionate about technology, innovation, and creating impactful digital solutions.

LinkedIn
/// stop guessing

Clean your list in 60 seconds.

Run your next campaign against a verified list. 20 free credits every day, no card required.

Start free