Skip to content

Convert HTML to Markdown online

Convert HTML into clean Markdown with control over heading style, bullet markers, code fences, link style and GitHub-flavoured tables.

  • Runs in your browser
  • Files are never uploaded
  • Free, no account
Markdown style
Turndown options, applied live as you change them.

Off leaves <table> markup untouched.

Ignores <head> when you paste a whole page.

HTML input

Markdown output

How to convert HTML to Markdown

  1. Paste the HTML — a fragment or a whole page — or drop an .html file.
  2. Leave “Body only” on so the <head> and its scripts and styles are ignored.
  3. Tune the style options to match your project’s Markdown conventions.
  4. Copy or download the .md. The conversion re-runs the moment you change an option.

Style options and what they produce

Option Choices Output
Heading style ATX / setext ## Title or Title with --- underneath
Bullet marker - / * / + The character used for every unordered item
Code blocks Fenced / indented Triple backticks or four-space indentation
Fence characters ``` / ~~~ Tildes help when the code itself contains backticks
Emphasis _ / * and ** / __ Some linters mandate one; underscores are the common default
Link style Inline / reference [text](url) or [text][1] with URLs collected at the end
Horizontal rule --- / *** / ___ All render identically; pick what your linter wants

Tables, task lists and strikethrough

Plain Markdown has none of these; GitHub-flavoured Markdown has all three, and each is a separate toggle here. A <table> becomes a pipe table with the first row as the header and align attributes translated into the divider row. A list item whose first child is a checkbox becomes - [x] or - [ ]. <del> and <s> become ~~text~~. Turn any of them off when the destination only understands CommonMark.

Why some HTML stays as HTML

Markdown is a small language. It has no syntax for a <details> disclosure, a definition list, a superscript or a cell that spans two columns. Rather than throwing that content away, the converter passes those elements through as inline HTML — which is legal inside a Markdown document and renders correctly nearly everywhere. If you need strictly plain Markdown, remove those elements from the source first.

Pasting a whole web page

With “Body only” enabled the input is parsed as a document and only the body content is converted, so the title, meta tags, inline styles and analytics snippets are ignored. Two caveats worth knowing:

  • View-source is not what you see. Content injected by JavaScript is not in the HTML you copied, so it will not appear in the Markdown. Copy from the browser’s element inspector instead.
  • Navigation comes along too. Menus, cookie banners and footers are body content. Paste just the <article> or <main> element for a clean result.

Common uses

  • Migrating a CMS or blog export into Markdown files for a static site.
  • Turning a rich-text email or a Google Doc export into repository documentation.
  • Cleaning pasted rich text down to plain structural markup before committing it.
  • Round-tripping: edit in Markdown, publish as HTML with Markdown to HTML.

Runs entirely in your browser

Turndown and the browser’s own HTML parser do the work in this tab. Nothing is uploaded, so draft posts, intranet pages and client documents stay on your machine — and the tool keeps working offline.

Questions

Can I paste a whole web page?

Yes. With “Body only” on, everything in <head> — titles, meta tags, scripts and styles — is ignored and only the visible body content is converted.

Are HTML tables converted?

Yes, into GitHub-flavoured Markdown tables. The first row becomes the header, align attributes become alignment colons, and cells containing line breaks use <br>.

Why is some markup left as raw HTML?

Markdown cannot express every construct. Elements with no Markdown equivalent are passed through as HTML so the meaning survives, which is valid inside Markdown documents.

What is the difference between inline and reference links?

Inline puts the URL next to the text as [text](url). Reference style writes [text][1] and collects the URLs at the bottom, which keeps long prose much easier to read.