CSV Explorer Online
Drop a file below and profile it here: a type and role badge on every column, blanks and distinct counts and summary statistics one click away, filter as you type, and a warning for anything the parser had to fix. When you need to change the data rather than understand it, the full editor is one click on.
The step everybody skips
A file arrives. It is called export_final_v3.csv, it came from a system nobody in the conversation owns, and it is going into a report by Thursday. The tempting move is to load it and start working, because the file looks fine, and files usually are.
Except the ones that are not. A column of amounts where forty rows carry N/A, so the column is text and every sum silently excludes them. A date column where the export switched format halfway through. A join key that is 94 percent populated, so six percent of your rows disappear at the join and nothing says so. A header row repeated at every page boundary because the file came out of a paginated report. Twelve duplicated rows because an export ran twice. None of these announce themselves; they show up three days later as a number somebody else disagrees with.
Exploring is the ten minutes that catches those. It is not analysis and it is not cleaning. It is answering: how many rows, what does each column really hold, how much is missing, what repeats, and did anything have to be repaired just to make the file rectangular.
This page does that part on the page, without an upload and without an account. Everything the parser had to do to your file is reported above the grid rather than absorbed silently, every column carries a type badge that tells you whether it is what you assumed, and the statistics for any column are one click from its header.
What the page tells you about a file
What had to be repaired
Rows padded because they were short, values dropped because a row was long, headers renamed because they were blank or duplicated: all of it reported above the grid with counts, not absorbed quietly.
What each column really is
A type badge and a role badge on every header. The moment a column you assumed was numeric reads text, you have found the problem before it found you.
How much is missing
The statistics popover counts blanks per column, treating the usual stand-ins (N/A, null, -) as missing rather than as values.
How much repeats
Distinct counts and the five most common values per column. A join key whose distinct count is lower than its row count is not unique, whatever the schema said.
The shape of the numbers
Min, max, mean, median and sum for every numeric column. A max four orders of magnitude above the median is an outlier worth looking at before it distorts an average.
The rows behind a number
Filter as you type to isolate them, with column:value to narrow a term to one column, and read the count of how many of how many are showing.
Nothing rewritten
Values display exactly as the file holds them. Leading zeros survive, long identifiers do not become scientific notation, and no locale guesses at your dates.
Evidence you can send
Select the offending rows and Copy as Markdown for a ticket, or Download CSV of the filtered view to attach to the message asking for a corrected export.
A way to go further
Open in Data Explorer for the 40-operation pipeline, a visual condition builder, cross-file joins, DuckDB SQL, charts and a session that survives closing the tab.
A worked example: exploring a file that looks fine
The Try with sample data link loads a deliberately messy file. Here is the order to read it in.
First, the warnings. Before the grid, anything the parser had to do appears in a strip: how many rows were shorter than the header and were padded, how many were longer and had values dropped, how wide the widest row was, whether headers had to be renamed. If that strip is empty, the file is at least rectangular. If it is not, you have learned something in two seconds that a spreadsheet would never have told you.
Second, the counter. Under the grid: rows by columns. Compare it against whatever the sender claimed. A file that should have 12,000 rows and has 11,847 is a conversation, not a data set.
Third, the badges. Read every header. Numeric columns should say int or num; date columns should say date. Any that do not are the file's real defects. A column badged text / id when you expected a number is usually fine and often correct, because identifiers with leading zeros belong as text. A column badged text with a role of text where you expected currency is not fine.
Fourth, the statistics. Sigma on each column that matters. Blanks tell you what will drop out of a join or an average. The distinct count tells you whether a key is unique. Min and max tell you whether the range is plausible: a negative quantity, a price of zero, a date in 1970 or 2099 are all findable in one click.
Fifth, isolate and evidence. Filter to the bad rows, select them, Copy as Markdown, and paste that into the ticket. Ten minutes, no code, no upload, and the file is either trustworthy or you know exactly why it is not.
When exploring turns into changing
At some point profiling stops being enough and you need to do something to the data. That is where this page hands off, and it hands off with the file already loaded rather than asking you to find it again.
- The full editor is a 40-operation pipeline in seven groups. Each step generates SQL you can read, steps chain, the preview is live, and the whole pipeline can be rebuilt against a new file. Undo is a step rather than a keystroke, which is the right unit when a step is "group by region and sum revenue".
- Cross-file work means joining or unioning any number of loaded files, not two. The join is a real SQL join against a real engine.
- DuckDB SQL is available from the first query, with no opt-in and no separate engine to drift: window functions, CTEs and GROUP BY all work because it is the actual database, not a subset someone wrote in JavaScript.
- Session persistence means your loaded files, your pipeline and your charts survive closing the tab.
- For a single fix, the CSV editor is lighter: cell edits, add and delete rows and columns, rename headers, undo and redo, and find and replace with regular expressions, all on the page.
Frequently Asked Questions
What does exploring a CSV actually mean?
Working out what is in the file before you rely on it. How many rows, what each column really holds, how much is missing, which values repeat, whether the amount column is numeric or secretly text, whether the dates parsed. It is the step between receiving a file and using it, and skipping it is how a wrong number ends up in a report.
What can I do on this page versus in the full editor?
This page profiles: type and role badges on every header, per-column statistics, sort, filter as you type, frozen columns, range copy and export. That answers most first questions. The full editor is for changing the data: a 40-operation pipeline that generates SQL, a visual condition builder, cross-file joins and unions, charts, and session persistence.
How do I spot a column that is the wrong type?
Read the badge under the header. A column of amounts badged text rather than num means at least one value in it is not a number, which is enough to break every sum and sort downstream. This is the single most common defect in a delivered CSV and it is usually invisible in a spreadsheet, where the only hint is a quiet change of alignment.
How do I find the missing values?
Click the sigma in a column header. The popover reports how many values are blank alongside the distinct count and, for numeric columns, min, max, mean, median and sum. A column that is 30 percent blank is a different column from the one the schema describes, and it is worth knowing that before you join on it.
Does the file get uploaded?
No. There is no upload endpoint on this page. The file is read from your disk by JavaScript in your own tab, nothing is transmitted, and nothing is stored between visits. That is what makes it usable for the kind of file you are usually exploring, which is one somebody has just sent you and which you have not yet been told is safe to share.
Will it handle a messy file?
That is what it is for. Rows narrower than the header are padded and counted, rows wider have the extra values dropped and counted, and both produce a warning above the grid saying how many. Blank headers get generated names and duplicates get suffixed. A byte-order mark is stripped. The delimiter is sniffed while tracking quotes, and can be pinned by hand when the guess is wrong.
How large a file can I explore here?
250 MB. Anything over 2 MB is parsed on a background thread with a progress bar, and the grid renders only the rows on screen, so a million-row file scrolls as smoothly as a hundred-row one. Above 250 MB, the full editor streams up to 1 GB.
Can I take the exploration further?
Yes. Open in Data Explorer carries the file into the full workbench, where the 40-operation pipeline generates SQL you can read, every step is rebuildable, you can join across several files, run DuckDB queries directly, and build charts. The session persists, so closing the tab does not lose the work.
Related tools and guides
Find out what is in the file first
Ten minutes of profiling beats three days of arguing about a number. No upload, no install, free.
Back to the explorer