Your data is never sent to a server or stored anywhere. All processing happens in your browser.

HTML to Markdown Converter

Markdown output
 

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.