CSV Lead Cleaner

Deduplicate, normalize phones to E.164, validate emails and fix domain typos — entirely in your browser, the file is never uploaded.

Loza CRM·Updated: October 2, 2026

Quick answer

Upload a CSV — the tool detects columns, removes duplicates, normalizes phones to E.164, validates emails and flags disposable domains. Export clean.csv, rejected.csv with reject reasons, and report.json. All processing is local.

The file is never uploaded — processing runs entirely in your browser.

How to use

  1. Drop a CSV/TSV/TXT file (up to 50 MB, 500,000 rows) — pick the encoding if needed
  2. Check the auto-detected columns: email, phone, name, country
  3. Enable rules: domain typo fixes (with preview), disposable flagging, E.164, Title Case
  4. Choose deduplication (email / phone / both) and what to keep — first or most complete
  5. Download clean.csv, rejected.csv with reject_reason, and report.json

Why you need it

A dirty CSV is the main source of rejected leads on import: duplicates double the dialer load, national-format phones fail API validation, and gmial.com instead of gmail.com is a lead lost forever. Cleaning before the CRM import is cheap insurance.

The cleaner runs fully in the browser on Papa Parse — the file is never uploaded, which makes it safe for lead bases under NDA. Columns are auto-detected from headers and content but stay editable. The cleaning pipeline trims whitespace and invisible characters, lowercases and validates emails, suggests domain typo fixes against top domains (gmial→gmail, hotmial→hotmail — applied only after you preview them), flags disposable domains, and normalizes phones to E.164 via libphonenumber.

Deduplication works on email, phone or both, with a choice of keeping the first record or the most complete one — handy when dupes carry different field coverage. The report breaks the file down: rows in, clean rows, duplicates removed, invalid emails, invalid phones, disposable domains, typos fixed.

You get three exports: clean.csv ready for import, rejected.csv with a reject_reason column (duplicate, invalid_email, invalid_phone, disposable_email) that doubles as a supplier complaint, and report.json for your records. CSV injection is handled on export: cells starting with =, +, -, @ get a protective prefix — except normalized E.164 phone numbers, which are escaped never.

Loza CRM computes these metrics for your campaigns automatically — try it free.

Open Loza CRM

FAQ

Is the file uploaded to a server?
No. Parsing and cleaning run entirely in your browser — the file never leaves the page. Safe for NDA-covered lead lists.
How do domain typo fixes work?
The email domain is compared to top domains (gmail, yahoo, hotmail…) at Damerau–Levenshtein distance ≤ 1 — that catches gmial, hotmial, outlok and letter transpositions. Fixes apply only if you enable the rule and see the preview.
First vs most complete — what is the difference?
"First" keeps the first row with a given dedupe key. "Most complete" replaces it with a row that has more non-empty fields — useful when dupes differ in fill quality.
What goes into reject_reason?
The rejection cause: duplicate, invalid_email, invalid_phone or disposable_email. rejected.csv works well as a formal complaint back to the lead supplier.
Are Windows encodings supported?
Yes — UTF-8 by default, Windows-1251 and Windows-1252 selectable before processing.

Other tools