glunty

CSV to Markdown Table

Convert CSV or TSV into a Markdown table. Handles quoted fields. Local only.

What this tool does

Parses CSV (comma-separated values), TSV (tab-separated), or any single-character delimiter format into rows and columns, then renders a Markdown pipe-table. Quoted fields are honored: a comma inside double quotes does not split the field, and a double-quote inside a quoted field is escaped as "". Output is plain Markdown that GitHub, GitLab, Obsidian, and most renderers display as a table. Everything is local; nothing is uploaded.

How to use it

Paste your CSV. Auto-detect picks the most common delimiter from the first line; if it gets it wrong, choose the right one from the dropdown. Toggle "First row is header" off if your data has no header row (the tool will use generic Column 1, Column 2, etc.). Press Convert. Example: a simple name,role header followed by Ada,Engineer renders as a pipe table with name and role as columns.

Common use cases

  • Pasting a small spreadsheet selection into a GitHub PR description as a readable table.
  • Including data tables in technical writing without reaching for a screenshot.
  • Translating exported analytics data into a runbook entry.
  • Making a quick reference table for a teammate without opening a wiki editor.
  • Converting between a CSV report and a Markdown changelog table.

Common pitfalls

  • Pipe characters inside cells. A literal | inside a cell breaks Markdown table parsing. This tool escapes | as \| so the table stays intact.
  • Newlines inside quoted fields. CSV technically allows newlines inside double-quoted fields. Markdown tables do not allow embedded newlines per cell. This tool replaces internal newlines with a single space; the table renders but you lose the line break. Multi-line cells are a poor fit for Markdown tables regardless.
  • Encoding. If your CSV contains non-ASCII characters (accented letters, em-dashes, currency symbols), make sure the source is UTF-8. Spreadsheet exports sometimes default to Windows-1252 or Latin-1, which mojibakes when pasted.

Frequently asked questions

Why does my comma inside quotes not split the field?
That is the CSV quoting convention. A field wrapped in double quotes can contain literal commas, line breaks, and quote characters (the quote escapes itself: a literal " inside quotes is written as ""). The parser respects this convention. If your input uses some other escape mechanism, you may need to pre-process it.
What if my data has a literal pipe character in a cell?
A literal | in a Markdown table cell would break table parsing, so the tool escapes pipes as \| in the output. GitHub, GitLab, and most modern Markdown renderers respect this escape. Cells with many pipes get noisy; consider whether a Markdown table is the right format for that particular data.
Why does auto-detect sometimes pick the wrong delimiter?
Auto-detect counts each candidate (comma, tab, semicolon, pipe) in the first line and picks the most frequent. If a header has commas inside a quoted name, the count can mislead the detection. Choose the delimiter explicitly from the dropdown when auto-detect picks the wrong one.
How does this handle multi-line fields?
Markdown tables do not allow line breaks inside a cell. The tool replaces internal newlines with a single space so the row stays on one line. The cell still renders, but the line break is lost. For data that needs preserved line breaks, Markdown tables are the wrong format; consider a definition list or a series of headed sections instead.
Is this CSV strictly RFC 4180?
Mostly. The parser handles the core conventions: double-quote wrapping, "" as an escaped quote, comma separation, line-end row separation. It does not strictly require quoting of all fields, accepts both LF and CRLF line endings, and is lenient about a missing final newline. For anything claiming strict RFC 4180 compliance, validate elsewhere.
Why is my header row being used as data?
The "First row is header" toggle controls this. If it is unchecked, the tool treats every row as data and labels columns generically as Column 1, Column 2, etc. Toggle it on if your input has a header row.

Embed this tool

Free for any use; attribution appreciated. Paste this on your site:

The embed runs the same tool that lives at this URL. No tracking; no ads inside the embed. Resize height as needed for your layout.

Cite this tool

For academic, journalistic, or technical references. Pick a format:

Citations use 2026 as the publication year. Access date is left as a fillable placeholder where the citation style expects one.

Embedded tool from glunty.com