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.
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
| What | Limit or price |
|---|---|
| Open in the browser | CSV, TSV, JSON, JSONL or Parquet up to 1.5 GB, $0, no account |
| Markdown rows | The first 1,000 rows of the current view |
| Columns | The visible columns, in the order shown |
| Cells | Pipes escaped, line breaks replaced with spaces, nulls empty |
| Other exports | CSV, 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
- CSV viewerOnline CSV viewer for big files
- Parquet viewerParquet viewer, no Python needed
- JSONL viewerJSONL viewer for logs, evals and traces
- JSON to tableJSON to table, nested fields included
- Past Excel's row limitExcel stops at 1,048,576 rows. Open the rest here.
- CSV to ParquetConvert CSV to Parquet in your browser
- Parquet to CSVConvert Parquet to CSV in your browser
- JSON to CSVConvert JSON to CSV, nested objects included
- CSV to JSONConvert CSV to JSON or JSON Lines
- JSONL to CSVConvert JSONL to CSV in your browser
- TSV to CSVConvert TSV to CSV in your browser
- SQL on CSVRun SQL on a CSV file in your browser
- Share a CSVShare a CSV as a link, not an attachment
- Version control for CSVVersion control for CSV files, without git
Pushing data from a script or agent? Read the docs.