Skip to main content

Confirm

Are you sure?

Glossary

Markdown for LLMs

The same page, a fraction of the tokens, with its headings intact.

By · Last updated: September 2026

TL;DR

Markdown for LLMs is the practice of converting a web page's HTML into Markdown before giving it to a language model. Markdown keeps the structure a model uses — headings, lists, links, tables — and drops the markup, scripts and styling that cost tokens and carry no meaning.

Free plan, no credit card. 1,000 credits a month.

How it works

Why Markdown

A web page's HTML is mostly not content: attributes, class names, inline scripts, SVG paths, tracking pixels. Sent to a model it spends the context window on noise. Plain text goes too far the other way — it loses which line was a heading and which words were a link. Markdown is the middle: # for headings, - for lists, [text](url) for links, pipes for tables. Models read it fluently and it keeps the boundaries that chunking relies on.

In practice

Not all conversions are equal

Converting HTML tag by tag is easy. Deciding what the content is is not: navigation, cookie banners, related-post lists and hidden menus are all in the DOM. Two numbers describe a conversion — how much of the text a visitor sees it keeps (coverage), and how much of its output is text the visitor never saw (leak). Measured on 33 pages:

StrategyCoverage of visible textOutput the visitor never saw
URLpipe /markdown (deterministic DOM walk)87.2%11.0%
Readability (what Jina Reader runs)88.2%21.3%
Selector blocklist (Firecrawl's approach)85.8%17.0%
A language model doing the conversion79.0%22.0%

The model-based conversion was also the slowest and the only one with a per-page cost: about $0.0025 and 39 seconds a page, against $0 and around 20 ms for the DOM walk.

URLpipe

Markdown from URLpipe

/markdown renders the page in real Chrome, then walks the rendered DOM to Markdown — no model involved, so the same page always produces the same output and links come back absolute. It costs 1 credit. Add page_options.block_cookie_banners and remove_selectors to take out what you know you don't want.

A page, ready for a prompt
curl -X POST https://urlpipe.dev/markdown \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"url": "https://example.com/blog/launch", "sync": true, "page_options": {"block_cookie_banners": true}}'

Its limit, stated plainly: the conversion reads the DOM, not the stylesheets, so text a page hides with CSS alone can leak into the output. The HTML to Markdown for LLMs guide goes further.

FAQ

Frequently asked questions

Is Markdown better than HTML for LLMs?
For reading content, yes: it keeps headings, lists, links and tables in far fewer tokens. Keep HTML when the task is about the markup itself — extracting attributes, forms or structured data.
Should an LLM convert HTML to Markdown?
It can, but in our measurement it was slower, cost money per page, covered less of the visible text and leaked more hidden text than a deterministic conversion.
Why is there navigation text in my Markdown?
The converter kept page chrome it couldn't tell from content. Remove known elements with selectors, or use a converter that drops navigation and hidden text.

See it on your own pages.

Free plan, no card. Confirm your email and your API key is live — you'll be making real requests in minutes.