Skip to content
100% local

HTML to Markdown converter

Turn simple HTML markup into Markdown syntax, right in your browser.

Input
Output

HTML to Markdown converter

Paste a chunk of HTML — copied from a page, exported from a CMS, or pulled out of an email template — and this tool rewrites the common tags into their Markdown equivalents. Headings become #, ##, up to ######, <strong> and <b> become **bold**, <em> and <i> become _italic_, <code> becomes backtick spans, and <a href> and <img> turn into [text](url) and ![alt](url). Paragraphs and list items are reflowed onto their own lines the way a Markdown file expects, and <br> tags become line breaks.

This is a lightweight, regex-based converter, not a full HTML parser — it works best on clean, simple markup: a blog post body, a documentation snippet, a formatted email. Deeply nested elements, malformed or unclosed tags, and unusual attribute ordering may not convert perfectly, since there is no DOM tree deciding what is nested inside what. For the tags it does recognize, attribute order does not matter — href and src are found wherever they sit on the opening tag — and both single and double quotes are handled. Unrecognized tags are simply stripped, so the output stays readable rather than leftover markup, and common HTML entities (&amp;, &lt;, &gt;, &quot;, &#39;, &apos;, &nbsp;) decode back into plain characters.

One simplification worth knowing: both <ul> and <ol> list items convert to a plain "-" bullet, since Markdown numbering is usually left to the renderer. And list items sitting directly against each other with no line break in the source will run together in the output — real-world markup, where each <li> sits on its own line, converts cleanly.

The conversion happens instantly as you type, entirely in your browser. Nothing you paste is uploaded, logged or sent anywhere — it never leaves your device.

FAQ

Does this handle complex or deeply nested HTML?
It is built for clean, simple markup rather than arbitrary web pages. It works well on typical blog posts, documentation snippets and formatted emails, but deeply nested, malformed or unusually structured HTML may not convert perfectly, since the tool uses pattern matching rather than a full HTML parser.
Why do both <ul> and <ol> items turn into "-" bullets?
The converter treats every list item the same way and always uses a dash, rather than trying to reconstruct numbered output. If you need numbered Markdown output, renumber it after converting, or your Markdown renderer likely does that automatically for dash lists inside a numbered context.
What happens to tags this tool does not recognize?
Any tag outside the supported set — headings, bold, italic, code, links, images, paragraphs, list items and line breaks — is simply removed, leaving the text content behind. This keeps the output readable even when the source has extra wrapper elements like <div> or <span>.
Does attribute order in a tag matter?
No. For links and images, the href and src attributes are found wherever they appear on the opening tag, so `<a target="_blank" href="...">` converts the same as `<a href="..." target="_blank">`. Both single and double quotes around attribute values are supported.
Is my text uploaded anywhere?
No — it never leaves your browser; everything runs locally on your device.