The Best CSV to Markdown Table Converter in 2026: Every Option Compared

8 September 2026 · 29 min read

Turning a CSV into a Markdown table looks like a find-and-replace job. Put a pipe where each comma is, add a row of dashes under the first line, done. It works until it does not, and the file that breaks it has a comma inside a quoted field, or a product description with a line break in the middle of it, or a column of file paths with a pipe character in them, and the table you get out has the wrong number of columns in a row you will not notice until somebody else does.

TL;DR

The difference between CSV to Markdown converters is not features, it is whether they parse CSV or split on commas. A tool that follows RFC 4180 handles quoted fields, commas inside quotes, doubled quotes meaning a literal quote, and line breaks inside a cell; a tool that splits on commas mangles all four and tells you nothing. A browser converter's /csv-to-markdown does the parse in your browser with nothing uploaded, and turns an in-cell line break into <br> because a Markdown table cannot hold a real one. Pandoc and Miller both read CSV and TSV properly from the command line; pandas.to_markdown is right when the table is the last line of an analysis. Whatever you pick, check one row with a quote in it before you trust the rest.

Why a CSV does not just become a table

A CSV file is a text format with a specification, and the specification is short enough to read in ten minutes. RFC 4180 says fields are separated by commas, records by CRLF, and any field may be wrapped in double quotes. Once a field is quoted, it may contain commas, it may contain line breaks, and a double quote inside it is written twice. That is nearly the whole document, and every rule in it exists because somebody's data contained the separator.

So the first question about any CSV to Markdown table converter is whether it implements those rules or approximates them. The approximation is a split(',') and it is everywhere: in shell one-liners, in half the snippets on the web, and inside more tools than you would hope. It produces the right answer for clean data, which is what makes it so hard to spot. Smith, John in a quoted field becomes two cells, the row is now one cell wider than the header, and depending on the writer at the other end that extra cell is either dropped in silence or pushes a table out of shape.

The second question is what happens on the way out, because Markdown tables have their own rules and they are tighter than CSV's. A pipe ends a cell wherever it appears, so a value containing one has to be escaped. A cell cannot contain a newline at all — the table is line-based, one row per line, with no continuation syntax — so a CSV field with a paragraph in it has to be flattened or the table stops being a table. And there is no such thing as a Markdown table without a header row, because the row of dashes under the header is the thing that makes a parser recognise a table in the first place. Tables are not in plain CommonMark either, which is a separate trap covered in the flavours article.

Third, there is where the file goes. Spreadsheets are the most sensitive documents most people convert: payroll extracts, customer lists, invoice exports, results that are not published yet. An online converter that uploads is an online converter that now holds your rows. That is fine for a table of open-source licences and it is a data transfer for everything else, which is why the question is worth asking before you drag the file onto the page.

Quick comparison: the cheat sheet

Tool Best for Key capability Price
transformpipe A file you have and a table you need now RFC 4180 parse in the browser, nothing uploaded, <br> for in-cell breaks Free
Pandoc A CSV that is one step in a longer document build csv and tsv readers into any output format it writes Free, GPL
Miller Filtering or reshaping the data on the way through --c2m converts CSV to Markdown in one flag Free, BSD 2-clause
csvkit (csvlook) Reading a CSV in the terminal before converting it Renders a CSV as a Markdown-compatible fixed-width table Free, MIT
csv2md One command in a script Several separate tools of this name; delimiter and header flags Free, MIT (the two below)
tablesgenerator.com Editing the table after the import Spreadsheet-style grid, CSV upload, paste from Excel Free (no account mentioned)
VS Code extensions The file is already open in your editor Clipboard paste as a Markdown table; CSV column highlighting Free
pandas.to_markdown The table is the end of an analysis One method on a DataFrame, via tabulate Free, BSD 3-clause
tabulate Rows in Python that are not a DataFrame github and pipe table formats Free, MIT
Spreadsheet copy-paste A selected range, not a whole file Clipboard TSV, which is easier to split than CSV Free
A shell one-liner A file you have already read and know is clean awk on a delimiter, no install Free
An assistant chat window A handful of rows you can check by eye Reads pasted text, formats a table Varies

