TSV to CSV

Convert TSV to CSV in your browser

Free TSV to CSV converter, no signup, nothing uploaded. Drop a .tsv, .tab or .txt file up to 1.5 GB, delimiter sniffed from up to 50 MB of content, check that the columns split where they should, press Export and get a comma-separated CSV with a header row and proper quoting. Semicolon and pipe delimited files convert the same way.

.tsv.csv
Drop a file here
Stays in your browserUp to 1.5 GB

No file handy? Open CO2 emissions by country and year (50k rows, 14 MB).

Why find-and-replace breaks TSV files

Replacing every tab with a comma works until a value contains a comma, a quote or a line break. A TSV file usually has no quoting at all, while a CSV needs "Rotterdam, NL" in quotes and "" for a literal quote. Get that wrong and the columns shift for every row after the first address field.

The export here is written by DuckDB's CSV writer: values are quoted only when they need it, quotes are doubled, and line breaks inside a value stay inside the value.

What the converter detects

The delimiter is sniffed from the content, not the file name, so .tsv, .tab and .txt files work, and so do semicolon-separated exports from European Excel and pipe-separated dumps. Header row, quoting style and a type per column are detected the same way; files up to 50 MB are sniffed in full, bigger files are sampled.

Malformed lines are skipped with a note at the top of the table. If types can't be detected reliably, every column is read as text and the note says so, which is often what you want for a lossless conversion.

Check and fix before you export

The table shows what the CSV will contain. If a column came out as a number but has leading zeros you care about, cast it: SELECT CAST(zip AS VARCHAR) AS zip, * EXCLUDE (zip) FROM data. Export then follows the query result.

Export writes the current view: filter with country:NL, hide columns, sort by clicking a header, and only those rows and columns land in the file. Plain filters have no row cap; SQL results stop at 1,000,000 rows.

What comes out

UTF-8, comma separated, one header row, nulls as empty cells. Text that starts with =, +, - or @ gets a leading apostrophe so Excel or Google Sheets won't run it as a formula when the file is opened.

The same menu writes Parquet with zstd compression, a JSON array, JSONL and a Markdown table of the first 1,000 rows. The CO2 sample, 13.7 MB as CSV, is 4.3 MB as Parquet.

The other direction

rows.page exports CSV, Parquet, JSON, JSONL and Markdown, not TSV. For CSV to TSV use DuckDB on your machine: duckdb -c "COPY (SELECT * FROM read_csv('data.csv')) TO 'data.tsv' (DELIMITER '\t', HEADER)". The same command handles files past the 1.5 GB browser limit.

To share the table rather than the file, press Share or run curl -T data.tsv https://rows.page. Anonymous links take files up to 100 MB and are deleted 7 days after creation; a free account keeps 10.

Limits for converting TSV to CSV

WhatLimit or price
Convert in the browserFiles up to 1.5 GB, $0, no account
Input.tsv, .tab, .txt and .csv; tab, comma, semicolon or pipe delimited
OutputCSV with a header row, UTF-8, quotes only where needed, formula-safe cells
RowsNo cap through filters; SQL results export the first 1,000,000 rows
Type detectionWhole file up to 50 MB, sampled above that
Share a link without an account$0, files up to 100 MB, link deleted 7 days after creation
Free account$0, 10 datasets kept, last 3 versions
Pro$12/month, 100 datasets, files up to 500 MB, private links
Max$39/month, 1,000 datasets, files up to 2 GB, private links

Questions

Is my TSV uploaded?

No. Opening a file reads it inside your browser tab. It only leaves your machine if you share it or push it with curl.

My file has a .txt extension. Does it work?

Yes. The delimiter is detected from the content, so a tab-separated .txt opens like a .tsv.

Will Excel open the CSV correctly?

Yes. It is UTF-8 with a header row and standard quoting. If your Excel expects semicolons (common in Europe), use Data, From Text/CSV, and pick the comma delimiter.

Can I convert CSV to TSV here?

No, TSV isn't an export format. DuckDB on your machine does it in one command: COPY (SELECT * FROM read_csv('data.csv')) TO 'data.tsv' (DELIMITER '\t', HEADER).

What if a column is split wrong?

Check the note at the top of the table: malformed lines or an undetectable delimiter are reported there. Open the file as all text with SELECT * FROM data after the note, or fix the source line and drop the file again.

More tools

Pushing data from a script or agent? Read the docs.