HTML to Markdown Converter
How to Use
Paste or type HTML into the input area. The converter walks the DOM and emits Markdown in real time. Common elements — headings, paragraphs, emphasis, links, images, ordered and unordered lists (including nested), blockquotes, code blocks with language hints, horizontal rules, and tables — are all translated to their Markdown equivalents. Press Copy to grab the output.
Why Convert HTML to Markdown
Markdown is a compact, human-readable text format that is easier to review, diff, and hand-edit than HTML. Converting existing HTML content to Markdown is common when migrating a blog to a static site generator, preparing content for GitHub README files, cleaning up WYSIWYG editor output before committing it to a docs repo, or producing plain-text versions of web pages for note-taking.
Supported Elements
Headings (h1-h6), paragraphs, strong and emphasis, inline code, code blocks (with language class), links with titles, images with alt and title, ordered and unordered lists (with nesting), blockquotes, horizontal rules, tables, and line breaks are converted. Unknown elements fall through as plain text — no script or style blocks are kept. The conversion uses the browser's built-in DOMParser, so it works offline and never sends your HTML anywhere.
Common Use Cases
- Migrating legacy HTML blog posts into a static site generator that expects Markdown (Hugo, Jekyll, Astro).
- Cleaning up WYSIWYG editor output before committing it to a Git-based docs repository.
- Turning a web article's HTML into Markdown for note-taking apps like Obsidian or Bear.
- Producing README snippets from HTML tutorials.
- Round-tripping content through Markdown to strip inline styles and leftover editor markup.
Tips
- Paste the inner HTML (contents of <body>) — the tool wraps it automatically.
- Tables must have <th> cells in a <tr> inside <thead>, or the first row is treated as the header.
- Fenced code blocks use the language class hint: <code class="language-js"> becomes ```js.
- Inline styles and scripts are dropped — only semantic elements are preserved.
- For HTML fragments without a root element, the tool still works; invalid HTML is parsed lenient-mode by the browser.
Privacy
All HTML parsing happens in your browser. Your input is never sent to any server or stored anywhere.