How to use the CSV to Markdown table converter
- Paste your data into the CSV box, or copy cells from a spreadsheet.
- Leave Delimiter on Detect, or pick Comma, Semicolon, Tab or Pipe.
- Choose the Alignment: Numbers right, text left (default), Left, Centre, Right or None (—).
- Keep Pad columns to line up ticked for tidy source text.
- Copy the Markdown table or download
table.md.
What it does and when to use it
Typing a Markdown table by hand means counting pipes and dashes, and one missing pipe breaks the whole table. This tool writes it for you from data you already have: a test-results export for a pull request, a price list for a README, a comparison for a wiki page or a changelog. The aligned source also reads well in plain-text diffs.
If the data starts as JSON, the JSON to Markdown tool fits better. For a plain-text table that stays CSV, use the CSV column aligner, and for spreadsheet tabs, convert with TSV to CSV first or simply choose Tab as the delimiter.
How it works
The papaparse library reads your text in the browser, handling quoted fields, commas inside quotes and doubled quotes, and skipping blank lines. Then the table is built:
- Each cell is trimmed,
|becomes\|and line breaks become<br>. - Short rows are padded with empty cells so every row has the same number of columns.
- Column widths are measured in characters as you see them, so accented letters and emoji count as one.
- The separator row uses
---for none,:---for left,---:for right and:---:for centre.
Worked examples
These are the tool’s own outputs.
The sample data. The id and score columns are numeric, so they align right; the empty score for María López stays an empty cell:
| id | name | city | joined | score |
| --: | ----------- | ----------------- | ---------- | ----: |
| 1 | Asha Rao | Bengaluru | 2024-03-01 | 92.5 |
| 2 | Smith, John | London | 2023-11-15 | 88 |
Semicolons, centred. Plan;Price;Seats with two rows and Alignment set to Centre:
| Plan | Price | Seats |
| :--: | :---: | :---: |
| Free | 0 | 1 |
| Team | 12.50 | 10 |
A pipe inside a cell, no padding. 1,npm ci | tee log becomes | 1 | npm ci \| tee log | under a plain | --- | --- | separator.
Percentages. North,12% and South,-3% count as numbers, so the Growth column gets -----:.
Limits and tips
- East Asian wide characters are counted as one column, so padded source may look slightly uneven in a monospace font. The rendered table is unaffected.
- No cell formatting. Add bold, links or code marks to the result yourself.
- Very wide tables are hard to read on GitHub; consider splitting columns.
Frequently asked questions
Which Markdown flavour does it produce?
How does it decide a column is numeric?
What happens to a | inside a cell?
Does the padding matter?
Is the first row always the header?
How do we know nothing is uploaded? Test it yourself on the privacy proof page.