Unadhi Guides

Black Friday customer email list clean-up sheet for small shops: fix gmial.com typos and drop dead and throwaway addresses before you send

Updated 26 Oct 2026 · Disclosure: the email checker linked below is an Unadhi product on the Apify Store. This guide is free, and the sheet works with a CSV from any checker that gives one verdict per address. Current Apify pricing is only on the Store page. This page has no affiliate links and nobody paid to be mentioned.

What you get: a customer email list clean-up sheet in one Google Sheet, with one row per customer and an Action column that says what to do before your Black Friday email goes out: Send, Remove: domain-does-not-exist, Fix typo? asha@gmail.com (confirm with customer), Hold: disposable-domain, Re-check later or Don't send: no marketing consent. A summary tab counts each group, so you know how many addresses you are about to drop before you send. Formulas are below. The example rows are made up.

The finished sheet

list tab (example rows are made up)

EmailConsentVerdictReasonDid you meanAction
asha@gmial.comyesriskypossible typo of gmail.comasha@gmail.comFix typo? asha@gmail.com (confirm with customer)
orders@oldbakery-example.inyesinvaliddomain-does-not-existRemove: domain-does-not-exist
ravi123@mailinator.comyesriskydisposable-domainHold: disposable-domain
meena.k@example-mail.comnovaliddomain-accepts-mail (MX found; mailbox not probed)Don't send: no marketing consent
john.doe@outlook.comyesvaliddomain-accepts-mail (MX found; mailbox not probed)Send

The first row is the most common problem in a shop's customer list: a customer typed the address on a phone at checkout, so the order confirmation never arrived and every later email goes nowhere too.

Who this is for

Small online shops (Shopify, WooCommerce or a hand-kept list from a counter or a stall) that are about to send a Black Friday, Diwali sale or Christmas email to their own customers. Addresses with dead domains and typos bounce, and Google's sender guidelines ask senders to remove recipients who bounce repeatedly. Cleaning the list once before the big send costs a few minutes; this sheet does it in one pass. It is not for bought or scraped lists: send only to people who agreed to hear from you.

Step 1: put your customers in a tab named customers

Export your customers from your shop (for example the customer CSV export in your shop admin) and import it with File → Import → Upload, "Insert new sheet". Rename the tab customers and arrange it so that:

Step 2: check the addresses

With the email checker

Add a tab named input and put this in A1. It builds the run input from column A:

="{ ""emails"": [" & TEXTJOIN(",", TRUE, ARRAYFORMULA(IF(customers!A2:A="", "", """" & TRIM(customers!A2:A) & """"))) & "], ""checkDns"": true }"

Copy the cell's value, open the Email Verifier and Indian Validators (Half Price) on the Apify Store, switch the input to JSON and paste it. A Google Sheets cell holds about 50,000 characters, so for more than about 1,500 addresses build the input in batches (rows 2 to 1501, then 1502 onward) and run once per batch.

In the run, export the dataset as CSV and import it into the Sheet as a new tab named verify. Do not rename the headers. The columns this sheet uses are input (the address as you gave it), verdict (valid, risky, invalid or unknown), reason, didYouMean, role and disposable.

Free routes

For a short list, the bounce report from your last campaign in your email tool is free and is the best evidence there is: an address that hard-bounced is gone. Free online checkers usually take a handful of addresses at a time. Any tool works with this sheet if you paste its results into a verify tab with the headers input, verdict, reason and didYouMean.

Step 3: build the list tab

Add a tab named list. Row 1 holds the headers below; row 2 holds the formulas, which you copy down as far as your customer list goes.

ColHeaderFormula (row 2)
AEmail=TRIM(customers!A2)
BConsent=LOWER(TRIM(customers!B2))
CVerdict=IF(A2="", "", IFERROR(INDEX(verify!$A:$ZZ, MATCH(A2, INDEX(verify!$A:$ZZ, 0, MATCH("input", verify!$1:$1, 0)), 0), MATCH("verdict", verify!$1:$1, 0)), "not checked"))
DReasonsame as C with "reason"
EDid you meansame as C with "didYouMean" (blank when there is no likely typo)
FRole mailboxsame as C with "role"
GAction=IF(A2="", "", IF(B2<>"yes", "Don't send: no marketing consent", IF(C2="invalid", "Remove: " & D2, IF(AND(E2<>"", E2<>"not checked"), "Fix typo? " & E2 & " (confirm with customer)", IF(C2="risky", "Hold: " & D2, IF(OR(C2="unknown", C2="not checked"), "Re-check later", "Send"))))))

Notes on the formulas:

Step 4: the summary tab

Add a tab named summary. In A1: =QUERY(list!G2:G, "select G, count(G) where G is not null group by G order by count(G) desc label G 'Action', count(G) 'Customers'", 0). Because the Action text carries the reason, you see how many addresses are dead domains, how many look like typos and how many lack consent.

For the send itself, filter list to Send and export column A, or use your email tool's own unsubscribe or suppression list for the removed addresses so they are not re-imported next time.

What to do with each group

  1. Remove (domain-does-not-exist, no-mail-server, domain-refuses-mail, bad-syntax): these addresses cannot receive mail. Keep the customer record for orders, but take the address out of the marketing send.
  2. Fix typo?: do not change the address yourself. Ask the customer on their next order, in your shop's account page or by phone if they gave one, and update it only when they confirm.
  3. Hold (disposable-domain, no-mx-implicit-a-record-only): throwaway addresses often stop working within days. Leave them out of the big send.
  4. Re-check later (unknown): the domain's DNS did not answer in time. Run those addresses again the next day before deciding.
  5. Send: the domain accepts mail. Include a clear one-click unsubscribe, which Google's guidelines require for marketing email.

Check before you act on it

Partner programme opening soon

Partner programme opening soon: join the free waitlist. Planned terms are 50% of each referred sale (75% once you have 5+ paying customers), single level, paid through Gumroad only from revenue received.

Sources

Related

← All guides

Unadhi Guides are free, independent explainers. We correct errors as soon as we find them: write to mininglife7@gmail.com.