The CSV and TSV to Markdown options, one at a time

transformpipe — best for a file you have and a table you need now

transformpipe reads a .csv or .tsv file in your browser and hands back a Markdown table, with the first row as its header. There is no install and no account needed, and signed out the file is not sent anywhere — it is read off your disk by the page, parsed, and written back out as text.

Pros Cons
A real RFC 4180 parse: quoted fields, embedded commas, doubled quotes, multi-line cells One file at a time; not a batch job over a directory
A line break inside a cell becomes <br> rather than breaking the table The first row is treated as the header, so a headerless file needs one added
Pipes and backslashes in values are escaped, so a path or a regex does not split a row No alignment colons: every column comes out left-aligned unless you edit the separator row
The delimiter is sniffed from the first line, so a semicolon export works without a flag The browser does the work, so a very large export is limited by the machine

Price: free. An account adds history, sharing and an API, also free.

Technical details and features

  • The parser is the RFC 4180 rules and nothing else: a quote opens a field, a doubled quote inside one is a literal quote, and a newline inside quotes belongs to the cell rather than ending the row
  • The delimiter is counted outside quotes on the first line across comma, tab, semicolon and pipe, and the most frequent one wins; a .tsv extension forces tab
  • A byte order mark is stripped and CRLF line endings are normalised before parsing, so a file exported from Excel on Windows behaves like any other
  • Short rows are padded with empty cells to the width of the widest row, so a ragged file still produces a rectangular table
  • The file name becomes an H1 above the table, because a table with no title is a table nobody can place a week later
  • The same conversion runs from a REST API, a dependency-free CLI that picks the conversion from the file extension, a GitHub Action and an MCP server

Who should use it? Anybody with a spreadsheet export and a document to paste it into, particularly if the rows are not public. The whole conversion happens on your machine, which you can confirm by watching the network tab do nothing while it runs.

Pandoc — best when the CSV is one step in a longer document

Pandoc is a command line document converter written in Haskell, and its list of input formats includes csv (which the manual describes as an RFC 4180 table) and tsv. That makes it the only tool here that will take a CSV and give you Markdown, HTML, LaTeX, DOCX or EPUB with the same command and a different -t.

Pros Cons
Reads CSV and TSV natively, no helper script An install, and a large one
Writes to every output format Pandoc supports, from the same input The Markdown table dialect depends on which writer extension is active
--standalone produces a complete document rather than a fragment No control over the delimiter: comma for csv, tab for tsv
Already installed on a great many documentation build machines More tool than a single table needs

Price: free, GPL licensed.

Technical details and features

  • pandoc -f csv -t markdown data.csv writes a pipe table; -f tsv for tab-separated input (checked on pandoc.org, 8 September 2026)
  • The first record of the file is read as the header row, which is the same assumption every other tool here makes
  • Which Markdown table syntax comes out depends on the writer's table extensions — pipe_tables is the one that matches GitHub, and a grid or simple table will not render in a GFM parser
  • The same file can go straight to HTML, and --standalone wraps it in a document with a head and styles instead of leaving you a fragment

Who should use it? Anybody whose CSV is one input among several in a build that already runs Pandoc. If the destination is a web page rather than Markdown, going straight there is usually the shorter path — the converter comparison covers what to use for that leg.

Miller — best for reshaping the data on the way through

Miller is a command line processor for CSV, TSV, JSON and JSON Lines, written in Go with no runtime dependencies. Markdown is one of its output formats, so a conversion is a flag rather than a script.

Pros Cons
--c2m converts CSV to a Markdown table in one flag Another install, and a command language to learn
Filter, sort, cut and rename columns in the same command that converts Output is unpadded by default, which is harder to read in the raw file
Reads Markdown tables back in as well as writing them Verbs and flags are a real syntax, not a single option
A single static binary, no runtime Overkill if you are converting one file once

