CSV Polish

Clean a dirty CSV without uploading it.

CSV Polish finds empty and duplicate rows, stray spaces, mixed date formats, comma decimals and broken encodings — and fixes each one with a click. Everything happens in your browser.

Open a CSV

Free. No account. Files up to tens of megabytes.

Workspace

Runs in your browser: files are read locally and never uploaded.

Drop a CSV, TSV or TXT file here

The file is read by your browser only. Delimiter and encoding are detected automatically; you can change both afterwards.

Tip: you can also paste with Ctrl+V / ⌘V anywhere on this page.

What the tool does

It finds the problems first

One pass over the table detects fourteen kinds of mess — empty and duplicate rows, ragged rows, stray and invisible whitespace, inconsistent capitalisation, mixed date formats, thousand separators and comma decimals, mixed yes/no values, empty columns, repeated headers. Each one is listed with a count, and Preview shows the exact before and after before you commit to anything.

It reads the file as it was written

Delimiter detection covers commas, semicolons, tabs and pipes, including Excel's sep= line. Encoding detection checks for a BOM, verifies UTF-8 byte by byte and separates Windows-1251 from Windows-1252 by the shape of the text. Cells that already arrived garbled — «Ð¿Ñ€Ð¸Ð²ÐµÑ‚» — are decoded back to the original words.

It exports what the next program expects

Choose the delimiter, quoting, line endings and encoding on the way out: UTF-8 with a BOM so Excel opens Cyrillic correctly, or plain UTF-8 for a database loader. Copy TSV puts the table on the clipboard ready to paste into a spreadsheet, and the change log records every fix you applied, in order, so the edit is explainable later.

Cleaning CSV files in the browser

CSV Polish is an online CSV cleaner that runs where your data already is: in the browser tab you have open. Drop in a CSV, TSV or plain text export — from a CRM, a bank, an online shop, a form builder — and it detects the delimiter and the encoding, shows the table as a spreadsheet with a detected type on every column, and lists what is wrong with it. Duplicate rows, empty rows, ragged rows that have more or fewer cells than the header, leading and trailing spaces, double spaces, non-breaking and zero-width characters, the same city written three ways, dates in four formats, amounts with thousand separators, a yes/no column that also contains 1, 0, true and Y — each is counted and each has its own fix. Nothing changes until you press a button, every fix can be previewed, and the last fifty steps can be undone.

The reason it works this way is privacy. A customer list, a payroll export or a set of order records is exactly the kind of file that should not be posted to a stranger's server for a five-minute cleanup, and most online CSV tools do upload it. Here the file never leaves your device: it is read with the browser's File API, parsed and edited in memory, and written back out as a download. The page makes no network requests while you work, there is no account, no analytics and no storage — reload the tab and the data is gone. That also means the tool is useful on a laptop with no connection and inside networks where uploading a spreadsheet would be a policy violation. When you are done, export with the delimiter, quoting, line endings and encoding the receiving system needs — UTF-8 with a BOM for Excel, plain UTF-8 for a script — or copy the whole table as TSV and paste it straight into a sheet.

Frequently asked questions

Is my file uploaded anywhere?

No. The file is read by your browser with the standard File API, parsed in a script on this page and kept in memory until you close the tab. There is no server to send it to: this site is a set of static files, it makes no network requests while you work, and it has no analytics or tracking scripts. You can confirm it by opening your browser's network tab, or by disconnecting from the internet after the page has loaded — everything keeps working.

How large a file can it handle?

The limit is your browser's memory, not a server quota. Files of a few tens of megabytes — roughly a few hundred thousand rows — work comfortably on a normal laptop; the grid only renders the rows you can see, and parsing, scanning and exporting run in chunks so the page stays responsive. Above that expect the browser to slow down, and on a phone start being careful past about 10 MB.

Does it change my data on its own?

No. Loading a file only reads and analyses it: the issues panel lists what it found, with a count for each problem, and nothing is modified until you press Fix. Every fix can be examined first with Preview, which shows the exact before and after for up to 40 example cells or rows.

Can I undo a fix?

Yes. Every fix and every column operation goes onto an undo stack of the last 50 steps — use the Undo and Redo buttons in the export bar, or Ctrl+Z and Ctrl+Shift+Z (⌘Z / ⌘⇧Z on a Mac) inside the workspace. The Changes button lists everything applied so far in order, and you can copy that list as plain text to paste into a ticket or a handover note.

Will the exported file open correctly in Excel?

Yes — export with the default “UTF-8 with BOM” setting. The byte order mark tells Excel on Windows that the file is UTF-8, which is what makes Cyrillic and accented names open correctly on a double-click. If the file is going into a script or a database loader instead, switch the encoding to plain UTF-8; some strict parsers treat the BOM as part of the first column name.

It shows «Ð¿Ñ€Ð¸Ð²ÐµÑ‚» instead of Russian text. What now?

That is mojibake — UTF-8 bytes that were read through a single-byte code page. Two things can help. If the whole file looks like that, pick the right encoding in the toolbar (Windows-1251 for Cyrillic exports from older Russian software, Windows-1252 for Western European) and the file is re-decoded from the original bytes. If only some cells are affected, the damage is already inside the file, and the “Garbled text” issue repairs those cells by re-encoding them and reading them back as UTF-8.

My file uses semicolons, or tabs. Is that a problem?

No. The delimiter is detected automatically from commas, semicolons, tabs and pipes, and you can override the choice in the toolbar at any time — the file is re-parsed from the original text, so nothing is lost. Excel's sep=; first line is recognised, honoured and removed from the table. You can also export with a different delimiter than the one you opened, which is the simplest way to turn a semicolon export into a comma file, or a CSV into a TSV.

Can I get TSV out, or paste the result into a spreadsheet?

Both. Choose Tab as the export delimiter and Download CSV writes a .tsv file. For a quick hand-off, Copy TSV puts the whole table on the clipboard as tab-separated text — that is the format Excel, Google Sheets, Numbers and LibreOffice all paste straight into cells, with no import dialog.

What happens to rows that have the wrong number of columns?

They are shown as they are, not silently repaired: a short row gets hatched placeholder cells, and a long row shows its extra values at the end of the line in red. The “Ragged rows” issue then pads the short rows with empty cells and widens the table for the long ones, so every row ends up the same length and the file becomes loadable everywhere. Extra cells are kept, never dropped.