Bulguritto

Free · Runs in your browser · No sign-up

HTML to Markdown Converter

Paste an HTML fragment or a whole page's source and get GitHub-flavoured Markdown back — headings, links, lists, code blocks and tables intact, page chrome left behind.

Just the article only matters when you paste a whole page’s source. It keeps the first <article> or <main> element and throws away the navigation, sidebar, cookie banner and footer around it. Untick it to convert the entire <body>. Either way, scripts, styles and SVG icons are dropped.

HTML

Markdown

Paste HTML on the left and the Markdown appears here.

Where does the Markdown go next?

Bulguritto keeps your notes as plain Markdown files on iPhone, iPad and Mac, synced and searchable — the same format this converter just handed you. Free.

What the converter actually does

HTML and Markdown describe the same small set of ideas — a heading is a heading, a list is a list — so most of a document translates without any loss. The converter above walks the parsed HTML tree and emits the Markdown equivalent of each node, using Turndown with the GitHub Flavored Markdown plugin. That plugin is the part that matters in practice: without it you get no tables, no strikethrough and no task lists, which is most of what people paste.

So <h2> becomes ##, <strong> becomes **bold**, <ul> becomes a bullet list, <blockquote> becomes >, <pre><code> becomes a fenced block, and <table> becomes a pipe table. Here is a fragment and what comes out of it:

<h2>Release notes</h2>
<p>Fixed the <a href="/bugs/41">sync bug</a> and <del>removed</del> the banner.</p>
<ul><li>Faster search</li><li>Dark mode</li></ul>
## Release notes

Fixed the [sync bug](/bugs/41) and ~~removed~~ the banner.

-   Faster search
-   Dark mode

Everything runs in your browser. The HTML is parsed by the same engine that renders this page, so malformed markup is repaired the way a browser would repair it — an unclosed <p> or a stray <b> will not break the conversion.

What converts cleanly, and what cannot

The rule is simple: semantics survive, presentation does not. Markdown has no vocabulary for how something looks, only for what it is. Tags that say what a thing is map one to one:

  • h1–h6, p, br, hr
  • ul, ol, li, including nested lists
  • a, img, blockquote, code, pre
  • strong, em, del, and table via GFM

Tags that only carry styling have nowhere to go. A <span style="color:#c00"> loses its colour and keeps its words. Nested <div> soup — the output of most page builders and email templates — collapses into bare paragraphs, which is usually what you wanted anyway. Class names, IDs, data attributes, inline CSS and custom elements are dropped. Iframes, embedded videos, forms and script-driven widgets vanish entirely, because there is no plain text left once the script is gone.

Two cases deserve a manual check. Layout tables — tables used for positioning rather than data, still common in newsletters — become real Markdown tables full of nonsense; delete them. And merged cells (colspan, rowspan) have no Markdown equivalent at all, so the grid is flattened and the alignment of the remaining cells is a guess.

Getting a page’s HTML

There are two ways, and they give you different things. View Source (Ctrl+U on Windows and Linux, Cmd+Option+U in Safari, or prefix the address with view-source:) shows the exact bytes the server sent. Inspect — right-click, Inspect, then right-click the element in the tree and choose Copy → Copy outer HTML — gives you the live DOM, after JavaScript has finished rewriting it.

On a React, Vue or Angular site, View Source is often an empty <div id="root"> and a bundle of scripts: there is no article in it to convert. Inspect is what you want there. On a server-rendered blog or documentation page the two are nearly identical, and View Source is quicker. Copying the outer HTML of the single element that holds the article is the cleanest input of all — you have done the trimming before the converter ever sees it.

Why scraped pages need “Just the article”

A modern page is maybe fifteen per cent article and eighty-five per cent furniture: a nav bar, a cookie notice, a newsletter box, a share rail, a related-posts grid, a fat footer of links. Convert all of it and you get two hundred lines of link soup wrapped around the paragraphs you actually wanted. The Just the article option keeps the first <article> or <main> element and drops the rest, which handles the large majority of sites, because those two tags are what content management systems emit. If a site uses neither, fall back to Inspect and copy the element yourself.

What to do with the Markdown next

Usually one of four things: commit it to a repository as documentation, paste it into a wiki or an issue, feed it to a language model as clean context, or file it in your notes. The third is increasingly the point — Markdown is dramatically cheaper in tokens than raw HTML, and models read it more reliably.

If the source is not a web page after all, the neighbouring converters take a different input and produce the same output: a PDF, a Word document, a CSV file or an Excel workbook. Going the other direction, Markdown to Word turns the result back into a .docx when somebody insists on one.

And if the answer is “my notes”, it is worth not needing a converter next time. Bulguritto stores every note as a plain .md file — not exported to Markdown on request, stored that way — synced across iPhone, iPad and Mac, free. Paste the output above into a note and it is already in the app’s native format: tables stay tables, code blocks stay code blocks, and the file remains readable by anything else you ever open it with.

Frequently asked questions

How do I convert HTML to Markdown?
Paste the HTML into the left-hand box. The Markdown appears on the right as you type — copy it, or download it as a .md file. It works with a fragment, a snippet copied out of a CMS, or an entire page's source.
Does it convert HTML tables to Markdown tables?
Yes. The converter runs GitHub Flavored Markdown rules, so <table> becomes a pipe table, <del> becomes strikethrough, and checkbox list items become task lists. A table with merged cells (colspan or rowspan) has no Markdown equivalent, so it is flattened — check those by hand.
Where do I get the HTML of a web page?
Either View Source (Ctrl+U, or Cmd+Option+U in Safari) to get the file the server sent, or right-click an element, choose Inspect, then Copy → Copy outer HTML to get that element after JavaScript has run. Use Inspect for anything rendered client-side; use View Source when the page is server-rendered and you want the whole document.
What does the 'Just the article' option do?
When you paste a full page, it keeps the first <article> or <main> element and discards everything around it — navigation, sidebars, cookie banners, related-posts rails and the footer. Untick it to convert the whole <body>. It has no effect on a fragment, because a fragment has no chrome to drop.
What gets lost in the conversion?
Anything Markdown cannot express: inline CSS, class names, colours, fonts, custom elements, <div> and <span> wrappers, layout tables, iframes and embedded widgets. Their text content survives; their presentation does not. Semantic tags — headings, paragraphs, lists, links, emphasis, blockquotes, code, images, tables — all map cleanly.
Is the HTML sent to a server?
No. The whole converter is on this page and runs in your browser, so nothing is uploaded, logged or stored. You can disconnect from the internet after the page loads and it keeps working — which also means you can paste HTML from an internal system safely.

More Markdown converters

All free, all running in your browser, none of them asking for an account.

Notes that are already Markdown.

No export step, no lock-in, no conversion tool needed next time. Free on iPhone, iPad and Mac.