Price: free, open source, two-clause BSD licence (checked on github.com/johnkerl/miller, 8 September 2026).

Technical details and features

  • --omd selects Markdown output, --imd Markdown input, and the keystroke-savers --c2m and --m2c do CSV to Markdown and back
  • --omd-aligned pads the columns so the source of the table is readable to a human editing it afterwards
  • --right-align-numeric emits ---: in the separator row for numeric columns, which is the alignment syntax GFM understands
  • Because conversion is an output format rather than a mode, mlr --c2m sort -f region cut -f region,total data.csv filters and converts in one pass

Who should use it? Anybody who wants a subset of the file rather than all of it — the last quarter, three of eleven columns, rows above a threshold. Doing that in the converter beats converting everything and deleting rows in Markdown afterwards.

csvkit's csvlook — best for reading the file before you convert it

csvkit is a suite of command line tools for CSV, written in Python. csvlook renders a CSV to the terminal in what its own documentation calls a Markdown-compatible, fixed-width format — a table you can read, and paste.

Pros Cons
Output is documented as Markdown-compatible, so it usually pastes straight in Built for looking at data, not for producing files
Sniffs the CSV dialect, so odd delimiters are often handled without a flag Fixed-width padding makes the source verbose
The rest of csvkit — csvcut, csvgrep, csvsql — composes with it Needs Python and pip
Type inference makes numeric columns line up Truncation options can silently shorten wide cells

Price: free, MIT licensed (checked on github.com/wireservice/csvkit, 8 September 2026).

Technical details and features

  • csvlook data.csv prints the table; piping works, so csvcut -c 1,3 data.csv | csvlook narrows it first
  • --max-rows, --max-columns and --max-column-width limit what is displayed, and each of them changes the table rather than only the view
  • --no-inference turns off type detection, which matters for columns of identifiers that look like numbers
  • --snifflimit 0 disables dialect detection when the guess is wrong

Who should use it? People who live in a terminal and want to see the file before deciding anything about it. Treat the Markdown output as a convenience rather than the point, and check the truncation flags before pasting a wide table.

csv2md — best for one line in a script, once you pick which one

There is no single csv2md. There are several unrelated tools with that name, in different languages, with different flags, and searching for one returns the others. Two are easy to verify: a Python one installed with pip, and a Ruby one installed as a gem.

Pros Cons
Does exactly one job, so there is nothing to configure The name collision is a genuine hazard when writing install docs
The Python version takes delimiter, quote character and alignment flags Small single-purpose tools come and go
The Ruby version reverses the conversion, Markdown table back to CSV Another package manager in your build
Reads stdin, so it drops into a pipeline Behaviour differs between the tools sharing the name

Price: free, MIT licensed — both the Python and the Ruby implementations (checked on github.com/lzakharov/csv2md and github.com/jonmagic/csv2md, 8 September 2026).

Technical details and features

  • The Python tool (pip install csv2md) documents -d for the delimiter, -q for the quote character, -C to select columns, -c and -r for centre and right alignment, and -H to say the file has no header row — in which case it generates spreadsheet-style headers a, b, c
  • That -H flag is worth noting: it is the only tool here that answers the headerless-file question with something other than "your first data row is now the header"
  • The Ruby tool (gem install csv2md) converts CSV to a GitHub Flavored Markdown table and takes -r to go the other way

Who should use it? Scripts that convert one known file shape repeatedly. Pin the exact package in your instructions, because "install csv2md" is ambiguous advice.

tablesgenerator.com — best for editing the table after the import

Tables Generator is a browser tool that gives you a spreadsheet-like grid and generates markup from it, Markdown among several formats. Its value is not the conversion, it is the twenty minutes afterwards when you are fixing the table.

Pros Cons
Import a CSV file or paste a range from Excel, Google Sheets or LibreOffice Your rows go through a hosted page
Edit cells, insert and move rows and columns, transpose the whole table A grid has practical size limits: the page states a valid range of 1 to 500 rows and 1 to 20 columns (checked on tablesgenerator.com, 8 September 2026)
Alignment controls per column, and undo Manual editing does not scale past a screenful
Generates LaTeX, HTML and MediaWiki from the same grid Not scriptable

