Drop a messy contact list and get it back deduped, with every valid phone in E.164 and the rest counted and marked for you, one Name column split into First and Last, and the junk addresses pulled out into their own file. Your list is read inside this tab and is never uploaded.
Your file is never sent anywhere. The only requests this page makes are for its own code, anonymous counters that record a page view, a file being opened and a clean being run with nothing about the file attached to them, and the optional disposable domain block list if you switch that one filter on.
Detected from your headers. Fix anything it got wrong, and set unused ones to none.
The real objection to every free CSV cleaner is that you are handing a client's lead list, with names, emails and phone numbers on it, to a stranger's server. There is no upload step here to hand it to. The file is read by your own browser, every pass runs on your own machine, and the ZIP is built locally before it downloads. Close the tab and it is gone. That matters more than any feature comparison when the list belongs to someone who trusted you with it.
Whitespace and unicode first, so a name with a non breaking space stops looking different from the same name without one. Then names: one Name column split into First and Last, with the particles in "Juan de la Cruz" kept on the surname side, and shouty ALL CAPS entries turned back into normal case. Then phones, parsed properly rather than by stripping digits and hoping. Then emails, checked for syntax and screened against role prefixes, typo domains and optionally a disposable list. Then any date column you pick, rewritten as YYYY-MM-DD in the order you tell it. Then duplicates, matched on email and on the E.164 form of the phone so that 0300 1234567 and +923001234567 are recognised as one person.
Most CRMs and every SMS platform want E.164, the plus and country code form. The usual homemade fix is to strip everything that is not a digit and glue a country code on the front. That quietly breaks half of the world, because the UK, Germany, France, Australia and many others write national numbers with a leading zero that has to come off before the country code goes on. The result is a number that looks right, imports cleanly, and never delivers. This tool uses libphonenumber's real metadata instead, so a number that cannot be valid is told to you before you import it rather than after your first failed send.
It does not verify that an email exists, because no browser can. It does not tell you whether a phone is a live mobile, because that needs a carrier lookup you have to pay for. It does not promise that any particular CRM will accept the file, and it does not pretend that GoHighLevel silently swallows bad rows, because it does not: GHL shows import errors and lets you map columns by hand. What this saves you is the part that is genuinely tedious, which is reformatting thousands of phone numbers correctly and working out which of your rows are the same person twice.
Parsing is streamed off the main thread where your browser allows it, so the tab stays responsive. A list of a few thousand rows finishes almost instantly. Around fifty to a hundred thousand rows expect a few seconds, and the progress bar tells you where it is. Past that you are pushing what a browser tab can hold in memory, so split the file first.