A Markdown table parser
The parser walks line by line and keeps any line containing a `|` that splits into at least 2 cells. Both Markdown styles work: leading-pipe GFM (`| col | col |`) and no-outer-pipe (`col | col`). The separator row - dashes, colons, pipes, and spaces only (`|---|---|`, `---|---`, `|:---:|---:|`) - is detected by regex and discarded automatically. Everything else is split on `|`, outer pipes stripped, and each cell trimmed.
Output mode shapes what you get. Rows (default) joins every row's cells with the Row join string (defaults to ` | `), one line per row. First column pulls only the leftmost cell from each row - useful when the first column is an ID or name. Cells flattens every cell into its own output line, losing row structure but good for a total value inventory.
Skip header (off by default) drops the first data row after the separator strip - turn it on when the first row is a header you do not want as data. Trim + Dedupe run as the standard post-processing. The min-2-cells guard means a prose line with a single stray `|` does not get swept in as a fake table row, but prose with multiple pipes (rare) can still slip through - strip surrounding prose first for best results.
How to use convert a markdown table to a list
- 1Paste your Markdown table into the input panel
- 2Pick Output mode: Rows (default), First column only, or Flatten every cell
- 3Set Row join to change the separator used when joining cells (default ` | `)
- 4Toggle Skip header to drop the first data row if it is a header
- 5Toggle Trim + Dedupe for standard post-processing
Keyboard shortcuts
Drive ListShift without touching the mouse.
What this parser actually does
Three output modes, automatic separator-row handling.
Pipe-based row detection, both table styles
A line is treated as a table row if it contains `|` and splits into at least 2 cells. That handles leading-pipe GFM (`| col | col |`) AND no-outer-pipe style (`col | col`) in one pass. Headings, blank lines, and surrounding prose are dropped because they have no pipe or only one cell.
Automatic separator-row detection
The divider row - composed only of dashes, colons, pipes, and whitespace (`|---|---|`, `---|---`, `|:---:|---:|`) - is matched by regex (`^[\s:|-]+$`) and dropped automatically. You do not have to manually strip it. All three alignment variants (left, right, center) are recognised.
Three output modes
Rows joins each row's cells with your Row join string (one line per row). First column pulls only column 0 (useful for IDs or names). Cells flattens every cell into its own output line, producing N items per row.
Skip header for data-only output
After the separator row is dropped, the next row is your header. Skip header drops that too, so the output is pure data. Off by default because users often want the header row as the first item.
Trim + Dedupe post-processing
Cells are individually trimmed during parsing. The Trim toggle controls trimming on the final joined items; Dedupe drops duplicates case-insensitively after everything else.
Worked example
Default output: three data rows, each joined with ` | `. Header row kept (Skip header = off).
| Name | Age | |------|-----| | Alice | 30 | | Bob | 25 | | Carol | 42 |
Name | Age Alice | 30 Bob | 25 Carol | 42
Settings reference
How each option shapes the parsed list using the sample above.
| Setting | What it does | Effect on the sample |
|---|---|---|
| Output: Rows (default) | Each row's cells joined with the Row join string | Four lines, one per row (header + 3 data) |
| Output: First column only | Only column 0 from each row emitted | `Name`, `Alice`, `Bob`, `Carol` |
| Output: Flatten every cell | Every cell becomes its own line | Eight lines: `Name`, `Age`, `Alice`, `30`, `Bob`, `25`, `Carol`, `42` |
| Row join: `, ` (comma-space) | Alternate Rows-mode separator | `Name, Age` / `Alice, 30` / ... |
| Skip header: on | Drops the first data row after the separator | Header `Name | Age` removed from output |
| Separator row (automatic) | `|---|---|` or `---|---` divider detected and dropped | Never appears in the output regardless of table style |