Price: free; no account or payment is mentioned on the page (checked on tablesgenerator.com, 8 September 2026).

Technical details and features

  • Import from CSV file upload, from a paste of Markdown or HTML, or from a copied spreadsheet range
  • Find and replace, number formatting, row and column insertion and removal, transposition, local autosave
  • The page states support for GitHub Flavored Markdown table syntax, which is the flavour most parsers agree on
  • Copy to clipboard, or download the result as CSV

Who should use it? Anybody assembling a table by hand from more than one source, or fixing a converted table's headings and alignment before publishing it. Not the tool for confidential rows, and not the tool for a file with ten thousand of them.

VS Code extensions — best when the file is already open in your editor

If the CSV is in your repository, the shortest route is the editor it is already open in. Two extensions cover the two halves of the job: one pastes a copied spreadsheet range as a Markdown table, the other makes the CSV itself readable.

Pros Cons
No new application: the conversion happens where the file lives Extension quality and maintenance vary
Clipboard-driven, so it works from Excel and Sheets as well as files Each extension does one part of the job
Free Editor-only: nothing here runs in CI
Column highlighting makes a broken quote visible before you convert Behaviour on odd delimiters depends on the extension

Price: free (checked on marketplace.visualstudio.com, 8 September 2026).

Technical details and features

  • Excel to Markdown table (csholmq) converts a copied spreadsheet range in the clipboard into a Markdown table, from the command palette or with Shift+Alt+V, and reads a ^l, ^c or ^r prefix on a header to set that column's alignment
  • Rainbow CSV (mechatroner) colours the columns of a CSV or TSV so a misplaced quote is visible as a colour change, offers column alignment, and includes a copy-in-Markdown-format command
  • Rainbow CSV's documentation states that its Dynamic CSV filetype handles multiline fields escaped in double quotes, which is the RFC 4180 case most highlighters get wrong
  • Both work on the file as it is: neither adds a build step

Who should use it? Developers writing documentation next to the data. Pair them — one to check the file, one to produce the table.

pandas.to_markdown — best when the table is the end of an analysis

If the rows have already been through pandas, the Markdown table is one method call away. DataFrame.to_markdown() exists and it requires the tabulate package to be installed.

Pros Cons
One method, at the end of work you were doing anyway The index is included by default, which produces an unnamed first column
pandas' CSV reader handles quoting, encodings and delimiters properly A heavy dependency to add for a table
Filter, group and sort before converting, which is the usual reason to be here Needs Python and a script, not a file drop
tablefmt passes through to tabulate, so the table style is selectable Not a converter: a library call inside your own code

Price: free. pandas is BSD 3-clause licensed; tabulate, which it requires, is MIT.

Technical details and features

  • pd.read_csv('data.csv').to_markdown(index=False) is the whole conversion, and index=False is the part people forget (checked on pandas.pydata.org, 8 September 2026)
  • The index parameter defaults to True, so the default output carries the row numbers in a column with no header
  • tablefmt is handed to tabulate, and the documented default emits alignment colons in the separator row
  • Everything pandas does to a CSV on the way in — dtype inference, na_values, thousands, explicit encoding — happens before the table is written, for better and for worse

Who should use it? Anybody producing a table from data they are already computing: a weekly report, a notebook result, a summary appended to a Markdown file by a script.

tabulate — best when you have rows but not a DataFrame

tabulate is the library pandas calls, and it takes a plain list of lists. If your rows come from a database cursor, a JSON response or csv.reader, this is the smaller dependency.

Pros Cons
Works on any iterable of rows; no DataFrame needed You do the CSV parsing yourself
github and pipe formats both produce Markdown tables Nothing to run: it is a library, not a command
Small, with no dependency chain behind it No opinion about your data types

Price: free, MIT licensed (checked on pypi.org, 8 September 2026).

