How to Make a Markdown Table in 60 Seconds

Three steps from blank document to working markdown table. The hand-typed path takes a minute. The paste-from-spreadsheet path takes ten seconds. Both produce identical output.

The 60-second hand-typed path

You've decided you need a table. The data is in your head or in a small list. The fastest way without a tool:

Step 1 — type the header row. Pipes around each column label, leading and trailing pipes for safety:

| Name | Role | Years |

Step 2 — type the separator row. Three or more dashes per column, between pipes:

| Name | Role | Years |
|------|------|-------|

Add colons if you want alignment. :--- for left, ---: for right, :---: for center.

Step 3 — type the data rows. Same pipe pattern as the header:

| Name  | Role        | Years |
|:------|:------------|------:|
| Alice | Engineer    |     5 |
| Bob   | Designer    |     3 |
| Carol | PM          |     7 |

Done. The table renders correctly in GitHub, GitLab, Notion, Obsidian, MkDocs, Docusaurus, Reddit, and Stack Overflow.

The 10-second paste path

Most tables exist somewhere already — usually in a spreadsheet. Use the data:

  1. In Excel or Google Sheets, select the range including headers. Copy.
  2. Open the Markdown Table tool.
  3. Click "Paste from spreadsheet."
  4. Click "Copy markdown."

The clipboard now has the markdown for the table. Paste anywhere it'll render. Total time: under ten seconds, with no hand-typing of pipes or counting of dashes.

The shortcut. Selection in Excel → paste in the Markdown Table tool → copy markdown. The tool handles tab-separated input, escaping, and alignment — no manual conversion required.

Worked example — converting a real CSV

You have a CSV that looks like this:

Country,Capital,Population
France,Paris,67500000
Spain,Madrid,47600000
Italy,Rome,59600000

Open it in Excel or Sheets. Select the four rows including the header. Copy. Paste into the Markdown Table tool. The output:

| Country | Capital | Population |
|---------|---------|-----------:|
| France  | Paris   |  67,500,000 |
| Spain   | Madrid  |  47,600,000 |
| Italy   | Rome    |  59,600,000 |

Right-alignment on the Population column was inferred from the numeric content. Manually adjust by clicking the alignment chip if it's wrong.

The two mistakes that slow people down

Mistake 1: hand-aligning the pipes. Many writers spend a minute lining up the pipe characters in the source so the table looks neat. The renderer ignores this — |a|b| and | a | b | produce identical output. Skip the alignment unless you'll be reading the source code itself.

Mistake 2: forgetting the separator row. Without it, the renderer parses the block as paragraphs. The fix is a single line of dashes between the header and the data — the table immediately renders.

Templates to bookmark

Three common shapes you'll need most weeks. Copy these as starting points:

Three-column comparison. Two products, one column for the criterion:

| Criterion | Product A | Product B |
|:----------|:----------|:----------|
|           |           |           |

Configuration reference. The standard docs pattern:

| Option | Type | Required | Default | Description |
|:-------|:-----|:--------:|:--------|:------------|
|        |      |          |         |             |

Pricing or numbers. Right-aligned numeric columns:

| Item | Qty | Price | Total |
|:-----|----:|------:|------:|
|      |     |       |       |

For the deeper reference on syntax, alignment quirks, and platform-by-platform rendering differences, see The Complete Guide to Markdown Tables. For a printable cheatsheet, see Markdown Table Cheatsheet.

Frequently asked questions

How long should the dashes in the separator row be?

Any number of dashes — minimum three per column. |---| works the same as |----------|. Renderers ignore the count.

Do I need spaces inside the cells?

No. |a|b| and | a | b | render identically. Spaces are for source-code readability.

What's the fastest way to add a new row?

Copy the line above, paste it underneath, and edit the cells. The pipe boundaries already match the header — no counting required.

How do I add a row with empty cells?

Type the pipes with nothing between them: | | | |. Empty cells render as empty cells, not as missing data.

Can I use a markdown table tool inside VS Code?

Yes — the "Markdown Table" extension formats and aligns tables on save. For paste-from-Excel and one-click conversion, use the browser-based TextKit tool.

Keep reading

Written by the TextKit team. We build the tools we write about — try the Markdown Table tool used in this post.