Free developer tools

HTML to Markdown Converter

Paste the HTML of a page and read it back as clean Markdown, with headings, links, lists, tables and code blocks kept and the navigation, footers and cookie banners left out. The conversion runs in your browser: nothing you paste is uploaded and no URL is fetched.

Options

Used only to rewrite links like /about as full addresses. It is never fetched.

Markdown

482 characters from 1,433 of HTML
# Restocking the Workshop

Three things changed this month: **prices**, *lead times* and the [returns policy](/blog/returns).

## New stock

| Item | Status | Ships in |
| --- | --- | --- |
| Bench vise | In stock | 2 days |
| Chisel set | Back-ordered | 3 weeks |

## Checking stock from a script

```python
import requests
r = requests.get("https://example.com/api/stock", timeout=10)
print(r.json()["items"])
```

- Orders before noon ship the same day
- Returns: 30 days, unused

Page title found: Restocking the Workshop | Example Tools Blog

Want this from a URL, with JavaScript rendered? Node4 is building a Scrape API that will take a URL and return Markdown, HTML or a screenshot. It is in development and not available yet. Join the waitlist

What each element becomes

HTMLMarkdown
<h1> to <h6># to ###### headings
<p>, <br>Blank-line paragraphs, hard line breaks
<strong>, <em>, <del>**bold**, *italic*, ~~strikethrough~~
<a href>[text](url "title"), relative URLs resolved if you give a base URL
<img>![alt](src); data: images become their alt text
<ul>, <ol start>Nested - and 1. lists, numbered from the start attribute
<pre><code class="language-x">Fenced code block tagged with its language
<code>Inline code, with a longer fence if the code holds backticks
<table>GitHub-flavored pipe table, header row first
<blockquote>> quoted blocks, nested content kept

Scripts, styles, forms, iframes, SVG and other embeds are always dropped. Text is escaped only where a character would change the formatting, so a variable like user_id stays readable.

Where this converter stops

  • JavaScript is not run, so content a page builds in the browser after load is not in pasted source.
  • Cells that span rows are written once; colspan is padded with empty cells.
  • Iframes, SVG, canvas, forms and embedded media are dropped.
  • CSS is ignored, so text hidden by a stylesheet (rather than by the hidden attribute or aria-hidden) is kept.

Converting pages in your own code

For more than a few pages, do the same job in a script: fetch, extract the main content, convert, then chunk for retrieval. The Python guide to converting web pages to Markdown for an LLM walks through each step with runnable code, including JavaScript-rendered pages. At volume, sites start refusing a single address, which is where Node4's rotating datacenter proxies fit: each new connection can leave from a different exit. If you are deciding between running that code and calling a managed service, scraping API or proxies compares the two.

Questions

Is the HTML I paste sent anywhere?

No. The conversion runs in your browser, in this page's own JavaScript. Nothing you paste is uploaded, and no link or image in it is requested.

Can I convert a URL instead of pasted HTML?

Not with this page. It never fetches a URL, by design. To convert live pages from your own code, the Python guide linked above fetches through a proxy and converts the result. A Node4 Scrape API that takes a URL and returns Markdown is in development, and the waitlist is open.

Why is my converted page empty or missing its main text?

Many sites build their content with JavaScript after the page loads, so the HTML source holds only an empty shell. Copy the rendered HTML from your browser's developer tools (the Elements panel, then copy outerHTML on the html element) instead of using View Source.

What does main content only remove?

Navigation, site headers and footers, asides, hidden elements, and blocks whose class or id names a cookie banner, share bar, newsletter box, sidebar or similar. It keeps the main element, or the largest article when there is no main element. Turn it off to convert everything.

Is the output good enough for an LLM or RAG pipeline?

It keeps headings, lists, tables, links and code blocks, which are the structure a chunker and a model use. Check a few pages from each site by eye, because no heuristic picks the main content correctly on every layout.

The infrastructure behind these tools

Need proxies behind your code?

Node4 sells datacenter, rotating and residential proxies over HTTP(S), with SOCKS5 on paid plans. Datacenter and rotating exits are in the US, Italy and Spain; residential exits cover 170+ countries. Start with free proxies, no card required.