Technical details and features

  • tabulate(rows, headers=header, tablefmt='github') produces a GFM-style table; tablefmt='pipe' adds alignment colons in the separator row (checked on pypi.org, 8 September 2026)
  • Pair it with the standard library's csv module, which implements the quoting rules, rather than with line.split(',')
  • Header handling is explicit: pass headers yourself, so a headerless file is your decision rather than the tool's

Who should use it? Python scripts that already hold rows in memory and need one table at the end. Pull csv.reader for the input and tabulate for the output, and you have skipped both bugs the naive version has.

Copy and paste from a spreadsheet — best for a range, not a file

Copying cells from Excel, Numbers or Google Sheets puts tab-separated text on the clipboard, not CSV. That matters: tabs almost never appear inside a value, so splitting on them is far safer than splitting on commas. It is why the clipboard route works as often as it does.

Pros Cons
No file to export, no tool to install Converts a selection, not a source of truth
Clipboard TSV avoids the embedded-comma problem entirely Formulas arrive as values; formatting does not arrive at all
Works from a range, which is often all you wanted A cell containing a line break still pastes as multiple lines
Any TSV-aware converter accepts it directly Merged cells collapse in ways you have to check

Price: free.

Technical details and features

  • A copied range is TSV, so a .tsv conversion path or a paste extension handles it without a delimiter setting
  • Cells containing tabs or newlines are quoted on the clipboard by the spreadsheet, which means the quoting rules still apply
  • Number formatting is a display property: a cell showing £1,234.00 may put 1234 on the clipboard, and a cell showing a rounded value may put the full precision there

Who should use it? Anybody converting part of a sheet once. If the same range has to be converted every week, export the file and script it instead.

A shell one-liner — best for a file you have already read

awk -F, '{...}' is the fastest CSV to Markdown table converter to write and the easiest one to get wrong. It is a legitimate choice for exactly one situation: a file you have opened, looked at, and know contains no quotes, no embedded delimiters and no line breaks in cells.

Pros Cons
Nothing to install; works on any machine with a shell -F, is a split, not a CSV parse
Fine for machine-generated files with a fixed shape Fails silently on quoted fields, which is the worst failure mode there is
Easy to read and adapt Escaping pipes and flattening newlines is all on you

Price: free.

Who should use it? Somebody converting output they generated themselves, in a script that will be deleted afterwards. For anything that came from a spreadsheet, a database export or another person, use a tool with a parser. The cost of the one-liner is not that it breaks; it is that it breaks one row in the middle of a hundred.

An assistant chat window — best for a handful of rows you can check

Pasting rows into an assistant and asking for a Markdown table works, and it is the only option here that will also tidy your headings. The catch is that it is generating text rather than transforming it, so the output is not guaranteed to hold the same values as the input.

Pros Cons
Handles messy, half-structured input that a parser rejects Values can be reformatted, rounded or reordered
Will rename headings and reorder columns if asked No guarantee every row survives, particularly on long inputs
Nothing to install Pasting means the data leaves your machine
Useful for the last awkward corner of a table Not reproducible: the same paste twice may differ

Price: varies by assistant.

Who should use it? Anybody with twenty rows and eyes on all of them. For a payroll export, use a parser; for a scribbled list of three columns, this is faster than any of the above. Getting a checked result out of an assistant and into a page is its own short exercise.

What RFC 4180 does to a converter

This is the section a tool's own page leaves out, because every item on it is a way of failing quietly. Take one representative file — a real one, with the awkward rows still in it — and check each of these before you commit to anything.

A comma inside a quoted field. "Smith, John",Sales,2026 is three fields, not four. A parser reads the quotes and keeps the comma; a split produces four cells, and a row one cell wider than the header. GFM's rule is that extra cells beyond the header count are discarded, so Sales and 2026 shift left and the last value vanishes. Nothing warns you. The row simply says something different from the file.

A doubled quote is one quote. Inside a quoted field, "" means a literal ". So "She said ""no""." is one field reading: She said "no". A tool that strips quotes with a regex leaves the doubles in, and you get She said ""no"" in your table. It is cosmetic until the value is a code sample or a measurement in inches, at which point it is wrong.

