No KYC — no ID, no selfie, no documents. Pay in crypto: BTC, USDT, USDC, ETH, SOL, LTC
Language: English
Get an API key

GET /read · 1 credit per page · from $0.07/1K pages

Web page to Markdown API: the main content of any URL, ready for a model

Pass a URL and get the article back as Markdown: headings, paragraphs, lists, tables and links kept; menus, cookie banners, ads and footers removed. With the page's title, author, date and language.

Last updated: · 6 min read

Quick answer

Which API converts a web page into clean Markdown for an LLM?

A web page to Markdown API fetches a page, keeps its main content and returns it as Markdown. WebReaderAPI does it in one request: GET https://webreaderapi.com/api/v1/read?url=… returns the article with its headings, lists, tables and links, plus title, author, date and word count, for one credit per page from $0.07/1K pages as of October 2026. robots.txt is respected. No KYC; pay in crypto.

URL to Markdown API at a glance

EndpointGET https://webreaderapi.com/api/v1/read?url=… (or POST with a JSON body)
OutputClean Markdown of the page's main content (or plain text, or cleaned HTML), with title, description, author, publication date, language and word count; links and images on request
JavaScriptJavaScript rendering in a headless browser when the page needs it (render=auto), or always, or never
Billing1 credit = 1 page read without a browser; 2 credits when the page needs a browser to render JavaScript. A request that fails, or that a site's robots.txt refuses, is not charged
Token budgetmax_chars cuts the Markdown to the length your model can take
robots.txtWe respect robots.txt: our crawler identifies itself as WebReaderAPI, follows the rules written for it or for all robots, and does not read a page that a site disallows. Refused pages are not charged
Price$3.75 for 10,000 pages, $21.75 for 100,000 pages, from $0.07/1K pages at 5,000,000 pages
PaymentBTC, USDT, USDC, ETH, SOL, LTC, from a $25 top-up; no KYC

Why convert web pages to Markdown before giving them to a model?

Markdown keeps the structure a model needs and drops the markup it does not. A typical article page carries navigation, scripts, tracking tags, cookie notices and related-post widgets around a few hundred words of text. Sent as raw HTML, most of the tokens you pay for are markup.

Markdown keeps headings as #, lists as -, tables as pipes and links as [text](url). A model can still see which sentence belongs to which section, quote the source link and split the text into chunks along its headings. The same text in plain prose loses that structure; the same text in HTML costs far more tokens.

What does the API keep, and what does it remove?

With main_content=true, the default, the API keeps the part of the page that a reader came for and removes the rest.

KeptRemoved
Title and headingsSite navigation and menus
Paragraphs, quotes and listsCookie and consent banners
Tables, as Markdown tablesAds and promoted widgets
Code blocks, with their language when shownSidebars and related-post lists
Links inside the textFooters and legal boilerplate
Images, only with include_images=trueShare buttons and comment forms

Set main_content=false to convert the whole page instead, for example a home page or a product listing where everything matters. Set format=text for plain text without Markdown, or format=html for cleaned HTML of the main content.

curl: one page as Markdown, cut to 20,000 characters
curl -G "https://webreaderapi.com/api/v1/read" \
  -H "Authorization: Bearer $WEBREADER_API_KEY" \
  --data-urlencode "url=https://example.com/blog/pour-over-coffee" \
  -d format=markdown -d max_chars=20000
Python: read a page and print its metadata and Markdown
import os

import requests

resp = requests.get(
    "https://webreaderapi.com/api/v1/read",
    headers={"Authorization": "Bearer " + os.environ["WEBREADER_API_KEY"]},
    params={"url": "https://example.com/blog/pour-over-coffee", "format": "markdown"},
    timeout=90,
)
resp.raise_for_status()
page = resp.json()
print(page["title"], "|", page.get("author"), "|", page.get("published_at"))
print(page["word_count"], "words,", page["credits_used"], "credit(s)")
print(page["markdown"][:500])

What about pages built with JavaScript?

Many pages send almost no text in their first HTML and build the content in the browser. With render=auto, the default, the API first reads the raw HTML; if it holds too little text, it opens the page in a headless browser and reads the result. The response says which one happened in rendered.

A page that needed the browser costs two credits instead of one. If you know a site always needs it, set render=true; if you only want what the server sends, set render=false and never pay the second credit.

What happens when a site does not want to be read?

We respect its choice and you are not charged. Our crawler identifies itself as WebReaderAPI and checks robots.txt before every read. A page disallowed for our token, or for all robots, returns 403 blocked_by_robots. A site that declares Content-Signal: ai-input=no returns 403 blocked_by_site_policy.

If the site refuses the request in another way, such as a 403 status, a challenge page or a login wall, you get 502 target_refused with the site's own status. If a site refuses our request, we return its answer: we never solve CAPTCHAs, log in to accounts, or try to get around a block or a paywall. Our crawler page explains all of this to site owners, with the exact User-Agent.

How many pages will my project need?

Count one credit per page, two for pages that need the browser. Some typical volumes:

  • An AI agent that reads 5 pages per task and runs 100 tasks a day reads about 15,000 pages a month: 50,000 pages ($14.25) last more than three months.
  • A RAG index of three documentation sites with 2,000 pages each is 6,000 pages, then a weekly refresh of changed pages.
  • A research corpus of 400,000 news and blog articles fits in 500,000 pages ($50).

Credits never expire, so a pack bought for a one-off crawl keeps its remaining value for later jobs.

How much does the URL to Markdown API cost?

10,000 pages cost $3.75, 100,000 pages cost $21.75 and 1,000,000 pages cost $74.25, as of October 2026. Failed pages and pages refused by robots.txt are free. See all packs.

Test

10,000 pages

$3.75

$0.38/1K pages

  • Try it on your real URLs
  • Same API as the biggest pack
  • Credits never expire
Choose 10,000 pages

Starter

50,000 pages

$14.25

$0.28/1K pages

  • An AI agent or a RAG prototype
  • Crawl a documentation site
  • Credits never expire
Choose 50,000 pages

Build

100,000 pages

$21.75

$0.22/1K pages

  • Production agents and RAG pipelines
  • Batch and crawl jobs
  • Credits never expire
Choose 100,000 pages

Volume

1,000,000 pages

$74.25

$0.07/1K pages

  • Datasets and research corpora
  • Higher concurrency on request
  • Credits never expire
Choose 1,000,000 pages

In every plan: Main-content extraction · JavaScript rendering when needed · Failed and refused pages not charged · Credits never expire

URL to Markdown API: common questions

Does the Markdown keep tables and code blocks?

Yes. HTML tables become Markdown tables, and code blocks stay fenced, with their language when the page marks it. Very complex tables, such as ones with merged cells, are flattened row by row.

Can I get the whole page instead of the article?

Yes. Set main_content=false and the API converts everything on the page, including navigation and footer. This suits home pages, category pages and product listings, where the main-content detector would drop useful parts.

How do I keep pages within my model's context window?

Use max_chars, between 1,000 and 500,000 characters, to cut the Markdown at a set length. The word_count field tells you how long the full article was, so your agent can decide whether to read more.

Can it read pages behind a login or a paywall?

No. WebReaderAPI reads public pages only. It never logs in to accounts and never tries to get around a paywall or a block; such pages return the site's refusal and are not charged.

Do I need an ID or a card to get a key?

No. WebReaderAPI asks for no ID, no selfie, no company documents and no card. Account-number login; email is optional. You top up from $25 in BTC, USDT, USDC, ETH, SOL, LTC.

From $0.07/1K pages · no KYC

Get an API key