Home / Features / Scrape any page to Markdown
Clean text for LLMs and humans

Scrape any page to Markdown

One URL in, clean Markdown out. Navigation, cookie banners and footers stripped, headings and links kept.

LLMs do better with Markdown than with raw HTML. HTML burns tokens on div soup, inline styles and tracking scripts. Markdown carries the same meaning in a fraction of the space.

The scrape call fetches a URL, renders it, finds the main content and converts it to Markdown. Navigation menus, cookie banners, footers and sidebars are left out, which is the part people usually spend a week tuning.

What stays

Headings keep their levels. Lists stay lists. Tables become Markdown tables. Links keep their targets so an agent can follow them. Code blocks stay code blocks. That structure is what lets a model answer “what does section 3 say” without rereading the whole page.

Why not write your own

You can. A fetch plus an HTML-to-Markdown library gets you 70 percent of the way. The rest is where the time goes: pages that render client-side, sites that block bots, content hidden in tabs, boilerplate that differs per template. We run that so you do not maintain it.

Where it fits

Pricing

A scrape costs one page. The Free plan includes 100 a month, and Starter is 5,000 for $19. If you want a whole site once, skip the account: run the tool on the home page and buy an export from $9.

What a good conversion looks like

Open the result next to the page and check four things. The title and headings should match the visible outline of the page. The body text should be complete, with no paragraph missing from the middle. Links should still point somewhere useful, and images should either carry their alt text or be left out cleanly. If a page matches on those four, it is ready for whatever comes next. If it does not, the page probably uses an unusual layout, and it is worth looking at that page by hand before you run a batch of similar ones.

Chunking Markdown for retrieval

The reason people convert to Markdown is usually retrieval, so it is worth saying how to chunk it. Split on headings first. A section under a second-level heading is usually a coherent unit, with a title that tells you what it is about. If a section is too long, split it on paragraphs, and carry the heading text into every chunk so the chunk still makes sense when it is read alone. Store the page URL and the heading path with each chunk. Those two fields are what let you show a source and what let you re-crawl a page later and replace only the chunks that changed.

Pages that need extra thought

Not every page is an article. A pricing table converts to a Markdown table, which models read well, but a page built entirely from images will convert to very little text. A single-page app that loads its content after a login will return the login screen. A page with the same boilerplate in several languages will convert all of them. None of these are surprises once you have seen them, and a quick sample of your own URLs will show you which ones you have.

Turning one page into many

A single scrape is the building block. Run it on a list of URLs you already have, such as the pages in a sitemap, or hand the whole job to the crawl call when you do not have the list. Both return the same Markdown, so the code that consumes it does not care which route produced it.

Respecting the source

Only convert pages you may read. Public content is fine for research, migration of your own site and building tools for yourself. Do not republish someone else’s text as your own, and check the acceptable use policy if you are not sure.

Questions

Does it keep tables and code blocks?

Yes. Structure such as headings, lists, tables and code is kept so the Markdown still reads like the page.

What about pages that need JavaScript?

The page is rendered before extraction, so client-side content is included.

Can I get a whole site at once?

Use the crawl endpoint, or buy a one-time export from the home page tool.

Start with 100 free pages a month

No card. All endpoints. Add the MCP server when your agent needs it.