Free CSV Viewer Online
Drop a CSV below and it opens in a real grid on this page: sortable headers, filter as you type, a type and role badge on every column, statistics one click away, and Copy as for any range you select. The file is read in your own tab, so nothing is uploaded and nothing is kept.
What a CSV viewer is actually for
A CSV is a text file, so in principle any text editor opens one. In practice a text editor gives you the worst possible view of tabular data: 40,000 lines of comma-separated strings with no alignment, no column names in front of you once you scroll past line one, and no way to answer the question you opened it for. The question is almost never "what does this file say". It is "how many rows are there", "is the amount column really numeric", "which region has the most of these", "why did the import reject row 8,410".
The usual next move is to double-click it and let a spreadsheet open it, and that is where the real damage happens. Excel reads a column of digits and decides it is a number, so 01730 becomes 1730 and a Massachusetts ZIP code stops being one. It reads 3/4/2024 and picks a locale for you. It reads a long product code and shows it in scientific notation. Save the file and the corruption is now permanent, and it happened before you had even read anything.
This page is the middle option. It draws the file as a table so you can read it, and it does not change a single character to do so. Every cell shows the exact string the file held. The type shown under a header is a badge that governs how the column sorts, and nothing else. When a column of digits has leading zeros anywhere in it, the badge deliberately says text, because a value written as 01730 is an identifier that happens to be spelled with digits.
The other thing a viewer has to survive is size. A CSV big enough to be annoying is usually big enough to make a naive web page freeze, because putting a million rows into HTML means putting a million rows into HTML. This grid does not. It measures the file, gives the scrollbar something the right height to move over, and draws only the forty-odd rows that are actually in front of you. Scrolling repaints those forty. The other 999,960 are arithmetic.
What is on the page once your file is open
Sort by any column
Click a header once for ascending, again for descending, a third time to go back to file order. Numbers sort as numbers, dates as dates, text case-insensitively, and blanks stay at the bottom in both directions rather than crowding the top of a descending sort.
Filter as you type
The box narrows the rows while you type, matching any column. Type region:north to restrict a term to one column, and separate several terms with spaces to require all of them. The row count updates to say how many of how many are showing.
Type and role badges
Each header carries the type its values support and a guess at what the column is for: currency, percent, email, url, id, phone, count, measure or category. It is the fastest way to spot that a column you assumed was numeric is quietly text.
Per-column statistics
The sigma button in a header opens blanks, distinct count, min, max, mean, median, sum and the five most common values. No pivot table, no formula, no second tool.
Freeze the first columns
Pin one, two or three columns to the left edge so the identifier stays visible while you scroll a wide export sideways. Sixty columns of survey responses stop being anonymous.
Select a range, copy it anywhere
Drag or shift-click to select a rectangle, then Copy as TSV for a spreadsheet, CSV for plain text, a Markdown table for a README, or JSON for code. Ctrl or Cmd plus C copies as TSV directly.
Export what you are looking at
Download CSV and .xlsx write the current view, not the original file. Filter to the twelve rows that matter, sort them, and the download is those twelve rows in that order.
Big files stay responsive
Anything over 2 MB is parsed on a background thread with a real progress bar, and the grid only ever renders the visible rows. A 250 MB file opens without the tab going grey.
Nothing leaves the tab
There is no upload endpoint on this page. The file is read from your disk by JavaScript you already downloaded, and closing the tab is the whole of the cleanup.
A worked example
Say the file is members.csv and it looks like this:
member_id,zip,joined,plan,monthly
M-0041,01730,2024-01-18,Pro,$29.00
M-0042,94103,2024-02-02,Free,$0.00
M-0043,00501,2024-02-14,Pro,$29.00
M-0044,60601,2024-03-07,Team,$99.00
M-0045,01730,2024-03-19,Pro,$29.00
Drop it in and the grid comes up with five rows and five columns. The header badges read text / id for member_id, text / id for zip, date / date for joined, text / category for plan and num / currency for monthly. Note what did not happen: 00501 is still 00501, because the leading zero in the column made the viewer treat it as an identifier rather than the number 501.
Click the sigma on monthly and the popover says five rows, no blanks, three distinct values, min 0, max 99, mean 37.20, median 29, sum 186, and lists $29.00 three times as the most common value. Click the plan header to sort and the Free row moves to the top. Type zip:01730 in the filter and the count under the grid changes to 2 of 5 rows.
Now select those two rows across the member_id and monthly columns and pick Copy as → Markdown table. What lands on the clipboard is ready to paste into a ticket:
| member_id | monthly |
| --- | --- |
| M-0041 | $29.00 |
| M-0045 | $29.00 |
Download CSV at that point gives you those two rows and those two columns, because the download follows the view. If you want the original file back, you already have it: this page never touched it.
When the file fights back
- Semicolons instead of commas. Common in exports written on a machine with a European locale, where the comma is the decimal point. The delimiter guess counts separators per line while tracking quotes, so it usually gets this right on its own. When it does not, the Delimiter dropdown pins it and the grid redraws.
- Rows that are the wrong width. A row with fewer values than the header is padded with blanks and counted; a row with more has the extra values dropped and counted. Either way you get a warning above the grid saying how many rows and how wide the widest one was, because losing data quietly is worse than losing it loudly.
- Blank or duplicated headers. A blank header becomes
column_4and a secondidbecomesid_2, so every column can be addressed by name in the filter and in the exports. - Quotes and newlines inside fields. A quoted field containing commas, doubled quotes or line breaks is parsed correctly, including when the field straddles the boundary between two chunks of a large file being read in the background.
- A byte-order mark. The BOM some Windows tools write at the start of a UTF-8 file is stripped, so the first column is called
idrather than an invisible character followed byid.
Frequently Asked Questions
How do I open a CSV file online?
Drop the file on the box at the top of this page. The grid appears underneath it with your columns, your rows and a count, and you can sort, filter and read it straight away. There is no upload step, no account and no email gate, and if you have nothing to hand the Try with sample data link loads a 10,000-row sales file.
Is my CSV data uploaded to a server?
No. This page has no upload endpoint. JavaScript in your own tab reads the file off your disk and draws the grid; nothing is transmitted and nothing is stored between visits. Reload the page and the box is empty again. That is also why the page keeps working with your network disconnected.
Will the viewer destroy my leading zeros?
No. Every cell is displayed as the exact string the file contained, so a ZIP code of 01730, an account number of 0044821 and a part code of 007-B all survive being looked at. The column type shown in the header is a badge and a sort order, never a rewrite. A column of digits with leading zeros is deliberately badged text rather than a number for that reason.
How large a CSV can this page open?
250 MB, which is roughly one to three million rows depending on how wide they are. Anything over 2 MB is parsed on a background thread with a progress bar so the tab keeps responding, and only the rows on screen ever become HTML. Above 250 MB, the full editor streams files up to 1 GB instead of holding them in memory.
Can I copy part of the table into something else?
Yes. Drag across the cells you want, or shift-click to extend the selection, then use Copy as. TSV pastes into Excel and Google Sheets in the right cells, CSV is the plain text form, Markdown table drops into a README or a pull request, and JSON gives you an array of objects keyed by column name. Ctrl or Cmd plus C copies the selection as TSV without opening the menu.
Why does my file open as one long column?
Because the delimiter was guessed wrong, which happens with European exports where the separator is a semicolon and commas are decimal points. Use the Delimiter dropdown under the grid to pin it to semicolon, tab or pipe and the table redraws immediately. The guess itself tracks quotes, so a comma inside a quoted field does not fool it.
What do the little labels under each column name mean?
The first is the type the values support: int, num, date, bool or text. The second is the role, which is a guess at what the column is for: currency, percent, email, url, id, phone, count, measure or category. Both are inferred from up to 2,000 rows and neither changes a value. The sigma button beside them opens the statistics for that column.
Can I edit the rows here, not just read them?
Not on this page, which is deliberately read-only so a stray keystroke cannot change what you came to check. The CSV editor is the same grid with editing turned on: cell edits, add and delete rows and columns, rename headers, undo and redo, and find and replace with regular expressions.
Related tools and guides
Open your CSV and read it properly
No sign-up, no upload, no daily allowance, no row limit, and not a single value rewritten.
Back to the viewer