EmailNa

Home › Email verification

How to find and remove duplicate emails in Excel and Google Sheets

Excel and Google Sheets both have a one-click duplicate remover. Both miss the same kinds of hidden duplicates. Here is how to use the built-in tools, and the helper formulas that catch the rest.

By David Ray · Updated November 5, 2026 · 13 min read · How we research

Quick answer

In Excel, use Data > Remove Duplicates with only the email column checked. In Google Sheets, run Data > Data cleanup > Trim whitespace, then Data > Data cleanup > Remove duplicates. Both ignore capital letters, but both miss stray spaces, non-breaking spaces and Gmail dot and +tag variants. For messy lists, add a helper column with =LOWER(TRIM(A2)) and find duplicates on that instead. Back up first: both tools keep the first copy from the top and delete the rest.

Free template: skip the setup with ListaFix's Email List Cleaner template for Excel and Google Sheets. Paste your emails, and it flags duplicates, typos, broken addresses and role addresses for you.

Before you start: make a backup copy

Excel's Remove Duplicates deletes rows for good once you save and close the file. Before you touch anything, do one of these:

Work on the copy. If something goes wrong, you still have the untouched original, and you can compare row counts before and after.

Google Sheets: Sheets saves every change, which also means a mistake gets saved. Before deleting anything, right-click the sheet tab and choose Duplicate, and work on the copy. If you still need to go back, File > Version history > See version history lets you restore an earlier version.

Why spreadsheets miss some duplicates

Here is how Excel's built-in tools treat the most common lookalikes. Google Sheets' Remove duplicates menu behaves the same way: it also ignores capital letters but not spaces or Gmail variants.

Looks likeActually stored asDoes Remove Duplicates catch it?
Maria.Lopez@BrightPath.comSame letters, different capitalsYes. Excel ignores capitalization when comparing.
maria.lopez@brightpath.comSame text with a space at the endNo. The space makes it a different value.
maria.lopez@brightpath.comA non-breaking space copied from a web page or emailNo, and TRIM alone won't remove it either.
tom.reed@gmail.com and tomreed@gmail.comTwo spellings of one Gmail inboxNo. Excel has no idea these reach the same person.
tomreed+deals@gmail.comA Gmail "plus tag" version of tomreed@gmail.comNo.

So capital letters are not really the problem for either program's menu tool. Spaces and Gmail variations are. Even so, it's worth lowercasing everything, because the next tool you import into (an email platform or a CRM) may not be so forgiving.

One exception: the Google Sheets UNIQUE formula does treat capitals and spaces as different, which is why the formula method below cleans the addresses first.

Excel: the quick method (Data > Remove Duplicates)

If your list is fairly clean, the built-in tool is all you need.

