Home › Blog › Clean a Messy CSV Before Cold Email (with the Role-Address Regex)

Back to Blog
List Quality4 min readJuly 20, 2026

How to Clean a Messy CSV Before Cold Email (Names, Domains, Duplicates, and the Role-Address Regex)

Every scraped or exported list arrives broken the same ways: SHOUTING names, trailing spaces, URL-shaped domains, three copies of the same person, and a layer of info@ addresses waiting to waste your verification credits. Here is the cleaning order that fixes all of it, the regex that filters role accounts, and when NOT to exclude them.

Cold Email Expert · WarmInboxes
Cleaning a messy lead CSV before a cold email campaign

Quick Answer: Normalize, Filter, Dedupe, Then Verify

Clean in this order: structure → emails (lowercase, trim) → domains (bare, no URLs) → names (proper-case, no titles) → role/disposable filter → three-level dedupe → verification. The role regex covers info@, sales@, support@ and friends, but skip it for local-business lists where info@ IS the owner. The free CSV Cleaner runs the whole pass in your browser; verification credits only get spent on rows that survive.

The Cleaning Pass, Step by Step

Seven steps, in dependency order
1 STRUCTURE   drop empties, fix delimiters/encoding
2 EMAILS      lowercase, trim, strip gmail dots/+tags
3 DOMAINS     https://www.acme.com/x  →  acme.com
4 NAMES       "JOHN SMITH JR." → John Smith
              strip Dr./PhD/emojis; flag garbage
5 FILTER      role regex + disposable domains
              (skip role filter for local-biz lists)
6 DEDUPE      email exact → name+domain fuzzy →
              company cap (3-4/domain, staggered)
7 VERIFY      only what survived steps 1-6

ROLE REGEX (local part, case-insensitive):
^(info|contact|hello|sales|support|admin|office|
team|billing|accounts|hr|jobs|careers|help|
enquiries|inquiries|marketing|press|media|legal|
noreply|no-reply|postmaster|webmaster|abuse)@
  • •Verification goes last on purpose: verifiers charge per row, and steps 1-6 typically delete 15-30% of a scraped list. Cleaning first is literally free money, then the survivors go through your verification waterfall.
  • •Domain normalization powers everything downstream: company-level dedupe, the provider labeling, and CRM matching all key off the bare domain, and a list where half the domains are URLs breaks all three silently.
  • •Dedupe against your history, not just within the file: the file-internal pass removes the scraper's repeats; the check against your master database removes the people you emailed in March.
  • •Flag, do not silently delete, the weird rows: a quarantine tab for garbage names and malformed emails lets you salvage the recoverable ones and audit what your data source keeps getting wrong.

The Local-Business Exception, Operationalized

The role filter has one big carve-out: lists where the business IS the contact. On a Google Maps scrape of UK trades (like our UK SMB list), [email protected] is the owner reading their own mail, and deleting it deletes the lead. Run those lists with a reduced filter (drop only noreply, postmaster, abuse, webmaster), write copy addressed to the business rather than a merge-field first name, and give the segment its own campaign with the stricter 3% stop rule, the same isolation any different-risk segment earns.

Make cleaning a pipeline, not an event. The teams whose lists are always clean did not get better at cleaning, they made it impossible to skip: every CSV passes the same seven steps before any tool sees it, automated where volume justifies. Data quality is the highest-leverage boring thing in cold email, it compounds through verification costs, bounce rates, personalization quality, and reply rates simultaneously, and it is entirely under your control before the first send.

Frequently Asked Questions

What order should I clean a lead CSV in?

Order matters because later steps depend on earlier ones: (1) structural fixes, drop empty rows, fix broken delimiters, normalize encoding so unicode junk does not defeat matching; (2) normalize emails, lowercase, trim, strip Gmail dots and plus tags; (3) normalize domains, extract the bare company domain from URL-shaped values (https://www.acme.com/about becomes acme.com); (4) fix names, proper-case SHOUTING and lowercase names, strip titles and emojis; (5) filter role addresses and disposables; (6) dedupe, email-level then person-level then company cap, which only works after normalization; (7) verify what survives. Cleaning after verifying wastes credits on rows you were going to delete.

What regex filters role-based emails?

Match the local part against the standard role list: ^(info|contact|hello|sales|support|admin|office|team|billing|accounts|hr|jobs|careers|help|enquiries|inquiries|marketing|press|media|legal|noreply|no-reply|postmaster|webmaster|abuse)@ (case-insensitive). That catches the overwhelming majority. Our free CSV Cleaner applies this list automatically alongside disposable-domain and syntax filtering, entirely in your browser, so nothing uploads anywhere.

When should I NOT exclude role addresses?

Local and micro businesses, where info@ is genuinely the owner's working inbox and often the only address that exists. If your ICP is plumbers, restaurants, or single-location shops (Google Maps lists especially), blanket role filtering deletes your actual market. The rule: named-contact B2B lists get the full role filter; local-business lists keep info@ but still drop noreply@, postmaster@, and abuse@, and the campaign copy addresses the business, not a fake first name. The full reasoning is in our role-address post.

Why do names need cleaning before sending?

Because {{first_name}} renders whatever the column holds: 'JOHN', 'john smith jr.', 'Dr.', or a LinkedIn emoji. Proper-case the names, split first and last correctly, strip honorifics and credentials, and set a fallback for anything that still looks wrong (empty, single letters, company names in the name field). One glance at 'Hi JOHN,' tells a prospect exactly how personal your email is, and the spintax tester will not catch it because the template is fine, the data was not.

Should I clean in Sheets, OpenRefine, or Python?

Volume decides. Under 10K rows: Sheets formulas or our CSV Cleaner cover everything above. 10K-100K with messy variance: OpenRefine is built for exactly this, clustering similar values (three spellings of the same company) that formulas cannot see. Beyond that or recurring weekly: a Python script (pandas) encoding the same steps, run as part of your import pipeline so cleaning happens by default rather than by memory. The steps are identical everywhere; only the engine changes.

Get FREE .com Domains

Prewarmed Inboxes So You Can Send Cold Emails Today

Get Prewarmed & Fresh Inboxes

Prewarmed & Fresh Inboxes

Google, Microsoft 365 and Azure inboxes with free prewarmed domains and DNS configured before you log in. Prewarmed inboxes send the day they land; every order is delivered within 48 to 72 hours.

Get Prewarmed & Fresh Inboxes