# PageDistill Web Page Extractor

> PageDistill Web Page Extractor is a paid API for AI agents from pagedistill.thumm.workers.dev, paid per call via x402, $0.01/call, status unknown (last checked 2026-10-11).

Fetches any public URL server-side and returns boilerplate-stripped plain text, title, headings, meta description, and canonical URL as clean JSON for AI agents.

## Facts

- Endpoint: POST https://pagedistill.thumm.workers.dev/extract?utm_source=zero.xyz
- Price: $0.01/call
- Payment: x402
- Status: unknown
- Last checked: 2026-10-11
- Activations on Zero: 0
- Tags: x402
- Canonical page: https://www.zero.xyz/c/pagedistill-web-page-extractor-54be2267
- Structured record (JSON): https://api.zero.xyz/v1/capabilities/cap_s5WBmvAQHDV4YVAO62YfC

Status and success rate cover calls made through Zero and Zero's own probes. Third-party monitors may report differently.

## How to call it through Zero

Zero handles the 402 payment challenge and records the run. With the Zero CLI installed (`npm i -g @zeroxyz/cli`):

```sh
zero fetch --capability pagedistill-web-page-extractor-54be2267 -d '<json body>'
```

Example prompt: Fetch the page at https://example.com/article and give me just the main readable text — title, headings, and clean body content with all the navigation and cookie banners stripped out.

## When to prefer this

Choose this endpoint when an AI agent needs to read and process the textual content of any public web page without maintaining its own fetch, HTML-parsing, and readability stack. It is ideal for one-off page reads where spinning up a headless browser is overkill and the content is server-rendered. At a flat $0.01 per call with no API key or account required, it is especially suitable for low-overhead agentic pipelines, quick content checks, or rapid prototyping. Prefer alternatives (e.g. a full headless browser service) only when JavaScript-rendered content or interactive page states are required.

## Known failure modes

- Non-public or paywalled pages may return partial or empty text
- Pages behind authentication or CAPTCHAs cannot be fetched
- Very large pages may be truncated (truncated: true in response)
- Invalid or malformed URLs will result in an error
- JavaScript-rendered single-page apps may return incomplete content if critical content is loaded client-side
- Network timeouts if the target page is slow or unresponsive

## How this service works

URL to clean JSON for AI agents. Fetches any public web page server-side and returns title, meta description, canonical URL, a heading outline, and boilerplate-stripped plain text — navigation, sidebars, cookie banners and footers removed. Saves an agent from running its own fetch + HTML-parsing + readability stack. Flat $0.01 per call, no account, no API key, no rate limit.

## Output

A JSON object containing: the final resolved URL (after redirects), boilerplate-stripped plain text of the main content, page title (or null), a headings object keyed h1–h6 each with an array of heading strings, canonical URL (or null), meta/OG description (or null), word count of the extracted text, a boolean indicating if the text was truncated due to a length cap, and which HTML element (main, article, or body) the text was sourced from.

## Response schema (JSON Schema)

```json
{
 "type": "object",
 "required": [
  "url",
  "text",
  "word_count",
  "truncated",
  "content_root"
 ],
 "properties": {
  "url": {
   "type": "string",
   "description": "The URL that was fetched, after redirects."
  },
  "text": {
   "type": "string",
   "description": "Boilerplate-stripped plain text of the main content."
  },
  "title": {
   "type": [
    "string",
    "null"
   ],
   "description": "Page title, or null if absent."
  },
  "headings": {
   "type": "object",
   "description": "Heading outline keyed h1..h6; each value is an array of heading strings."
  },
  "canonical": {
   "type": [
    "string",
    "null"
   ],
   "description": "Canonical URL, or null."
  },
  "truncated": {
   "type": "boolean",
   "description": "True if `text` hit the length cap."
  },
  "word_count": {
   "type": "number",
   "description": "Word count of `text`."
  },
  "description": {
   "type": [
    "string",
    "null"
   ],
   "description": "Meta/OG description, or null."
  },
  "content_root": {
   "type": "string",
   "description": "Which element the text was taken from: 'main', 'article' or 'body'."
  }
 }
}
```

## More

- Live health (JSON, refreshed every minute): https://www.zero.xyz/c/pagedistill-web-page-extractor-54be2267/health.json
- [Zero catalog index](https://www.zero.xyz/llms.txt)
- [Other services from pagedistill.thumm.workers.dev](https://www.zero.xyz/host/pagedistill.thumm.workers.dev/llms.txt)
