Sometimes you have HTML and need Markdown — pulling text out of a CMS export, migrating a site to a static site generator, archiving a web page in a portable format. The reverse-direction conversion is what turndown does, and this tool wraps it with a configurable UI so you control the output style.
The conversion is lossy in places (HTML is more expressive than Markdown — there’s no Markdown for <details> or <aside> for example), but for the common subset of formatting (headings, paragraphs, lists, code, links, emphasis), the round-trip is clean.
How turndown works
turndown walks the HTML tree element by element and emits the equivalent Markdown. Each tag has a rule: <h1> becomes # , <ul>/<li> become - , <a> becomes [text](url), and so on. Inline elements (<em>, <strong>, <code>) get inline markdown delimiters; block elements get blank lines between them.
Tags that have no markdown equivalent are either dropped (with their content preserved as text) or left as inline HTML — turndown is conservative, so unknown tags survive into the output.
The style options
Heading style — ATX (# H1) or setext (H1\n===). ATX is the modern default; setext only works for H1/H2.
Bullet list marker — -, *, or +. All three are equivalent in CommonMark; pick by your style guide.
Code block style — fenced (```) or indented (4-space). Fenced supports language tags for syntax highlighting; indented is the older CommonMark-only style.
Italic and bold delimiters — * vs _ for italic, ** vs __ for bold. Functionally equivalent; pick by readability preference.
Link style — inlined ([text](url) next to the text) or referenced ([text][1] with [1]: url footnotes). Referenced is cleaner for documents with many links to the same URL or for very long URLs that disrupt readability.
Example: archiving a web article as Markdown
You found an article you want to keep. View source, copy the <article> block, paste here. Out comes clean markdown — headings, paragraphs, lists, code blocks. Save as .md and you have a portable, future-proof archive.
Example: importing CMS content into a static site generator
Migrating from a CMS to a Markdown-based static site generator (Astro, Hugo, Jekyll). The CMS exports HTML; the SSG wants Markdown front matter + body. Convert each page’s body HTML through this tool, paste into the new SSG’s content collection.
Example: cleaning up rich-text-editor output
Your team writes drafts in a rich-text editor that exports HTML with inline styles, <font> tags, <span> wrappers — visually fine, structurally messy. Convert through here and you get clean semantic markdown without the wrapper noise. Paste into a markdown-based system (a dev wiki, a markdown-aware Notion-like tool, GitHub Issues) for the rest of the lifecycle.
Common mistakes
Forgetting that markdown is not HTML’s full superset. HTML constructs without Markdown equivalents — colspans, custom IDs, attributes — get either dropped or left as inline HTML. If your output has stray <span> or <div> tags surviving, that’s why; the source HTML used a feature Markdown can’t represent.
Pasting full pages with <head> content. The converter handles <html>/<head>/<body> gracefully (drops the <head> and converts the <body>) but the result includes everything in the body, including footers, navs, and ads. Trim to just the article you want before converting, or strip it from the output afterwards.
Expecting CSS to convert. Markdown has no styling syntax — no font, no color, no margin. CSS in the source HTML is dropped entirely. The output is structural markdown only.
What this tool does not do
It does not preserve inline styles, custom HTML attributes (data-*, id, class), or layout-only wrappers. The output is structural markdown — headings, lists, links, emphasis — not a visual reproduction.
It does not handle images by downloading them; an <img src="..."> becomes  with the original src URL. The image itself stays where it was.
It does not auto-detect Markdown extensions in the source; output is pure CommonMark + GFM. If your HTML contains LaTeX-rendered math, you get the rendered text but not a $$...$$ block. For the reverse direction, the Markdown to HTML converter is the companion; to eyeball the resulting markdown without going all the way to HTML, the live markdown preview renders it side-by-side.