Free tool

Paste a messy customer list, get one you can actually import

Every business has this list. It came out of an old system, or three systems, or a decade of someone typing names in a hurry. Half of it is in capitals, the same customer is in there four times, and the phone numbers are in six different formats. Paste it here and get it back clean. It never leaves your browser.

Your list

Nothing is uploaded. There is no server behind this page, so the list is read in your browser and is gone when you close the tab. That is the only reason it is reasonable to paste a customer list into a website at all.

What it does to a list

Names

ALL CAPS and all lowercase names get proper capitalisation, with the surnames that break naive rules handled: McKenzie, van Houten, de la Rosa, O’Brien, Jean-Luc. A name already typed correctly is left exactly as it is.

Splitting

Full names split into first and last, with particles kept on the surname where they belong, and "Tremblay, Jean-Luc" recognised as a surname-first export rather than two people.

Addresses

Trimmed, lowercased, unwrapped from the "Name <address>" form, checked for shape, with role addresses and likely domain typos flagged rather than silently corrected.

Phone numbers

North American numbers into one consistent format, extensions kept, international numbers left as you had them because reformatting them correctly needs rules this tool does not have.

Duplicates

Matched on address, then number, then name and company. The row that survives inherits any detail the duplicate had and it did not, so merging does not lose data.

The rest

Empty rows and obvious test entries set aside in their own list rather than deleted, so the count going in always accounts for the count coming out.

Why this one has no server

Every other tool on this site that does real work sends something to a function. This one does not, and the reason is the input. A customer list is the single most sensitive thing a small business owns, and "we do not store it" is a promise you have no way to verify.

So the promise here is structural instead. The parsing, the cleanup and the output are all JavaScript running in your tab. There is no endpoint to send it to, no request in the network panel, and nothing to retain. Open your browser's developer tools and watch: pasting a list and pressing the button produces no network traffic at all.

The parts that are harder than they look

Cleaning a name list is one of those jobs that seems like an afternoon of find and replace until you meet real names.

  • Capitalisation cannot be applied to everything. A rule that turns MARIE DE LA ROSA into Marie de la Rosa will also turn McKenzie into Mckenzie. The only safe rule is to leave anything already in mixed case alone, because if somebody typed it with capitals in the middle they almost certainly meant them.
  • Surnames are not the last word. "de la Rosa" is one surname of three words. Splitting on the last space gives you a first name of "Marie de la" and a surname of "Rosa", which is how you end up greeting a customer as Marie De La.
  • Mc and Mac are not the same problem. Mc is almost always followed by a capital. Mac is a real prefix in MacLeod and also just the start of Macey and Machin, so guessing there produces MacEy.
  • An email typo cannot be auto-corrected safely. One character away from a common domain is usually a mistake and occasionally a real company. Fixing it silently sends someone's private message to a stranger.
  • International numbers should be left alone. Formatting a number correctly requires knowing the country's rules. A tool that reformats everything into a North American shape produces numbers that do not dial.

What to do with it once it is clean

A clean list is the prerequisite for the most valuable and least built layer in most businesses: contacting the customers you already have. Nearly every business we work with has a list it has never once used, usually because importing it was too painful to face.

What that layer looks like once it exists is covered in the back office blueprint, and the jobs that can run against it without anybody being at a desk are in jobs that run overnight. If you want the promotional copy to go with it, the promo kit writer writes one promotion for every channel it has to run on.

List builder FAQ

Does my list get uploaded anywhere?
No. There is no server behind this page. The list is parsed by JavaScript in your own browser, the results are built there, and closing the tab is the end of it. That is not a policy we are asking you to trust, it is the architecture: there is no endpoint for it to be sent to.
Why does it not fix names that are already mixed case?
Because they are usually right, and a capitalisation rule confident enough to "fix" them would break van Gogh, McKenzie, de la Rosa and every name with a lowercase particle. It only steps in when a name is shouting or whispering, which is what a bad export actually looks like.
It flagged an email as a typo instead of fixing it. Why?
Because a wrong guess sends your message to a stranger. A domain one character away from gmail.com is very likely a typo and it is also possibly a real domain, so the tool tells you and leaves the decision with you. It corrects only what is unambiguous, like case and stray whitespace.
What counts as a duplicate?
The email address first, because it is the most reliable identifier. Failing that the phone number, compared on digits so formatting differences do not hide a match. Failing both, the name and company together. Rows with none of those are never merged into each other, because there is nothing to match on.
Where did the missing rows go?
Nowhere. Everything the tool sets aside is in its own tab with a count: duplicates, role addresses if you asked for them separately, and rows with nothing usable in them. The numbers at the top always add up, which is the point.
Can I use the cleaned list to send marketing email or texts?
That depends on consent, not on the list being tidy. Canadian rules require consent you can evidence, clear identification of the sender and a working unsubscribe. Cleaning a list you had no permission to contact does not create permission. What this is genuinely for is the list you already have the right to use and cannot import because it is a mess.
It missed a column or read one wrong.
Add a header row and it will use it. Without headers it infers each column from its contents, which is right most of the time and can be fooled by a column of numbers that are not phone numbers. A header row of "First name, Last name, Email, Phone, Company" removes all the guessing.