HTML to Markdown Converter
Convert HTML into clean Markdown, preserving structure and formatting.
About this tool
Paste HTML — a snippet, an article, an exported web page — and convert it to clean Markdown, preserving headings, bold/italic, links, images, lists, blockquotes, code blocks, and GitHub-Flavored Markdown extras like tables, task lists, and strikethrough. Runs entirely in your browser using Turndown plus its GFM plugin.
Nothing is uploaded — the HTML is parsed and converted locally, and never leaves your device.
Example
<h2>Setup</h2>
<p>Install with <code>npm i</code>, then run
<a href="/docs">the docs</a>.</p>
<ul>
<li><strong>Fast</strong></li>
<li>Free</li>
</ul> ## Setup
Install with `npm i`, then run [the docs](/docs).
- **Fast**
- Free Table example
<table>
<thead>
<tr><th>Plan</th><th>Price</th></tr>
</thead>
<tbody>
<tr><td>Free</td><td>$0</td></tr>
<tr><td>Pro</td><td>$9</td></tr>
</tbody>
</table> | Plan | Price |
| --- | --- |
| Free | $0 |
| Pro | $9 | Table requirements. A Markdown pipe table needs a header row to be valid syntax at all, so only tables with one (a <thead>, or a first row made entirely of <th> cells) convert to table syntax — a table with no header row is left as raw HTML inside the Markdown output, since there's no clean Markdown equivalent for it. Column alignment (align="left/center/right" on a header cell) carries over as the matching :--/:-:/--: divider. A literal | inside a cell is escaped to \| so it isn't misread as an extra column, and a line break inside a cell collapses to a space, since Markdown table rows can't span multiple lines.
Frequently asked questions
- Does it handle tables?
- Yes — a table with a header row converts to standard Markdown pipe-table syntax, including column alignment. A table with no header row is kept as raw HTML in the output, since Markdown tables require one and there's no clean way to represent it otherwise.
- What happens to CSS styling, scripts, or embedded media?
- They're dropped — Markdown has no equivalent for inline styles, JavaScript, or embeds like videos/iframes. Only structural and text-formatting content carries over.
- Is my HTML uploaded anywhere?
- No — conversion happens entirely in your browser.
- Does it support strikethrough, like
<del>or<s>? - Yes — it converts to
~~text~~, the GitHub-Flavored Markdown syntax most renderers (GitHub, GitLab, Discord, and others) recognize. - Does it handle checkbox/task lists?
- Yes — a list item containing a checkbox input converts to
- [ ](unchecked) or- [x](checked), the GitHub-Flavored Markdown task list syntax. - What happens to a "|" character that appears inside a table cell?
- It's automatically escaped to
\|so a Markdown renderer reads it as a literal pipe character rather than the start of a new column.