Markdown Table Generator

Create a Markdown table from a grid, Excel, Google Sheets, or CSV. Free, no account. GitHub-flavored pipes, alignment, and pretty-print — all in your browser.

Align
Header
Row 2
Row 3

Type in the grid, or paste CSV, TSV, or a Markdown table.

Spreadsheet copies usually arrive as tab-separated values. Quoted CSV fields can contain commas and line breaks. An existing GFM table loads cells and column alignment.

Add some cell text, or paste CSV, TSV, or a Markdown table. Copy and Download stay off until a cell has content.

How to create a Markdown table

Three steps on this page. The cells stay in this tab. If the table already lives in HTML, use HTML to Markdown.

1

Enter cells or paste a table

Type in the grid, or paste CSV, a tab-separated copy from Excel or Google Sheets, or an existing GitHub-flavored Markdown table into the import box. Paste loads the grid in the browser. Tab moves between cells. Enter on the last row adds a row when there is room.

2

Set header, alignment, and pretty-print

Use First row is header when the top row is labels. Set each column to left, center, right, or none. Pretty-print pads columns to the same string length so pipes line up in a monospace editor.

3

Copy or download the Markdown

The Markdown box updates as you type. Copy it, download a .md file, or open Preview to see the rendered table. Copy and Download stay disabled until a cell has text. Nothing is uploaded.

What a Markdown table is

A Markdown table is a plain-text grid that GitHub Flavored Markdown (GFM) renders as a table. Each row is one line. Cells are separated by the pipe character |. The second line is the separator: three or more dashes per column. Everything above that line is the header. Everything below is the body. That is the format GitHub uses in README files, issues, and pull requests, and the format Obsidian shows in reading view.

Alignment is encoded on the separator with colons. A colon on the left (:---) left-aligns the column. A colon on the right (---:) right-aligns it. Colons on both ends (:---:) center it. Dashes alone (---) leave alignment to the renderer, which is usually left. This generator writes those colons from the alignment control above each column.

People search for “markdown table generator”, “create markdown table”, “excel to markdown table”, and “csv to markdown table” when they have cells in a spreadsheet and need pipes for a README, an Obsidian note, or a prompt. Counting pipes by hand is slow once a cell contains a pipe, a line break, or a ragged row. The tool above does that counting in the browser and keeps the grid editable.

A worked example: CSV in, table out

Click Sample CSV in the tool, or paste the block below. It is a three-column comma-separated list with a header. The Markdown under it is exactly what this page emits with First row is header and Pretty-print turned on, and no extra alignment colons.

CSV

Name,Role,Focus
Ada Lovelace,Analyst,Notes
Alan Turing,Engineer,Prompts

Markdown

| Name         | Role     | Focus   |
| ------------ | -------- | ------- |
| Ada Lovelace | Analyst  | Notes   |
| Alan Turing  | Engineer | Prompts |

“Ada Lovelace” is the widest Name cell, so pretty-print pads “Name” and “Alan Turing” to that string length. Role pads to “Engineer”. Focus pads to “Prompts”. The separator uses the same widths. Turn pretty-print off and the padding spaces go away; GitHub still renders the same table. Quoted CSV such as "London, UK" keeps the comma inside the cell. A tab-separated paste from Sheets does the same for commas that were already in the spreadsheet.

Tips, destinations, and limits

GitHub and GitLab render these tables in README files, wikis, issues, and pull requests. Obsidian renders them in preview and reading view; a downloaded .md file drops into a vault the same way the Obsidian workflow describes for clipped pages. Notion imports a pasted Markdown table for ordinary rows and columns. ChatGPT, Claude, Gemini, and Perplexity read the pipes as structure in a prompt, which is usually clearer than a screenshot. After you copy, paste the Markdown into the Token Counter if the prompt budget matters.

GFM has no merged cells and no real multiline cells. A newline in a cell becomes <br> so the line can break in GitHub and in this Preview tab. A pipe in a cell is escaped as \|. Ragged rows are padded with empty cells so every row has the same column count. Unicode, including Chinese, Japanese, Korean, and emoji, is kept. Pretty-print pads by JavaScript string length, so CJK and other wide characters can make the raw pipes look uneven in a monospace editor. The rendered table does not use that padding.

The grid stops at 100 columns and 1000 rows. A paste longer than 200,000 characters is truncated, and the status line says so. Empty cells are valid once any cell has text; Copy and Download stay disabled on a blank grid. Markdown that has pipes but no dash separator is loaded as pipe-separated values. A spreadsheet that uses semicolons (common in Europe) is detected from the first row.

If the table already exists as HTML, convert that markup with HTML to Markdown. If it sits on a public page, URL to Markdown fetches the article on the server. When the pipe table is done and a CMS or a newsletter needs HTML, paste the Markdown into Markdown to HTML. A text-based PDF can go through PDF to Markdown, where reconstructed tables are best-effort. Those paths start from a document. This generator starts from cells. A whole .csv or .tsv file, including a semicolon export, can go through CSV to Markdown. A JSON array or JSON Lines log can go through JSON to Markdown. Neither page opens this grid for you. Copy the Markdown and paste it here when you still want to edit cells.

Compared with writing pipes by hand

Writing a small table by hand is fine: three columns, a handful of rows, no pipes inside cells. The work grows when you add a column, when one row is short, or when a cell contains |. You recount every line. This generator keeps one grid, pads ragged rows, and escapes pipes and newlines as you type. Pretty-print is optional padding for people who read the raw file; GitHub ignores those extra spaces.

HTML to Markdown is the better path when the table is already a <table> in a page or an export. That tool also stays in the browser and uses the same Turndown pipeline as the WebInk extension. The extension itself is for the tab you already opened: it extracts the article, including tables in that article, and can send the Markdown on. It does not open an Excel file. Use this page for the spreadsheet, the extension for the web page, and the tools hub when you need to pick by input type.

JobThis generatorHand-writtenHTML to Markdown
Start from spreadsheet cells or CSVYesManualNo
Start from an HTML <table>Paste as text onlyRewriteYes
Column alignment colonsYesBy handFrom HTML
Escape pipes and newlinesYesBy handFrom HTML
Runs in the browserYesYesYes
Merged cellsNoNoNo
Add the WebInk extension

The extension clips web pages. It is a separate product and is not a spreadsheet importer.

Frequently asked questions

A markdown table generator turns a grid of cells into GitHub-flavored Markdown: a header row, a separator row of dashes, and body rows, with pipes between cells. This page is a free online tool for that job. You type in the grid, or paste CSV, a spreadsheet copy, or an existing Markdown table. The Markdown updates as you type. Copy it, or download a .md file. Conversion runs in your browser.

Related