Back to Tools

Html To Markdown

My tools
No tools yet

Loading...

Convert HTML to Markdown online (paste source, live output)

  1. 1

    Paste HTML

    Paste an HTML fragment or page source into the input (copy from view-source or an element's outerHTML in devtools), or press Example to see a compound structure.

  2. 2

    Pick options

    Choose the bullet and emphasis style to match your target editor; turn off keep-images or GFM tables when you want plain text forms — the output updates live.

  3. 3

    Copy the Markdown

    One-click copy into Notion/Obsidian/static blogs; to preview how the Markdown renders, use the Markdown Reader tool in the opposite direction.

Features Overview

HTML to Markdown converter online: turn HTML fragments or page source into Markdown, with headings, nested lists (ordered start numbers kept), GFM tables (alignment mapping), code blocks (language extraction), task lists, images and links, and emphasis — syntax characters escaped by position and code fences auto-upgraded. All local.

Tool Description

Free online HTML to Markdown converter. Paste source for live conversion: headings, emphasis, links and images, nested lists with ordered start numbers, GFM tables with alignment, code blocks with language extraction, task lists — thorough escaping, fence auto-upgrade, all local.

Last updated

Capabilities Checklist

  • Full tag coverage: h1-h6 headings, strong/em/del/code emphasis, links, images (optional), pre code blocks (language pulled from language-xxx classes), blockquotes, hr, and definition-list approximation — enough for nearly everything you paste.
  • Lists, faithfully: ul/ol nested to any depth with two-space indentation, ordered lists keep their start number, and task-list checkboxes (a checkbox as the list item's first element) become - [x] / - [ ].
  • GFM tables: header row plus alignment row (HTML align attribute mapped to :---/:---:/---:), with a toggle to degrade to line-per-row cell text; pipes inside cells are escaped.
  • Thorough escaping: Markdown syntax characters escaped by position (underscores inside snake_case kept), leading #/-/1. characters escaped to prevent mis-rendering, and code fences upgrade to four backticks when the content itself contains three.
  • Configurable: list bullet (-/*/+), emphasis style (*/_), keep-images, and GFM-tables toggles; paste converts live, nothing uploaded (DOMParser lazy parsing, scripts never run).

User feedback

Your feedback will be reviewed (and redacted if needed) before it appears publicly. Please do not include emails, passwords, or other personal information.

Your feedback helps us do better ❤️

Related Tools

Related Guides

Frequently Asked Questions

Which HTML elements does the converter support?
Headings h1-h6, paragraphs, strong/b, em/i, del/s, inline code, pre blocks (language-xxx extraction), links, images, ul/ol nested lists (ordered start kept), task-list checkboxes, GFM tables, blockquotes, hr, and a definition-list approximation. Script/style/iframe/svg/button and form elements are dropped for safety; wrapper tags like div/section/span keep only their content; inline styles and class/id are not kept.
What are the escaping rules during conversion?
Markdown syntax characters (backslash, asterisk, brackets, underscores, backticks) are escaped as needed at text positions, with underscores inside snake_case kept; leading #, >, +, -, digit-dot, and ! get extra escaping so they don't render as headings or lists; a left angle bracket that could form a tag is emitted as an entity; pipes in table cells escape to \|; pre/code content is never escaped, but when it contains triple backticks the fence upgrades to four or more.
When is a checkbox treated as a task-list item?
Only when the list item's first element child is an input[type=checkbox] — it becomes - [x] or - [ ] (checked state from the checked attribute); checkboxes elsewhere are dropped as form controls with their text kept. Ordered numbering derives from the ol start attribute plus the index; only consecutive decimal numbering is supported (type=a/i roman styles are not).
What does the output look like with GFM tables turned off?
Tables degrade to line-per-row cell text (cells joined by a spaced pipe), without the header row or column alignment; keep the toggle on for GFM table output (header + alignment row + data rows). Alignment mapping reads the HTML align attribute — modern pages usually style alignment via CSS classes, which are not preserved.
Does pasted HTML execute in the browser?
No. Parsing uses DOMParser's inert document (scripts never run, no resources load), script/style/iframe elements are dropped during conversion, and image URLs are emitted as text only. The conversion is fully local — nothing is sent anywhere.