How to turn nearly-markdown pipe tables into valid gfm
- Step 1Paste the raw pipe-delimited text — Drop the messy table from your chat export, email, or PDF text. The rows must already use
|between columns — that is how the tool recognises them. - Step 2Confirm it is pipe-separated, not space-aligned — If the source uses spaces or tabs to line up columns (classic monospace ASCII), this tool will not parse it. Convert that to a table with CSV to Markdown table instead.
- Step 3Run the repair — Click run. The first pipe row becomes the header, a separator is inserted, and every row is matched to the header's column count. No options to choose.
- Step 4Check the promoted header — Extraction sometimes drops the real header. The first pipe line becomes the header regardless — if a data row got promoted, reorder the source so the header is first, then re-run.
- Step 5Watch for split cells from stray pipes — A literal
|inside a value (e.g. a path likea|bor a regex) is treated as a delimiter and splits the cell. Scan for cells that broke apart, and fix the source value before re-running. - Step 6Copy the repaired Markdown into your doc — Copy or download the result and paste it into your destination Markdown file. It will now render as a proper GFM table.
Which text sources this tool can and can't recover
The deciding factor is whether columns are separated by pipes. Behavior verified against the repair function.
| Source shape | Recoverable here? | What to use |
|---|---|---|
Pipe-delimited rows, no separator (| a | b |) | Yes | This tool — adds the separator and aligns rows |
| Pipe-delimited but ragged columns | Yes | This tool — pads/trims to the header width |
| Space- or tab-aligned ASCII (no pipes) | No | CSV to Markdown table |
| Comma-separated values | No | CSV to Markdown table |
| JSON array of objects/rows | No | JSON to Markdown table |
HTML <table> markup | No | HTML to Markdown |
Common migration breakages and the fix
What pipe tables look like after a chat/email/PDF round-trip, and how the repair handles each.
| Symptom after extraction | Cause | Repair behavior |
|---|---|---|
| Table renders as plain text | No | --- | separator row survived the paste | Inserts a fresh separator under the first row |
| Columns shifted by one | A cell was dropped during extraction | Pads the short row with an empty cell |
| Trailing empty column | A stray | at end of line | Trims the overflow cell |
| Two separator lines | Both header+separator pasted twice | Drops the extra separator, keeps one |
| A value split into two columns | Literal | inside the value | Not fixable — escape/rewrite the value first |
Tier limits for Markdown Table Repair
Markdown-family limits. The character limit is separate from byte size — a long export can hit charLimit before the file-size cap.
| Tier | Max file size | Max characters | Files per run |
|---|---|---|---|
| Free | 1 MB | 500,000 | 1 |
| Pro | 10 MB | 5,000,000 | 10 |
| Pro-media | 50 MB | 20,000,000 | 50 |
| Developer | 500 MB | Unlimited | Unlimited |
Cookbook
Real pipe-table text pulled from migrations. Each block shows the extracted source on top and the tool's exact GFM output below.
Slack/chat paste missing the separator
A table pasted from a chat thread kept its pipes but lost the dashed separator. The tool restores it.
Before: | Plan | Seats | Price | | Free | 1 | 0 | | Team | 10 | 49 | After: | Plan | Seats | Price | | --- | --- | --- | | Free | 1 | 0 | | Team | 10 | 49 |
PDF extraction dropped a cell
Text extraction from a PDF lost a value, leaving a short row. The row is padded to match the header.
Before: | Region | Code | Tax | | --- | --- | --- | | EU | EU | | US | US | 0.0 | After: | Region | Code | Tax | | --- | --- | --- | | EU | EU | | | US | US | 0.0 |
Email paste with a doubled separator
Forwarding an email duplicated the header+separator block. The tool keeps one separator and aligns the rest.
Before: | Field | Value | | --- | --- | | --- | --- | | name | Ada | | role | Lead | After: | Field | Value | | --- | --- | | name | Ada | | role | Lead |
Space-aligned ASCII is NOT recovered here
A monospace ASCII table has no pipes between columns, so the tool can't see columns. Send it to the CSV converter instead.
Source (space-aligned — will NOT parse here): Name Age City Alice 30 NYC Bob 25 LA Use CSV to Markdown table after converting the spacing to commas, e.g.: Name,Age,City Alice,30,NYC Bob,25,LA
A value containing a literal pipe breaks the cell
A path or regex with a | in it is split as if it were a delimiter. Rewrite or escape the value at the source before repairing.
Before: | Pattern | Use | | --- | --- | | cat|dog | match either | After (the pattern split into two columns, surplus trimmed): | Pattern | Use | | --- | --- | | cat | dog | Fix: change the source value to `cat or dog` or wrap the whole line in a code fence before running.
Edge cases and what actually happens
Space- or tab-aligned ASCII table
Not parsedWith no pipes between columns there is nothing for the tool to split on, so the text is passed through as prose. Convert it to comma- or pipe-delimited form, or build the table with CSV to Markdown table.
Real header dropped during extraction
By designThe first pipe line becomes the header. If extraction lost the header, your first data row is promoted and given a separator. Reorder the source so the header line is first, then re-run.
Literal pipe inside a value
Splits the cellPaths like a|b, regexes, or table-of-options text containing | are split as delimiters — there is no escaping awareness. Rewrite the value, or wrap the line in a triple-backtick fence so it is preserved verbatim.
Multi-line cell from a wrapped paragraph
Split across rowsGFM tables are single-line per row. If a long cell wrapped onto a second line during extraction, the wrapped portion becomes its own (mis-shaped) row. Re-join the value onto one line in the source before running.
Row with too few cells
PaddedShort rows get empty cells appended to reach the header width — common when extraction silently dropped a blank value. Cells render as blank; no data is altered.
Row with too many cells
TrimmedOverflow trailing cells are dropped. If a stray pipe created the overflow this is exactly what you want; if real data was in the extra cell, widen the header first.
Table inside a fenced code block
PreservedA table pasted inside triple backticks during migration is treated as code and passed through unchanged — useful when you want to keep the raw extracted table verbatim alongside the repaired one.
Alignment hints in the source
Not preservedEven if the extracted text carried :---: alignment, the rebuilt separator is plain ---. Re-apply alignment by hand after the structure is repaired.
Export over your tier's char limit
RejectedFree allows 500,000 characters and 1 MB. Large chat or email exports can exceed the character limit — split the export or upgrade before running.
Frequently asked questions
My source is space-aligned, not pipe-separated — will this work?
No. The tool recognises columns by the | delimiter only. A monospace, space-aligned ASCII table has no pipes, so it is passed through as prose. Convert it to commas and use CSV to Markdown table instead.
Does it handle multi-line cells?
No. GFM tables are one line per row, and the tool processes line by line. A cell that wrapped onto a second line during extraction becomes its own broken row — re-join it onto one line in the source first.
Will it preserve per-cell alignment from the original?
There is no per-cell alignment in Markdown, and column alignment hints are not preserved — the separator is rebuilt as plain ---. Add column alignment (:---:) back to the output after repair if you need it.
What if a value contains a pipe character?
It is treated as a column delimiter and splits the cell — escaping (\|) and inline code spans are not respected. Rewrite the value (e.g. a or b instead of a|b) or fence the whole line so the tool leaves it untouched.
Can it convert CSV or JSON to a table?
No — those are separate converters. Use CSV to Markdown table for spreadsheet data and JSON to Markdown table for arrays of records. This tool only repairs existing pipe tables.
Are there options to configure how it parses the text?
No. The repair is a fixed transform with no settings — it always uses | as the delimiter, the first row as the header, and plain --- for the separator.
What if the extracted table lost its header row?
The first surviving pipe line is promoted to header and given a separator. If that was actually a data row, reorder the source so the real header is first, then re-run.
Does it touch code blocks in the pasted content?
Fenced code blocks (triple backticks) are passed through unchanged, so a raw table pasted inside a fence is preserved. Everything outside fences is treated as candidate table/prose lines.
Is my migration content uploaded anywhere?
No. The repair runs entirely in your browser. Exported content — which may include PII — never reaches a server. Only an anonymous usage counter is recorded for signed-in dashboard stats.
Can I repair tables from many exported files at once?
One input per run. Merge the files first with the Markdown merger, repair here, then split with the splitter if you need them separate again.
After repair, can I convert the table to HTML or a doc?
Yes. Once the table is valid GFM, send the file to Markdown to HTML or Markdown to DOCX for the destination format.
Why did some rows end up with empty cells after repair?
Because those rows had fewer pipe-delimited cells than the header, so the tool padded them to match. That usually means extraction dropped a value — fill the blanks in by hand after repair.
Privacy first
All Markdown processing runs locally in your browser using JavaScript. No file is ever uploaded to JAD Apps servers — only metadata counters are saved for signed-in dashboard stats.