Markdown table generator
Paste CSV, TSV or spreadsheet cells and get a clean Markdown table.
Paste rows of data — comma-separated, tab-separated, or copied straight out of a spreadsheet — and press the button to turn them into a GitHub-flavoured Markdown table, complete with the header separator row. The separator is detected automatically, or you can force one. Any pipe characters inside your cells are escaped so they do not break the table.
Runs entirely in your browser. Your text is never uploaded — open DevTools, Network tab, and you will see zero requests while you use this tool.
How to use it
- Paste your rows, one record per line, values separated by commas or tabs.
- Leave the separator on Auto-detect, or pick the right one if your data is unusual.
- If your first row is data rather than column names, tick "First row is data, not a header".
- Press "Convert to Markdown table" and copy the result into your README or comment.
What this tool does
Markdown has a compact table syntax: cells wrapped in pipe characters, and a second row of dashes that marks where the header ends. Writing it by hand is tedious and easy to misalign. This tool takes ordinary tabular data and produces that syntax for you.
By default the first row becomes the table header. The tool counts the columns, pads short rows with empty cells so the table stays rectangular, trims stray spaces around each value, and escapes any literal pipe characters as \| so they render as text instead of breaking the column layout.
Auto-detecting the separator
Leave the separator on Auto-detect and the tool looks at your first row and picks whichever of tab, comma, semicolon or pipe splits it into the most columns. That covers the usual cases: data copied from Excel or Google Sheets arrives tab-separated, a downloaded CSV is comma-separated, and many European exports use semicolons. If your data is unusual — commas inside the values, for instance — choose the exact separator by hand to be sure.
Examples
Paste "Name,Age" then "Alice,30" and "Bob,25" and you get a three-row Markdown table with Name and Age as headers. Copy cells out of a spreadsheet and, because they arrive tab-separated, Auto-detect handles them with no change of settings. A value like "cats | dogs" comes through as "cats \| dogs" so the pipe shows literally.
Where Markdown tables are used
GitHub and GitLab READMEs, issues and pull requests; Reddit comments; Obsidian, Notion and other Markdown note apps; static-site generators; and documentation written in Markdown all render this syntax. It is the quickest way to get a readable table into any of them without an editor.
Doing it without this tool
By hand: type the pipes and the dashed separator row yourself, then line everything up. It works for a two-by-two table and becomes miserable beyond that.
Spreadsheet formulas: people build a column of ="| "&A1&" | "&B1&" |" and copy the separator row in separately. Fragile, and it forgets to escape pipes.
Editor plugins: some Markdown editors have a paste-as-table command, but only if you already work in that editor. This page needs nothing installed.
Privacy: your data never leaves your browser
Everything on this page runs in your browser with JavaScript. The text you paste is never sent to a server, no account is required and nothing is stored anywhere. You can confirm it: open your browser developer tools, switch to the Network tab and use the tool — you will see zero requests go out. For anything sensitive, that is the whole point.
Related tools
Frequently asked questions
Comma-separated (CSV), tab-separated (TSV), semicolon-separated and pipe-separated data, as well as cells copied directly from Excel or Google Sheets, which arrive tab-separated.
It splits your first row by each candidate separator and picks whichever produces the most columns. If your values contain the same character you are splitting on, choose the separator manually instead.
It is escaped as a backslash-pipe so it renders as a literal pipe inside the cell rather than starting a new column.
Short rows are padded with empty cells so the table stays rectangular and valid.
Yes. Tick "First row is data, not a header" and the tool generates generic Column 1, Column 2 headers and keeps all your rows as data.
No. The conversion runs entirely in your browser and nothing is sent anywhere.