Validate data types, ZIP codes, phone numbers, NPIs, US states, dates, and required fields against per-column rules — then fix errors in place and export to CSV, JSON, or Excel. 100% in your browser; your data never leaves your computer.
Paste, drop, or open your data
Press Ctrl+V to paste from Excel or a text file, drag a CSV or Excel workbook here, or use Open file above. The separator is detected automatically.
Set per-column rules and the validator flags every cell that doesn't match — then fix errors in place before you import. Common checks:
Data types & formats — number, integer, boolean, date, and required fields, with configurable missing-value handling (NULL, N/A, and custom sentinels).
Business fields — validate ZIP codes, US phone numbers, US state codes, email addresses, SSN, EIN, and NPI (with Luhn checksum) — and normalize them to a consistent format.
Time series gaps — find missing dates in a daily, weekly, or monthly series (no pandas, no SQL) — including Unix epoch timestamps in seconds or milliseconds.
Sequence gaps — spot holes in numeric ID or invoice sequences (1001, 1002, 1004 → 1003 missing).
Duplicates & blanks — highlight duplicate rows, empty rows, and columns with missing values.
Everything runs in your browser — your data is never uploaded. Export clean data to CSV, JSON, JSONL, or Excel, and save your validation rules to reuse on the next file.
Help & keyboard reference–no data
Loading data & input options
Paste (Ctrl+V) from Excel or a text editor — the separator is auto-detected
Drag & drop a CSV or Excel file onto the grid
Open file reads .csv, .tsv, .txt and Excel .xlsx/.xls; Excel formulas come in as their computed values
Start a blank sheet / New sheet for typing from scratch — it grows as you Tab or arrow past the edges
Encoding (toolbar) — auto-detected and BOM-aware; force UTF-8/16/32, windows-1252, Cyrillic, Greek, Shift-JIS etc. if accents look wrong
Header — First row is column names is auto-guessed; untick it if the first row is really data. Upper/Lower case the header names
Separator — auto-detected (comma, semicolon, colon, bar, tab, caret, space); pick one to force a re-parse. The detected one shows in the status line
Quoting — Treat quotes as data for files that aren't really quoted, Quote char is apostrophe for '…' files, Backslash escapes for \n \t \, style escaping
Lines — Skip N leading junk lines (preambles, report titles), Limit to the first N rows for a quick look at a huge file
Editing cells
Double-click a cell to edit with the cursor where you clicked
F2 or Enter edits with the cursor at the end; just start typing to replace
Enter commits and moves down, Tab moves right, Esc cancels
Ctrl+E opens a cell with newlines/tabs in a full editor
Copy/Cut/Paste (Ctrl+C/X/V) work on ranges, Excel-compatible; Delete clears
Ctrl+Z undo, Ctrl+Y redo
Columns & rows
Click a header to sort (A→Z, Z→A, off). Empty cells go first ascending, last descending
Double-click a header to rename it (needs "First row is column names")
Drag a header to reorder; drag its edge to resize
Validate (toolbar) flags cells that don't match their column's type. Rules… opens a per-field matrix: Type (Alpha, Numeric, Integer, Boolean, Date — with a date format incl. Unix epoch seconds/milliseconds — plus business formats: ZIP, US phone, US state, Email, SSN, NPI with Luhn checksum, EIN, URL), Required, min/max value, min/max length, allowed values, regex, custom JS, and Auto-fix (UPPER/lower/trim, which also flags non-conforming cells)
Missing values — tick +sentinels next to Required to also treat missing-value tokens as blank. Choose which count (NULL, N/A, NA, -, ., none, nil) with the checkboxes at the top of the dialog, plus your own custom list; any column can override the global set
Apply rules saves the rules without changing data; Apply fixes now saves them and runs the Auto-fix transforms. Save… / Load… store a rule set as a .json file — rules re-map by column name, so a saved profile works on any file with those columns
The status line shows a live count (⚠ N invalid cells in M rows / ✓ all valid); Show only invalid rows filters to them and fixing a cell clears its flag immediately
Click the type badge (I/N/D/S) for column stats and the detected format; File stats (toolbar) summarizes the whole file — rows, cells, empty rows, duplicate rows
Right-click a header, row number, or cell for context actions
Gaps, formats & splitting
Find date gaps… (column menu, date columns) — spots missing dates in a time series. The interval is auto-detected (daily, weekly, monthly, yearly, or weekdays-only) and you can override it. Works with Unix epoch columns once you set the type to Date + Epoch in Rules; multiple timestamps on the same day count as one date
Find sequence gaps… (column menu, integer columns) — spots holes in an ID or invoice sequence (1001, 1002, 1004 → 1003 missing). Step is auto-detected or set by you
Format field… (column menu) — normalizes phone (617-555-1234, (617) 555-1234, dots, digits, E.164), ZIP (5-digit, ZIP+4, 9-digit — and pads leading zeros Excel stripped), and SSN (111-22-3333 or 111223333). The field type is auto-detected, or taken from what you declared in Rules. Values it can't parse are left alone and tagged red for review
Split column… (column menu or Row tools) — break a multi-value cell into rows (one per value, other columns duplicated — normalizes for a database load), columns (spread across new columns), a fixed number of columns, or by business format (US phone → area/number/extension; City, State ZIP → city/state/zip). Unparseable rows are tagged red
Find, filter & transform
Ctrl+F or Find & replace — text, regex ($1 groups), match-case, whole-cell, scoped to selection or all
Filters row: type text, or >10<5!=x/regex/(empty)(nonempty)(dups) — (dups) shows only rows whose value repeats in that column
Transform ▸ (right-click) — UPPERCASE, lowercase, Title Case, Trim, Trim + single spaces, Remove accents, Strip number formatting ($1,234.50 → 1234.5; detects US vs European decimal style)
Date format / Number format (column menu) reformat in place
Row tags (right-click a row) — colour-code rows by hand; sort by tag, filter to one colour, or clear them. Splits and formatters tag problem rows red automatically
Copy with header (right-click) copies the selected cells with their column names attached
Empty rows & saving
Row tools bar: Highlight duplicates colors repeated rows, Show only duplicates filters to them grouped, Remove duplicates keeps the first of each
Right-click a column header → Highlight duplicate values to spot key collisions (e.g. a repeated ID); sort by that column to compare the rows before deciding what to keep
Row tools bar: Remove trailing drops blank rows at the bottom, Remove all empty clears interior blanks too
Skip trailing empty rows (footer) leaves bottom blanks out of the saved file automatically
Download CSV with your choice of separator, line ending, and header; JSON (objects when headers exist, else arrays), JSONL (one record per line), or Save as Excel. "Type JSON values" turns numbers/booleans into real types (identifiers with leading zeros stay strings). Duplicate header names are suffixed in JSON (amount, amount_2) so no column is lost
YYYY year · MM/M month · DD/D day · MMM Jan · MON JAN · HH:mm:ss time
Values that can't be parsed as dates are left unchanged
Truncate column
Cuts values longer than the limit — useful before loading into a fixed-width database column. This removes data. Truncated rows are tagged red so you can review exactly what was cut.
Validating…
0%
Find sequence gaps
Detects missing values in a numeric sequence (e.g. invoice or ID numbers). The step is auto-detected; override it below if needed.
Find date gaps
Detects missing dates in a time series. The interval is auto-detected from the data; override it below if needed.
Format field
Split column
Break a column that holds multiple values (e.g. Adventure|Animation|Children) into separate columns or rows.
Split into…
Validation rules
Fields down, rule types across. Empty input = rule off. Any value fills = rule on.
Auto-fix checked — click Apply fixes now to transform the data (or Apply rules to just save).
Number format
Non-numeric values are left unchanged. The column becomes formatted text.