Remove Duplicates To delete duplicate values, select the columns that contain duplicates. Select All Unselect All My data has headers EmailFirst nameLast namePhoneOKCancelCheck onlythe Email column
Click Unselect All, then check only the email column. If every column stays checked, a row only counts as a duplicate when everything matches.
  1. Click any cell inside your list.
  2. Go to the Data tab and click Remove Duplicates (it sits in the Data Tools group on Windows; on a Mac it's also on the Data tab, though the button layout differs a little between versions).
  3. Make sure My data has headers is checked if row 1 holds column names.
  4. Click Unselect All, then check only the email column. This is important. If you leave every column checked, Excel only removes rows where the name, phone and everything else also match, which is rarely what you want.
  5. Click OK. Excel tells you how many duplicates it removed and how many unique values remain.
AB1EmailRemove Duplicates sees2Maria.Lopez@BrightPath.comsame as row 3 (caught)3maria.lopez@brightpath.comoriginal4maria.lopez@brightpath.com·different (space at end)5tom.reed@gmail.comoriginal6tomreed@gmail.comdifferent (same inbox!)Excel catches itExcel misses it
Capital letters don't fool Excel, but a trailing space (shown as ·) and Gmail spelling variants do.

Excel keeps the first copy it finds, reading from the top, and deletes the rest. Keep that in mind; we'll use it to our advantage later.

Excel: highlight duplicates before you delete

If you'd rather see the duplicates before removing anything, use conditional formatting:

  1. Select the email column.
  2. Go to Home > Conditional Formatting > Highlight Cells Rules > Duplicate Values.
  3. Pick a color and click OK.

Every email that appears more than once now lights up, including the first copy. To review them together, turn on Data > Filter, click the arrow on the email column, and choose Filter by Color. Sorting the column A to Z also puts each pair next to each other so you can compare the rows by eye.

This highlight has the same blind spots as Remove Duplicates, so the next method is the one that matters for messy lists.

Excel: the helper column that catches hidden duplicates

The fix is to build a cleaned-up copy of each email in a new column, then find duplicates using that column instead of the original. Say your sheet looks like this: A is Email, B is First name, C is Last name, D is Phone, E is Date added.

fx=COUNTIF($F$2:F2,F2)AB–EFG1Email…Clean emailCount2Maria.Lopez@BrightPath.com maria.lopez@brightpath.com13raj@northwind.comraj@northwind.com14 maria.lopez@brightpath.commaria.lopez@brightpath.com25ana.lee@outlook.comana.lee@outlook.com1
Column F holds =LOWER(TRIM(A2)); column G keeps a running count. Any row with a count above 1 is an extra copy.
  1. In F1 type Clean email. In F2 enter:
    =LOWER(TRIM(A2))
    TRIM removes spaces at the start and end (and squeezes repeated spaces in the middle), and LOWER turns everything into lowercase.
  2. Double-click the small square at the bottom-right corner of F2 to copy the formula down the whole list.
  3. In G1 type Count. In G2 enter:
    =COUNTIF($F$2:F2,F2)
    and fill it down the same way.

The Count column is a running tally. The first time an address appears it shows 1, the second time 2, and so on. Filter column G to hide the 1s, and you're looking at exactly the extra copies. Unlike the highlight, the original first copy stays unflagged.

If you suspect pasted text from websites or emails, use this version in F2 instead, which swaps the non-breaking space (character 160) for a normal one before trimming:

=LOWER(TRIM(SUBSTITUTE(A2,CHAR(160)," ")))

Tip: If the Count column shows a number above 1, but the two emails look identical even after cleaning, check for a hidden character in the middle of the address, or a lookalike such as a zero in place of the letter O.

Catching Gmail dots and plus tags

Gmail ignores dots in the part before the @, so tom.reed@gmail.com and tomreed@gmail.com land in the same inbox. Gmail users also add tags like +deals to sort their mail. To match these up, add a Match key column in H2 that works from your cleaned email in F2:

=IF(RIGHT(F2,10)="@gmail.com",SUBSTITUTE(IFERROR(LEFT(F2,FIND("+",F2)-1),LEFT(F2,FIND("@",F2)-1)),".","")&"@gmail.com",F2)

For a Gmail address, it cuts everything from the + (or from the @ if there is no +), strips the dots, and puts @gmail.com back on. So tom.reed+deals@gmail.com becomes tomreed@gmail.com. Every other address passes through unchanged. Point your Count formula at column H instead of F when you use this.

Careful: Only do this for gmail.com. Google notes that for Gmail used through a work or school domain, dots do change the address. Most other providers also treat dots as real characters, so j.smith@northwind.com and jsmith@northwind.com may be two different people.

Excel: keep the newest or most complete row

Since Remove Duplicates keeps the top copy, you decide which copy survives by sorting first.

To keep the most recent entry:

  1. Click inside the list and go to Data > Sort.
  2. Sort by Date added, order Newest to Oldest. (If that option doesn't appear, your dates are stored as text and need fixing first.)
  3. Run Data > Remove Duplicates with only your Clean email or Match key column checked.

To keep the most complete entry: add one more helper column, Filled, with =COUNTA(B2:E2). It counts how many of the detail columns have something in them. In the Sort box, sort by Filled, Largest to Smallest, then click Add Level and sort by Date added, newest first, as the tie-breaker. Now run Remove Duplicates on the key column. The row with the most details wins, and among equals, the newest wins.

Remove Duplicates works on the values your formulas show, so using a formula column as the key is fine.

Tip: Before you delete anything, glance at a few pairs. Sometimes the "older" row has a phone number the newer one lacks. If that matters, copy the missing detail across by hand, or follow our guide to merging contact lists without losing information.

Excel: tidy up when you're done

Once the duplicates are gone:

Google Sheets: delete in place, or build a clean copy?

Pick your approach before you start. Here's how they compare:

ComparedDelete in place (menu)Clean copy (formulas)
Original dataRows are removedUntouched
New entries laterYou have to run it againUpdates automatically
Best forA one-time cleanup before exportForm responses and shared sheets that keep growing
Keeps other columns?Yes, whole rows are kept or removedEasiest with the email column alone

If the sheet is fed by a Google Form, the formula approach is usually the better choice, because you shouldn't delete rows from a responses sheet that other people rely on.

Google Sheets: trim the stray spaces first

Extra spaces are the most common reason two identical-looking emails don't count as duplicates. Sheets has a one-click fix:

  1. Select the email column (click the column letter).
  2. Go to Data > Data cleanup > Trim whitespace.

This removes spaces at the start and end of each cell, and repeated spaces in between. Google notes one exception: non-breaking spaces, the kind that sneak in when you paste from a web page, are not trimmed. If a pair still won't match after trimming, that's a likely cause, and the formula method below handles it.

Google Sheets: Data > Data cleanup > Remove duplicates

  1. Select the whole range of your list, including every column you want to keep together (for example A1:E500), so the names and phone numbers stay with their emails.
  2. Go to Data > Data cleanup > Remove duplicates.
  3. Check Data has header row if row 1 holds column names.
  4. Under the columns to analyze, uncheck Select all and check only the email column.
  5. Click Remove duplicates. Sheets reports how many duplicate rows it found and removed.
FileEditViewInsertFormatDataToolsSort rangeCreate a filterData validationData cleanup›Split text to columns Remove duplicates Trim whitespaceCleanup suggestions
In Google Sheets the tool lives under Data > Data cleanup. Trim whitespace is right next to it, so run that first.

According to Google, this tool treats cells as duplicates even when the letter case differs, so Sam@Northwind.com and sam@northwind.com count as one. It keeps the first row from the top and removes the later ones.

Keep the latest sign-up, not the first one

With form responses, the first row for a person is their oldest answer. If someone signed up again to update their phone number, you probably want the newer row. Sort before you remove duplicates:

  1. Select the full range, including the header row.
  2. Go to Data > Sort range > Advanced range sorting options.
  3. Check Data has header row, choose the Timestamp column, and pick Z → A so the newest is on top.
  4. Now run Data > Data cleanup > Remove duplicates on the email column as above.

Do this on a duplicated tab rather than the live responses sheet, and the original form data stays safe.

Google Sheets: a clean list with UNIQUE

On a new tab, the simplest formula is:

=UNIQUE(Responses!B2:B)

(Replace Responses!B2:B with the sheet name and column that hold your emails.) The catch: unlike the menu tool, UNIQUE pays attention to capitals and spaces, so Sam@Northwind.com and sam@northwind.com both survive. You need to clean the values first.

A first attempt might be =UNIQUE(ARRAYFORMULA(LOWER(TRIM(Responses!B2:B)))). That lowercases and trims every address, but because B2:B runs to the bottom of the sheet, all the empty rows turn into one blank entry in your results. This version filters out the blanks first:

=UNIQUE(FILTER(LOWER(TRIM(Responses!B2:B)), TRIM(Responses!B2:B)<>""))

Reading it from the inside out: TRIM removes stray spaces, LOWER makes everything lowercase, FILTER drops the empty rows, and UNIQUE keeps one copy of each address. Because it reads the whole column, new form responses show up in your clean list automatically. Want it alphabetical? Wrap it in SORT: =SORT(UNIQUE(FILTER(LOWER(TRIM(Responses!B2:B)), TRIM(Responses!B2:B)<>""))).

If non-breaking spaces are causing trouble, swap each TRIM(Responses!B2:B) for TRIM(SUBSTITUTE(Responses!B2:B, CHAR(160), " ")).

Google Sheets: flag duplicates with COUNTIF

Sometimes you want to see who signed up twice rather than silently dropping them. Say emails are in column B of your working tab.

  1. In an empty column, say F, put the header Clean in F1 and this in F2:
    =ARRAYFORMULA(IF(B2:B="", "", LOWER(TRIM(B2:B))))
    One formula fills the whole column and keeps working as new rows arrive.
  2. In G1 put Times seen and in G2:
    =IF(F2="", "", COUNTIF(F$2:F2, F2))
    Then drag the formula down. A 1 means first appearance; 2 or more means a repeat.
Responses!B (messy)B1Email2Sam@Northwind.com3sam@northwind.com 4ana@brightpath.com5SAM@northwind.com6ana@brightpath.comYour clean copyA1Clean list2sam@northwind.com3ana@brightpath.com
=UNIQUE(FILTER(LOWER(TRIM(Responses!B2:B)), TRIM(Responses!B2:B)<>"")) lowercases and trims first, so five messy entries become two real people.

For a column that fills itself as responses come in, use this single formula in G2 instead:

=ARRAYFORMULA(IF(F2:F="", "", COUNTIFS(F2:F, F2:F, ROW(F2:F), "<="&ROW(F2:F))))

It counts, for each row, how many times that email has appeared up to and including that row. Use Data > Create a filter and hide the 1s to see only the repeats.

Google Sheets: highlight duplicates with a custom formula

Sheets doesn't have a ready-made "duplicate values" rule, but a custom formula does the job:

  1. Select the email column, for example B2:B.
  2. Go to Format > Conditional formatting.
  3. Under Format cells if, choose Custom formula is.
  4. Enter =AND($F2<>"", COUNTIF($F$2:$F, $F2)>1) to highlight every copy of a duplicate, or =AND($F2<>"", COUNTIF($F$2:$F2, $F2)>1) to highlight only the second and later copies. The $F2<>"" part stops empty rows from lighting up.
  5. Choose a fill color and click Done.

Both formulas look at the Clean column from the previous step, so differences in capitals and spaces don't hide anything. The dollar signs matter: $F$2 stays fixed while $F2 moves down one row for each cell being checked. Note that Google's custom formulas can only refer to the same sheet, so keep the Clean column on the tab you're formatting.

Google Sheets: Gmail dots and plus tags

Gmail ignores dots before the @, so sam.ortiz@gmail.com and samortiz@gmail.com reach the same inbox. People also sign up as samortiz+club@gmail.com to filter their mail. Sheets' REGEXREPLACE makes a match key for these in one line. With a cleaned email in F2:

=IF(RIGHT(F2,10)="@gmail.com", SUBSTITUTE(REGEXREPLACE(F2, "(\+.*)?@gmail\.com$", ""), ".", "")&"@gmail.com", F2)

For Gmail addresses it removes the +tag and the domain, strips the dots, and adds @gmail.com back. Everything else is left as is. Run your COUNTIF or Remove duplicates on this key column instead of the plain email.

Careful: Only apply this to gmail.com. Google says dots do count for Gmail accounts on a work or school domain, and many other email providers treat s.ortiz@brightpath.com and sortiz@brightpath.com as different people.

Duplicates gone: now check the addresses themselves

A deduplicated list can still be full of addresses that will never reach anyone: typos like gmial.com, old work addresses for people who changed jobs, and made-up entries from sign-up forms. Neither Excel nor Google Sheets can tell you any of that, and sign-up forms add joke entries and throwaway addresses too. Run the list through ListaFix's typo fixer to catch misspelled domains, then check every address with Veml, which asks each mail server whether the mailbox actually exists, without sending an email. Every address comes back Passed, Risky, Unknown or Invalid with a plain-English reason, and since Veml removes duplicates before working out the price, you only pay for unique addresses.

To stop junk at the source, see how to stop fake and bot signups.

The faster way for big or messy lists

If all this feels like a lot of formulas for one cleanup, paste the email column into ListaFix's free Remove Duplicates tool. It trims spaces, ignores capitals, and has an option to treat Gmail dots and +tags as the same address. It runs in your browser, so nothing is uploaded. Then paste the clean list back into Excel or Sheets, or download it.

If you're about to load the list into an email platform, our guide on preparing a CSV for import covers the next step.

Questions people ask

Is Excel's Remove Duplicates case-sensitive?
No. Excel treats Maria@BrightPath.com and maria@brightpath.com as the same value, so capital letters alone won't stop it from finding a duplicate. Extra spaces and invisible characters will, which is why the LOWER(TRIM()) helper column helps.
Does Google Sheets' Remove duplicates care about capital letters?
No. Google says cells with identical values but different letter case are treated as duplicates by Data cleanup > Remove duplicates. The UNIQUE function is different and does treat capitals as different, which is why the formula version lowercases everything first.
Which copy does Remove Duplicates keep?
It keeps the first copy it finds from the top of the list and deletes the ones below. Sort the list first, for example newest date at the top, to control which copy survives.
Can I undo Remove Duplicates?
You can press Ctrl+Z (Cmd+Z on a Mac) right away, but once the file is saved and closed the rows are gone. That's why it's worth saving a backup copy of the file or duplicating the sheet before you start.
Why does my COUNTIF formula say there are no duplicates when I can see two copies?
Usually one copy has a space or a non-breaking space somewhere. Point COUNTIF at a cleaned column built with =LOWER(TRIM(SUBSTITUTE(A2,CHAR(160)," "))) instead of the raw email column.
Will Remove duplicates break my Google Form responses?
Deleting rows from the responses sheet changes the data other people may be looking at. It's safer to duplicate the tab and clean the copy, or use a UNIQUE formula on a separate tab that reads from the responses.
Why does my UNIQUE list show a blank row?
Because an open-ended range like B2:B includes all the empty rows below your data, and UNIQUE keeps one copy of the blank. Wrap the range in FILTER with a condition like TRIM(B2:B)<>"" to leave the blanks out.
Can I see who signed up more than once instead of deleting them?
Yes. Add a COUNTIF running count next to a cleaned email column. Any row showing 2 or more is a repeat, and you can filter or highlight those rows to review them.