CSV to Markdown

Turn a CSV into a Markdown table

Free CSV to Markdown converter, no signup, nothing uploaded. Drop a file up to 1.5 GB (CSV, TSV, Parquet, JSON, JSONL), filter it, export up to 1,000 rows as a pipe table with a header row, ready to paste into GitHub, a README, a pull request or a prompt.

.csv.tsv.json.jsonl.parquet
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 the export stops at 1,000 rows

A Markdown table is for reading, not for storage. 50,411 rows of CO2 data in a README is unreadable and GitHub stops rendering long files anyway. So the Markdown export writes the first 1,000 rows of your current view, and the point of this page is getting the right 1,000.

If someone needs the whole dataset, share a link next to the table: curl -T data.csv https://rows.page returns one, and it opens as a filterable table for anyone.

Filter, sort and pick columns first

Export writes what you see. country:Netherlands year:>=2010 keeps 15 rows, hiding 70 of the 79 columns keeps the table narrow, and clicking a header sets the order. Shift-click sorts by a second column.

For a summary table, run SQL in the same bar: SELECT country, round(max(co2)) AS peak_co2 FROM data GROUP BY 1 ORDER BY 2 DESC LIMIT 20 gives a 20-row ranking that pastes straight into a pull request description.

How cells are escaped

Pipes inside a value become \|, backslashes are doubled, line breaks are replaced with a space, and nulls become empty cells. The header row uses your column names and the second line is the --- separator GitHub, GitLab, Obsidian and most Markdown renderers expect.

Numbers and dates are written as text exactly as the table shows them. Nested JSON columns are written as JSON text in the cell.

Markdown tables in prompts

A Markdown table is the most token-efficient way to hand a model a few hundred rows while keeping the column names attached to every value. Filter to the rows the question is about, export Markdown, paste. For bigger inputs, export CSV or JSONL instead and attach the file.

Agents can skip the paste: the MCP server at rows.page/mcp pushes a file and reads it back with filters, so the model only pulls the rows it needs.

Other outputs from the same menu

The Export menu also writes CSV, Parquet with zstd compression, a JSON array and JSONL, all of the current view and without the 1,000-row cap (SQL results stop at 1,000,000 rows). The CO2 sample is 13.7 MB as CSV and 4.3 MB as Parquet.

Everything runs inside your browser tab, so the 1.5 GB limit is the memory of the tab, and the file never leaves your machine unless you press Share.

Limits for the Markdown export

WhatLimit or price
Open in the browserCSV, TSV, JSON, JSONL or Parquet up to 1.5 GB, $0, no account
Markdown rowsThe first 1,000 rows of the current view
ColumnsThe visible columns, in the order shown
CellsPipes escaped, line breaks replaced with spaces, nulls empty
Other exportsCSV, Parquet (zstd), JSON and JSONL, no row cap through filters
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 file 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.

Can I export more than 1,000 rows as Markdown?

No, 1,000 is the cap. Narrow the view with a filter or SQL until the rows you need fit, or export CSV and share a link for the rest.

Does it work with Parquet or JSON files?

Yes. Drop a Parquet, JSON or JSONL file and the Markdown export is the same. Nested JSON fields become dot-path columns.

Will the table render on GitHub?

Yes. It is a standard pipe table with a header and a --- separator line, which GitHub Flavored Markdown, GitLab, Obsidian and Docusaurus render.

How do I get column alignment or bold headers?

The export writes plain --- separators. Change them to ---: for right alignment after pasting; the rest of the table doesn't need to change.

More tools

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