100% Local · Free · No Sign-up

Convert TSV (Tab-Separated) Files to Markdown Tables

Convert tsv to md tables straight from a file or from your clipboard — a range copied out of Excel, Google Sheets or Numbers is already tab-delimited, so pasting it needs no export step. PapaParse reads the delimited text in a Web Worker, escapes pipes inside cells, and emits a GitHub Flavored Markdown pipe table with the column alignment you choose.
Drop your TSV file here to convert to MarkdownDrag & drop files here, or click anywhere to browse · .tsv, .csv

Processing happens 100% in your browser — nothing is uploaded.

100% Local Processing — Your files never leave your device

How to convert TSV to Markdown

  1. Provide the data: drop a .tsv file onto the dropzone, or copy a range from your spreadsheet and paste it straight into the editor.
  2. Local processing: PapaParse detects the delimiter (or uses the tab you set explicitly) in a Web Worker, then builds a GFM pipe table with your header and alignment settings.
  3. Copy or download: copy the Markdown table to your clipboard or save it as a .md file for a README, a wiki page or a pull request.

Why Convert TSV to Markdown with MD Convert?

  • Paste a spreadsheet range directly

    The clipboard format for Excel, Sheets, Calc and Numbers is tab-delimited text, so a copied selection is exactly what the parser expects. That skips the export dance — save as CSV, pick an encoding, find the file — and the delimiter ambiguity export introduces, since a CSV export of European data often uses semicolons.

  • Alignment written into the delimiter row

    GFM encodes alignment through colon placement: :--- left, :---: centre, ---: right. You set it per column here instead of hand-editing dashes afterwards, and three dashes — the GFM minimum — is what gets emitted, since padding the delimiter row adds bytes with no rendering effect.

  • Pipes escaped, rows kept in sync

    Every | inside a cell is escaped as \| before output. Without it, one pipe in a URL, a regex or a log line splits a cell in two and shifts every later value out from under its header — the quiet way a generated table starts reporting the wrong numbers. Newlines inside quoted fields collapse to spaces for the same structural reason.

  • Ragged rows warn instead of failing

    The column count comes from the widest row and short rows are padded with empty cells, so a copied range with a trailing blank column still yields a well-formed table. PapaParse's recoverable issues surface as a warning naming the first few, which is usually enough to find a stray tab.

TSV to Markdown: Before and After

Tabs separate the fields, the first row becomes the header, and the delimiter row carries the per-column alignment you choose — :--- left, :---: centre, ---: right. Numeric columns read far better right-aligned.

Input · TSV
region	units	revenue
EMEA	1204	48160
APAC	980	39200
LATAM	415	16600
Output · Markdown
| region | units | revenue |
| :--- | ---: | ---: |
| EMEA | 1204 | 48160 |
| APAC | 980 | 39200 |
| LATAM | 415 | 16600 |

Understanding the TSV Format: IANA text/tab-separated-values

Format
Tab-Separated Values
Media type
text/tab-separated-values
Parser used
PapaParse

Technical Specifications & Tab Delimiter Rules

  • Native Clipboard Compatibility: Clipboard selections copied from Excel, Google Sheets, Calc, and Numbers export as raw tab-delimited text; pasting requires zero file export steps or delimiter conversion.
  • Tab Separation (\t) Without Quoting Ambiguity: Uses horizontal tabs (U+0009) as strict field boundaries, avoiding the delimiter collisions common to European comma/semicolon CSV exports.
  • Structural Pipe & Newline Escaping: In-cell pipes (|) are safely escaped to \| to prevent splitting table cells; multiline text inside a cell collapses to single spaces to maintain GFM row boundaries.
  • Ragged Row Toleration & Column Synthesis: Rows shorter than the widest row are padded with empty cells; headerless TSV extracts synthesise Column 1, Column 2 placeholders to guarantee valid GFM table structure.
  • Large Dataset Worker Streaming: High-volume database extracts and bioinformatics logs are parsed in a background Web Worker without freezing the main thread or causing tab crashes.

Developer Alternative: CLI (csvkit) & Python (Pandas) Extraction

For scheduled jobs or server-side pipelines, csvkit and Pandas produce the same kind of Markdown table outside the browser.

Bash (csvkit)
# Format TSV directly as a clean table in terminal using csvkit
csvlook -t input.tsv
Python (Pandas)
# Programmatic TSV to Markdown table conversion using Pandas
# requires: pip install pandas tabulate
import pandas as pd

# Reads tab-separated values (\t) and exports directly to a GFM pipe table
df = pd.read_csv("data.tsv", sep="\t")
markdown_table = df.to_markdown(index=False)
print(markdown_table)

How You Can Verify the Privacy Claim

Browser-only

Zero server upload

Conversion runs inside your browser tab. Open DevTools, switch to the Network panel, and convert a file: for every format except URL to Markdown you will see no request carrying your document — because there is no endpoint to send it to.

Web Worker

Off the main thread

Heavy parsing is dispatched to a Web Worker, so a 500-page PDF or a large spreadsheet never freezes the interface. Everything is plain JavaScript — no native plugin, no WebAssembly toolchain, nothing to install.

No account

Nothing to sign up for

No login, no quota, no paywall, and no tracking tied to your files. Analytics are cookieless and aggregate only. Read the privacy policy for the full data-flow breakdown, including the one proxied exception.

The parsers doing the work

No proprietary black box: each format is handled by a widely audited open-source library, running client-side at the version pinned in our lockfile.

TSV to Markdown — FAQ

Can I paste directly from Excel or Google Sheets?

Yes, and it is the fastest route. Both put tab-delimited text on the clipboard when you copy a range, so pasting into the editor gives the parser exactly what it expects with no file and no export. The same is true of LibreOffice Calc and Numbers.

How do I control column alignment in the output?

Alignment is set per column and written into the delimiter row: :--- for left, :---: for centre, ---: for right, and a bare --- to leave it to the renderer. Right alignment is the one that genuinely improves numeric columns, because it lines the digits up so magnitude is readable down the column.

What if a cell contains a pipe or a line break?

Pipes are escaped as \| so they cannot split the row, and a newline inside a quoted field is collapsed to a space because a GFM table row must occupy a single line. If keeping the line break matters more than staying in a table, convert that column's text separately.

How are ragged rows and headerless files handled?

The column count comes from the widest row and short rows are padded with empty cells, so a copied range with a trailing blank column still yields a well-formed table. If your data is headerless, turn the header toggle off and the converter emits Column 1, Column 2 placeholders rather than producing an invalid table. PapaParse warnings surface the first few ragged rows to help you spot a stray tab.

In-Depth TSV Guides