csvkit.org
CSV (Comma-Separated Values) utilities, in the browser
Say hi →

CSV Data Profile

type · fill rate · distinct · min/max/mean/median · top values · quality flags

The report you want before you trust a file you didn't create. One row per column: what type it really holds, how much of it is actually populated, how many distinct values it has, the numeric range, and flags for the things that break downstream jobs — mixed types in one column, IDs with leading zeros, cells padded with invisible whitespace, columns that are 90% empty.

profile
Or drop a .csv file here, or
ready

How to profile a CSV

  1. Paste the CSV or drop a file, then click Profile.
  2. Read the top row of stats first: rows, columns, duplicate rows, empty rows, parse errors, detected delimiter.
  3. Scan the Flags column — anything listed there is a concrete reason a load or a join might fail.
  4. Export the report as CSV for a spreadsheet, or as Markdown to paste into a ticket or a data-review doc.

What the flags mean

Type inference is a guess, and says so

Types are inferred from the values present, not from a schema — integer, decimal, boolean, date, text, mixed, or empty. A column of years reads as integer; a column with a single N/A among 10,000 numbers reads as mixed, which is exactly the signal you want. For a formal contract you can hand to a validator, generate one with JSON Schema.

FAQ

What counts as empty?

An empty string. A cell containing N/A, -, or null is a value, not a blank — which is why those show up under top values, where you can spot them.

Why is mean blank for some columns?

Because nothing in the column parsed as a number. Mean and median are computed only over numeric values; a mixed column reports statistics for the numeric part only.

How big a file can it profile?

The whole file is parsed in memory, so tens of thousands of rows are comfortable and hundreds of thousands will be slow. For a quick shape check on a huge export, Row & cell count is much cheaper, or profile a random sample.

Is my data uploaded?

No. Profiling runs entirely in your browser — that's the point of doing it here rather than in a hosted tool.

Privacy

100% client-side. No upload. See the privacy policy.