README-sized table
- Input
- CSV row: 002,Bob,"He said ""Hi""",94105,false,19.99,2026-09-11,filled
- Output
- Markdown row: | 2 | Bob | He said "Hi" | 94105 | false | 19.99 | 2026-09-11T00:00:00.000Z | filled |
CSV to Markdown writes one GFM pipe table from the parsed CSV, which is convenient for READMEs but fragile when a cell contains a physical newline.
From real runs
| Element | Result | What happens |
|---|---|---|
| Header row | Kept | The CSV header became the Markdown table header, followed by a generated separator row of --- cells. |
| Commas in cells | Kept | Ada, Inc. appeared inside a single Markdown cell because the comma had already been protected by CSV quoting. |
| Multiline cells | Changed | The embedded newline was written literally inside the pipe row, which can break Markdown table rendering in strict viewers. |
| Pipe characters | Changed | Markdown output escapes vertical bars with a backslash, but our CSV sample did not contain one. |
| Typed values | Changed | Dates were expanded to ISO timestamp text and numeric-looking IDs lost leading zeros before the table was written. |
| Missing cells | Changed | The short Zoë row became a full-width Markdown row with blank cells after the name column. |
The CSV header became the Markdown table header, followed by a generated separator row of --- cells.
Ada, Inc. appeared inside a single Markdown cell because the comma had already been protected by CSV quoting.
The embedded newline was written literally inside the pipe row, which can break Markdown table rendering in strict viewers.
Markdown output escapes vertical bars with a backslash, but our CSV sample did not contain one.
Dates were expanded to ISO timestamp text and numeric-looking IDs lost leading zeros before the table was written.
The short Zoë row became a full-width Markdown row with blank cells after the name column.
We converted our CSV sample (226 B) with Table engine on 2026-09-11. It took 1 ms and produced a 374 B Markdown file, 1.7× larger than the input. The engine raised no warnings.
Input · sample.csv · 226 B
4 data rows × 5 columns; header: company,stage,arr,owner,close_date
Output · sample.md · 374 B
0 headings, 1 table, 0 list items, 0 code blocks, 0 image references
First lines of the output
| company | stage | arr | owner | close_date |
| --- | --- | --- | --- | --- |
| Northwind Traders | Proposal | 48000 | R. Ayers | 2026-10-14T00:00:00.000Z |
| Contoso Ltd | Negotiation | 120000 | P. Ng | 2026-09-30T00:00:00.000Z |
| Fabrikam | Qualified | 22500 | R. Ayers | 2026-11-02T00:00:00.000Z |
| Tailspin Toys | Won | 64000 | M. Okafor | 2026-09-03T00:00:00.000Z |pandas
python - <<'PY'
import pandas as pd
df = pd.read_csv("input.csv", dtype=str)
df.to_markdown("output.md", index=False)
PYpandas needs the tabulate package for to_markdown, and multiline cells may still need manual cleanup.
The HTTP API and the MCP server run the exact engine this page uses (Table engine); the response carries the same warnings the web converter shows. Check support first with GET /api/v1/pairs?from=csv&to=md.
curl -X POST https://filetypeconverters.com/api/v1/convert \
-H "Authorization: Bearer $FTC_API_KEY" \
-F "file=@input.csv" -F "from=csv" -F "to=md" \
-F 'options={"delimiter":","}' \
--output output.md| Key | Applies to | Type | Default |
|---|---|---|---|
| delimiter | Reading CSV | string | , |
| header | Reading CSV | boolean | true |
| quote | Reading CSV | string | " |
| encoding | Reading CSV | utf-8 · latin1 | utf-8 |
The text is preserved, but the Markdown table may not render as one row. Our output kept the physical newline inside the pipe row, which many Markdown renderers treat as a broken table.
No. It writes only the table: a header row, a separator row, and data rows. Surrounding documentation has to be added after conversion.
The parser recognized ISO date strings as dates and serialized them as full UTC timestamps. That makes the value explicit but changes the original display text.