Clean messy spreadsheets in seconds
Drop a CSV or Excel file and CSV Formatter trims whitespace, fixes capitalization, splits name columns, removes duplicates and exports to clean CSV, JSON or formatted XLSX — all in your browser, nothing uploaded.
How to use CSV Formatter
Four simple steps — your data is cleaned locally in your browser and never uploaded anywhere.
Drop your file
Drag a .csv, .xlsx, .xls, .tsv or .txt file onto the dropzone, or click to browse. Only one file at a time — dropping a new one replaces the previous.
Review the summary
CSV Formatter inspects every column, detects types (text, number, date, email, boolean) and lists issues like empty rows, duplicates and messy whitespace.
Tune & apply cleaning
Toggle the cleaning options you want, then click "Apply cleaning". The preview re-renders from the original data and shows before/after stats.
Export anywhere
Download clean CSV (UTF-8 with BOM for Excel), JSON, nested JSON, or formatted XLSX — or copy the table as Markdown / JSON to your clipboard.
100% private
Your spreadsheet is parsed entirely in your browser. No upload, no server, no tracking — your data never leaves your device.
Smart auto-clean
Trim whitespace, collapse spaces, normalize emails, title-case names and standardize dates — all detected and applied automatically.
Split & dedupe
Split a "Full Name" column into First and Last, and remove exact duplicate rows or empty rows in one click.
Multi-format export
Export to clean CSV (Excel-ready BOM), JSON, nested JSON, or formatted XLSX. Or copy as Markdown / JSON for docs and chat.
Live preview
Scroll through up to 100 rows with a sticky header. Modified cells are highlighted yellow — click any to see its original value.
Cross-platform
Works on Chrome, Firefox, Safari, Edge and modern mobile browsers. Uses PapaParse and SheetJS — the battle-tested open-source parsers.
Frequently asked questions
No. CSV Formatter runs entirely in your browser using JavaScript. Your file is read into memory on your own device, cleaned there, and the result is offered as a download — nothing is ever uploaded. You can verify this by opening DevTools → Network and watching that no file data leaves your device.
Input: .csv, .tsv, .txt (plain delimited), .xlsx and .xls (Excel). Output: clean .csv (UTF-8 with BOM for Excel compatibility), .json (array of objects), .json with nested name object, and .xlsx (via SheetJS). You can also copy the table as Markdown or JSON.
Each column is sampled: if more than 80% of its non-empty cells match a number pattern, it is flagged "number"; if they match date patterns (DD/MM/YYYY, MM/DD/YYYY, YYYY-MM-DD, DD-MM-YYYY, or Indonesian "12 Januari 2020"), it is "date"; if the header contains "email" or >80% of cells match an email regex, it is "email"; if >80% match true/false/yes/no/y/n/0/1, it is "boolean"; otherwise "text". Detection only guides cleaning — it never deletes your data.
If you enable "Split full name column", the app looks for a header matching "Full Name", "Nama Lengkap" or "Name" (case-insensitive). That column is split on the first space into a "First Name" and "Last Name" column. Single-word names get an empty last name. The original full-name column is replaced.
No. SheetJS reads the cached cell values, not live formulas. If a cell contains a formula, you get its last computed value. Formatting (colors, fonts, number formats) is also not preserved on re-export — the focus of this tool is clean data, not faithful spreadsheet cloning.
The app handles roughly 50,000 rows smoothly on a typical laptop. Beyond that, parsing and rendering slow down and the preview table (capped at 100 visible rows) may take a moment. There is no hard limit — the only constraint is your device's memory.
Any modern browser from the last few years: Chrome 90+, Firefox 88+, Safari 14+, Edge 90+, and equivalent mobile browsers. Internet Explorer is not supported. PapaParse and SheetJS are loaded from a CDN on first visit.