Skip to content

CSV Data Profiler & Column Analyzer

Paste or load a CSV-style file and choose its delimiter. Use the profile to spot data-cleaning issues before transforming the table.

Runs locally in your browser
1CSV / TSV input2Profile data3Column profile

CSV / TSV inputCSV · TSV · ; · |
Column profile

How to profile a delimited file column by column

Paste delimited text or load a .csv, .tsv or .txt file and the page reports what is inside it: rows, columns, missing cells, duplicate rows and one line of statistics per column. The file is read in the page; profiling sent no network request in testing.

The profile is a snapshot of the text in the box. Edit the data or change the delimiter and press Profile data again — the tiles and the table are rebuilt from the current input.

  1. Paste your data into the CSV / TSV input box, or press Load file to read a .csv, .tsv or .txt file. The text lands in the box, so it can still be edited before profiling.
  2. Leave Delimiter on Auto-detect for comma, tab, semicolon or pipe files, or choose the exact separator when a file mixes several.
  3. Press Profile data: four tiles summarise the table and the column profile lists every column with its detected type, filled and missing counts, unique values, minimum, maximum, average and up to three sample values.
  4. Press Download to save the profile as voritools-csv-profile.json, or Clear to empty the form before the next file.

How each column gets its type and what the numbers mean

What the four tiles count

Rows counts the data rows below the header and Columns counts the header cells. Missing cells adds up every empty or whitespace-only cell in the table, including the tail of rows that are shorter than the header. Duplicate rows counts rows whose parsed cells are identical to an earlier row: in the built-in example the repeated Sam row is one duplicate.

How a column gets its type

The filled values of a column are tested in a fixed order — boolean (true, false, yes, no), integer, number including scientific notation, ISO-8601 date, JSON — and anything that matches none of them is a string; a column with no values at all is typed empty. Every value has to match, so one stray value drops the column to string. Numeric columns report the real minimum, maximum and mean to two decimals; date columns report the earliest and latest date; text, JSON and boolean columns report the length of the shortest and longest value, marked "chars", with no average.

Parsing rules and limits

Fields may be quoted, a doubled quote inside a quoted field stays one quote, and a quoted field may contain the delimiter or a line break; a leading byte-order mark is ignored. Empty headers become column_3, repeated headers become a and a_2, and cells past the last header are dropped. Blank lines inside the data count as rows of empty cells. If the input has no header plus a data row, or a quoted field is never closed, the status line reports it and the previous profile is cleared instead of being left on screen. Profiling 20,000 rows by 4 columns (486 KB) took 76 ms in Chrome during testing, and 50,000 rows took 196 ms.

Frequently asked questions

Is my data uploaded?

No. The profiler runs in the page with JavaScript; during testing it issued no request while reading a local file and producing a profile. Nothing is stored, and the tool keeps working after the page has loaded even without a network connection. The only file it writes is the JSON you ask for with Download.

Which delimiter should I choose?

Auto-detect tries comma, tab, semicolon and pipe and keeps the one that splits the first 25 rows into the most consistent number of fields. If the profile shows 1 column for a file that clearly has several, set the separator yourself — a wrong forced delimiter is not flagged as an error, the whole line simply becomes one column.

Why does a text column show "3 chars" under Minimum and Maximum?

For text there is no meaningful smallest value, so the table reports the length of the shortest and longest entry instead; "3 chars" means every filled value in that column is three characters long. Numeric columns show real numbers, date columns show the earliest and latest date, and the Average column stays "—" whenever the column is not numeric.

What counts as a duplicate row?

Two rows are duplicates when every parsed cell matches, including empty cells and column order: the line 3,Sam,Platform,,false twice is one duplicate. Values are compared exactly, so "sam" and "Sam" are different and extra spaces are not trimmed.

How large a file can it profile?

Testing profiled 20,000 rows by 4 columns (486 KB) in 76 ms and 50,000 rows in 196 ms, all inside the page. The tab is the limit rather than a server quota; for files in the hundreds of megabytes a command-line tool is the better instrument.

Recent tools: