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

HTML
<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>
Markdown
## Setup

Install with `npm i`, then run [the docs](/docs).

- **Fast**
- Free

Table example

HTML
<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>
Markdown
| 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.