A line break inside a cell. This is the one with no clean answer. RFC 4180 allows a newline inside a quoted field, and spreadsheets produce them constantly — address blocks, notes columns, anything a person typed Alt+Enter into. A Markdown table has no way to represent it: the table is one row per line, and a newline inside a cell ends the row. Every tool has to pick a lie. Dropping the break runs two sentences together. Splitting the row makes a second, malformed row. Replacing the break with <br> keeps the visual line break when the Markdown is rendered as HTML, and leaves an HTML tag in a file that might not be rendered as HTML. transformpipe replaces with <br>, on the grounds that a visible tag beats a silently broken table — but it is a trade, and what Markdown does with line breaks generally explains why there is no better option available inside a table.

A pipe inside a value. CSV does not care about pipes; Markdown cares a great deal. An unescaped | ends the cell wherever it appears, including inside backticks, so one value containing a|b adds a phantom column to that row. It has to be escaped as \| on the way out. This is the failure that trips up converters written by people who tested with names and numbers: it shows up in file paths, regular expressions, shell commands and any column holding a list of options. If you convert data like that, put a pipe in a test cell deliberately and see what comes out. The tables article covers what the escape does on the far side.

A file with no header row. Machine-generated CSVs frequently have none — a log export, a database dump, a sensor feed. A Markdown table cannot exist without a header, because the separator row underneath it is what identifies the table to the parser. So every converter does one of three things: promote your first data row to the header, which loses that row's meaning; generate placeholder headings such as a, b, c or Column 1; or refuse. Most take the first option quietly, which is why a converted log file so often has a timestamp where the column names should be. If your file has no header, add one before converting. It is one line, and it is the only version of this that ends well.

The delimiter is not always a comma. A CSV exported in a locale that uses the comma as a decimal separator is very often semicolon-delimited, and it still ends in .csv. Tab-separated files are the same file format with a different separator. A converter that assumes a comma turns each row into a single cell containing everything — an obvious failure, at least, which is more than the others offer. Look for a delimiter option, or a tool that sniffs the first line.

The bytes before the first field. A file saved from Excel on Windows may start with a byte order mark and use CRLF line endings. The BOM attaches itself to your first column heading, where it is invisible in the editor and breaks any comparison against that heading. The CRLF leaves a stray carriage return at the end of every last field. Both are trivial for a converter to handle and neither is handled by a naive split.

Rows that are not all the same length. Real exports have ragged rows. Markdown table width is set by the header, and body rows are padded or truncated to match without comment. Padding a short row is nearly always right. Truncating a long one throws data away, and the row that gets truncated is usually the one with the quoting problem — so a ragged row is worth investigating rather than padding.

Where a Markdown table simply cannot go

Some of what a spreadsheet holds has no Markdown equivalent at all, and knowing which parts saves you looking for a converter that handles them. None does.

Merged cells. There is no colspan or rowspan in a Markdown table. A merged header spanning three columns has to become one heading in one column, with the other two empty, or three repeated headings. If the source relies on merged cells for its structure, the table needs redesigning rather than converting.

Formulas and number formats. A CSV export contains values, not formulas — that loss happens before the converter sees the file. Number formatting goes the same way: currency symbols, thousands separators, percentages and date formats are display properties of the spreadsheet, and what lands in the CSV is whatever the exporter chose to write. If the converted table shows 0.4567 where the sheet showed 45.67%, the export did that, not the conversion.

Very wide tables. Markdown tables do not wrap or scroll on their own. Twelve columns of prose renders as a table wider than the page, and what happens next is up to whatever renders it — horizontal overflow, a squeeze, or a scrollbar if the surrounding HTML provides one. Cut columns before converting, or accept that the table will be read on a wide screen only.

Sorting, filtering and totals. A Markdown table is text. It has no sort, no filter, no totals row that recalculates. If the reader needs to interrogate the numbers, the table is the wrong output and a link to the CSV is the right one. Markdown tables are for data small enough and settled enough to read.

