Convert CSV to Markdown
Table. GitHub-ready
in one click.
Free CSV to Markdown table converter. Auto-detects number columns and right-aligns them. Padded output for readable raw Markdown. Live rendered preview. Copy for GitHub, GitLab, Notion, Obsidian and any Markdown editor.
Markdown table syntax
Understanding the GFM table format — pipes, dashes and alignment markers.
| Name | Score | Grade | |:------|------:|:-----:| | Alice | 95 | A | | Bob | 82 | B | | Carol | 78 | C |
Column alignment markers
The separator row controls how each column renders.
Default — colon on left only. Best for text, names and descriptions.
Colons on both sides. Best for status, flags and short codes.
Colon on right only. CSVShift auto-selects this for numeric columns.
How CSV to Markdown table conversion works
Three steps from flat CSV to formatted Markdown.
Detect column types
In auto-alignment mode, CSVShift samples the first 50 rows of each column. Columns where every non-empty value matches a numeric pattern (integer, decimal or scientific notation) are flagged as numeric and right-aligned in the output — matching standard table typography conventions.
Calculate column widths (padded mode)
In padded mode, the maximum character width across the header and all rows is calculated for each column. Every cell is padded to this width — left, right or centre depending on alignment — producing Markdown that is as readable in raw form as it is rendered.
Generate + preview
The Markdown table is built with | pipe separators, a separator row with alignment markers, and data rows. The live rendered preview shows exactly how GitHub, GitLab or Notion will display the table. Copy to clipboard and paste directly into your documentation.
CSV to Markdown table in Python
For scripting and documentation generation workflows.
When do you need CSV to Markdown table?
Common documentation and developer workflows.
GitHub and GitLab READMEs
Package comparisons, benchmark results, API endpoint lists and feature matrices are common README tables. Converting a CSV of data to Markdown and pasting into README.md produces a table that renders correctly on GitHub, GitLab and Bitbucket without any plugins.
Documentation sites
Documentation built with MkDocs, Docusaurus, Sphinx or Hugo supports Markdown tables. Converting reference data, configuration options or API parameters from CSV to Markdown produces tables that render correctly in any Markdown-based doc site.
Notion, Obsidian, Confluence
Knowledge base tools that support Markdown can import Markdown tables. Converting a CSV dataset to Markdown and pasting into Notion, Obsidian or Confluence produces a native table that can be sorted, filtered and edited within the tool.
Technical writing and changelogs
Release notes, changelogs and technical specs often include tables of breaking changes, migration steps or API differences. CSV is the natural format for this data; Markdown table is the delivery format for documentation.
Related CSV tools
Other free converters on CSVShift you might need.
Markdown generated
in your browser. Copy-ready.
CSVShift generates the Markdown table entirely in JavaScript in your browser. Your CSV is never uploaded. The output follows GitHub Flavored Markdown (GFM) table syntax — compatible with GitHub, GitLab, Bitbucket, Notion, Obsidian, MkDocs, Docusaurus and any GFM-compatible parser.
The live rendered preview uses marked.js — the same Markdown parser behind many documentation platforms — so what you see in the preview is what you get when you paste into GitHub or your docs site.
Auto numeric alignment
Padded raw Markdown
Live preview via marked.js
Free, no conditions
How do I convert CSV to a Markdown table?
How do I insert a table in a GitHub README?
| to separate columns and --- for the separator row. Convert your CSV here, copy the output, and paste it directly into your README.md. No plugins needed — GitHub renders it automatically.How do I convert CSV to Markdown in Python?
import pandas as pd; print(pd.read_csv('f.csv').to_markdown(index=False)). Requires pip install pandas tabulate. For more control use tabulate directly: tabulate(rows, headers, tablefmt='github').