Convert HTML to Markdown
Fast, accurate, and customizable. Paste your HTML, tweak the settings, and get clean Markdown instantly.
Why Choose Our Converter?
Production Ready
Trusted by 1,000+ projects with 3.5k+ GitHub stars.
Handles Complex HTML
Converts entire websites, nested elements, and tricky edge cases that break other converters.
Smart & Extensible
Built-in plugins for tables, strikethrough, and more. Easy to extend with custom rules.
Advanced HTML-to-Markdown Conversion
Our converter handles complex edge cases that other tools miss. See how it produces accurate, clean Markdown from any HTML input.
Heading
The converter can handle Headings from level <h1> to <h6> even with other elements inside.
<h2>Heading</h2>## Heading<h4>
<strong>Important</strong>
Heading
</h4>#### **Important** HeadingBold & Italic
Emphasis and strong formatting is supported – even intraword.
<p>
<strong>Bold</strong>
and
<em>Italic</em>
</p>**Bold** and *Italic*Bold & Italic with Nesting
Unnecessary nesting could generate too many * or _ delimiters. The converter reduces unnecessary nesting.
<b><b>Incredibly</b> <b>Bold</b></b>**Incredibly Bold**Bold & Italic with PunctuationPro
Notice the small difference? The dash has to be outside of the italic text.
<p>nitty-<em>gritty</em>-details</p>nitty-*gritty*-details<p>nitty<em>-gritty-</em>details</p>nitty-*gritty*-detailsUnordered List
Nested Lists (with the correct indentation) are also supported.
<ul>
<li>Simple List</li>
<li>
<p>Someone once said:</p>
<blockquote>
My famous quote
</blockquote>
<span>by someone</span>
</li>
</ul>- Simple List
- Someone once said:
> My famous quote
by someoneOrdered List
The start attribute is also respected for ordered lists.
<ol start="9">
<li>Nine</li>
<li>Ten</li>
<li>
Eleven
<ul>
<li>Nested</li>
</ul>
</li>
</ol>09. Nine
10. Ten
11. Eleven
- NestedBlockquote
A blockquote can also contain other elements. And blockquotes can event be nested inside each other.
<blockquote>
<h2>Heading</h2>
<ol>
<li>List</li>
<li>List</li>
</ol>
<blockquote>
<p>Another Quote</p>
<p>by someone</p>
</blockquote>
</blockquote>> ## Heading
>
> 1. List
> 2. List
>
> > Another Quote
> >
> > by someoneInline Code
The converter correctly treats the backtick character.
<p>
Output a message: <br/>
<code>console.log("hello")</code>
</p>Output a message:
`console.log("hello")`<code>with `` backticks</code>```with `` backticks```<code>`variable`</code>`` `variable` ``Code Block
<pre class="language-js"><code>
console.log("hello")
</code></pre>```js
console.log("hello")
```<pre class="language-go"><code>
<span class="token function">func</span>
</code></pre>```go
func
```<pre><code>
This ``
totally ``` works!
</code></pre>````
This ``
totally ``` works!
````Link
The converter supports relative and absolute links. Other elements inside are also supported.
<a href="/index.html">
<strong>Home</strong>
</a>[**Home**](/index.html)<a
href="/about"
title="title text"
>
About
</a>[About](/about "title text")Multiline Link
A markdown link can stretch onto multiple lines. For this a blank line has to be escaped.
<a href="/post">
<p>Line 1</p>
<p>Line 2</p>
<p>Line 3</p>
</a>[Line 1
\
Line 2
\
Line 3](/post)<a href="/post">
Line 1 <br/><br/>
Line 2 <br/>
Line 3 <br/>
</a>[Line 1
\
Line 2
Line 3](/post)Plugin: Strikethrough
Uses tildes to cross-out text similar to bold & italic.
<p>Does <s>not</s> work!</p>Does ~~not~~ work!Plugin: Table
Converts tables with support for alignment, rowspan and colspan.
<table>
<tr>
<td>A1</td>
<td>A2</td>
</tr>
<tr>
<td>B1</td>
<td>B2</td>
</tr>
</table>| | |
|----|----|
| A1 | A2 |
| B1 | B2 |<table>
<caption>The description</caption>
<thead>
<tr>
<th align="left">Left</th>
<th align="center">Center</th>
<th align="right">Right</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>Bold</strong></td>
<td><i>Italic</i></td>
<td><code>Code</code></td>
</tr>
</tbody>
</table>| Left | Center | Right |
|:---------|:--------:|-------:|
| **Bold** | *Italic* | `Code` |
The description<table>
<tr>
<td rowspan="2" colspan="2">
BIG CELL
</td>
<td>A1</td>
</tr>
<tr>
<td>B1</td>
</tr>
<tr>
<td>C1</td>
<td>C2</td>
<td>C3</td>
</tr>
</table>| | | |
|----------|----|----|
| BIG CELL | | A1 |
| | | B1 |
| C1 | C2 | C3 |Hard line breaks
There are different ways to convert <br/> tags. The converter also supports hard line breaks. Notice the two spaces at the end of the line.
<p>
Line 1<br/>
Line 2<br />
Line 3
</p>Line 1
Line 2
Line 3Escaping where necessary
Some characters would (accidentally) be recognized as markdown. The converter escapes these with a backlash — but only if necessary.
<h2># Heading #</h2>## # Heading \#<p># Heading</p>
<p>#hashtag</p>\# Heading
#hashtag<p>- List Item</p>
<p>Just a — dash</p>\- List Item
Just a — dashSwapping Nodes
It is invalid to have block-elements inside inline-elements. The converter then swaps the nodes.
<h2>
<a href="/">Headline</a>
</h2>## [Headline](/)<a href="/">
<h2>Headline</h2>
</a>## [Headline](/)Remove/Keep HTML
Choose to strip or retain specific HTML tags for ultimate control over the output.
<nav>Removed text</nav><article>
<h1>Heading</h1>
<strong>bold text</strong>
</article><article>
# Heading
**bold text**
</article>