How to choose

  1. Check one difficult row before anything else. Find a value in your file with a quote, a comma inside quotes or a line break in it, convert that file, and look at that row in the output. If it survives, the tool has a parser; if it does not, no other feature matters, because the failure is silent and the file is now subtly wrong.
  2. Decide whether the rows can leave the machine. For a table of public data this is not a consideration. For anything with names, salaries or unreleased numbers in it, browser-side conversion or a local command line tool are the only two options, and the difference is not visible in a feature comparison.
  3. Count how many times you will do this. Once is a file drop. Every week is a script, and a script argues for Pandoc, Miller or a library call, because a person driving a browser tab is the part of a weekly process that eventually gets forgotten.
  4. Ask whether you want all the rows. If the answer is no, convert with something that can also filter. Deleting rows from a Markdown table by hand is the slowest possible way to do it, and it is where transcription errors come from.
  5. Look at whether your file has a header, before the tool decides for you. If it does not, add one. Every converter's answer to a headerless file loses something, and the version where you supply the column names is the only one that produces a table anybody can read later.

Conclusion

The best CSV to Markdown table converter is the one that reads the file as CSV rather than as text with commas in it, because everything else about the job is easy and that part is the only part that fails without telling you. For a file on your disk and a document to paste it into, The browser converter above's CSV to Markdown table conversion does the RFC 4180 parse in your browser, escapes the pipes, turns in-cell line breaks into <br>, and uploads nothing — free, with no install. For a repeating job, put Miller or Pandoc in the script. For a table at the end of an analysis you are already running in Python, to_markdown was there all along. Whichever you pick, keep one file with a quoted comma and an embedded newline in it as your test, and run it through anything new before you trust it with real rows.

FAQ

How do I convert a CSV to a Markdown table without uploading the file?

Use a converter that runs in the browser or one that runs on your own machine. A browser-side tool reads the file with the page's own file API and never sends it, which you can verify by opening the network tab and watching nothing happen; a command line tool such as Miller or Pandoc never touches the network at all.

What happens to commas inside quoted fields?

In a tool with a real CSV parser, nothing — the quotes are read, the comma stays inside the cell, and the row keeps its column count. In a tool that splits on commas, the field becomes two cells and the row grows a column, and because Markdown discards cells beyond the header count, the value at the end of that row disappears without a warning.

Can a Markdown table cell contain a line break?

No. A Markdown table is line-based, one row per line, with no continuation syntax, so a real newline inside a cell ends the row. Converters handle a CSV field containing a line break by replacing it with <br>, which renders as a break when the Markdown becomes HTML, or by flattening it into a space — and the choice is the converter's, so check which one yours made.

What do converters do with a CSV that has no header row?

Most promote the first data row to the header, because a Markdown table cannot exist without one. Some tools offer a flag that generates placeholder names instead — the Python csv2md documents -H for exactly this. The reliable answer is to add a header line to the file yourself before converting.

How do I convert a TSV file instead of a CSV?

Any tool with a delimiter option takes a tab; several detect it from the file extension. Pandoc has a separate tsv reader, Miller reads TSV natively, and a converter that sniffs the delimiter from the first line handles it without being told. Clipboard data copied from a spreadsheet is already tab-separated, which is why pasting often works better than exporting.

Does a Markdown table keep column alignment from the spreadsheet?

No, and it has no concept of alignment beyond three options per column, set by colons in the separator row. Some tools emit those colons — tabulate's pipe format does, its github format does not — and some leave every column left-aligned for you to edit. Cell-level alignment, merged cells and number formatting do not exist in Markdown at all.

Is Excel to Markdown the same job as CSV to Markdown?

Almost. Save the sheet as CSV and it is the same job, with the same quoting rules. Copy a range to the clipboard instead and you get tab-separated text, which is easier to split safely because tabs rarely appear inside values — but formulas have already become values and cell formatting has already been discarded by the time either format is produced.