# ReadFetch Single-URL Web Scraper

> ReadFetch Single-URL Web Scraper is a paid API for AI agents from readfetch.com, paid per call via x402, $0.005/call, status unknown (last checked 2026-10-31).

Loads a public URL in a real browser session with optional JS execution, scrolling, and selector waiting, returning the page as Markdown, text, or HTML with links.

## Facts

- Endpoint: POST https://readfetch.com/v1/scrape?utm_source=zero.xyz
- Price: $0.005/call
- Payment: x402
- Status: unknown
- Last checked: 2026-10-31
- Activations on Zero: 0
- Tags: x402
- Canonical page: https://www.zero.xyz/c/readfetch-single-url-web-scraper-790703ac
- Structured record (JSON): https://api.zero.xyz/v1/capabilities/cap_rljIh-hx9pl9N9zjDbbVW

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 readfetch-single-url-web-scraper-790703ac -d '<json body>'
```

Example prompt: Load https://news.ycombinator.com in a real browser, wait for the page to fully render, and give me the content as Markdown including all the links.

## When to prefer this

Use this endpoint when you need to scrape a single URL from a JavaScript-rendered page and want fine-grained control over render mode, output format, headers, cookies, auth, and egress pool. Prefer this over the batch endpoint for one-off fetches, over the residential-only endpoint when datacenter egress is sufficient, and over lightweight HTTP-only fetchers when the target page requires JS execution to render its content.

## Known failure modes

- Target site blocks the request even through residential egress — returns error or empty extraction
- Selector never appears on page, causing a timeout
- URL is malformed or unreachable — returns 4xx or connection error
- Page requires auth that was not supplied — returns login page content instead of target content
- Rate limiting or anti-bot measures return a 403/429 from the target site

## How this service works

JavaScript rendering and web scraping for agents: load a public URL in a real browser session, optionally scroll, wait for selectors, run JS, set headers, cookies or auth, and return Markdown, text or HTML with the page's links.

## Output

Returns the scraped page content in the requested format (Markdown, plain text, or HTML), along with any links found on the page. The response reflects the fully rendered DOM after JavaScript execution, scrolling, and any specified wait conditions have completed.

## Request schema (JSON Schema)

```json
{
 "type": "object",
 "properties": {
  "url": {
   "type": "string",
   "title": "Url",
   "format": "uri",
   "maxLength": 2083,
   "minLength": 1
  },
  "auth": {
   "anyOf": [
    {
     "$ref": "#/$defs/Auth"
    },
    {
     "type": "null"
    }
   ],
   "default": null
  },
  "mode": {
   "enum": [
    "fast",
    "render",
    "full"
   ],
   "type": "string",
   "title": "Mode",
   "default": "render"
  },
  "fresh": {
   "type": "boolean",
   "title": "Fresh",
   "default": false
  },
  "egress": {
   "type": "string",
   "title": "Egress",
   "description": "Exit to leave through: `direct` (this service's own datacentre egress) or `residential` (a residential address pool, for targets that refuse datacentre addresses). Omit to use the default route."
  },
  "format": {
   "enum": [
    "markdown",
    "text",
    "html"
   ],
   "type": "string",
   "title": "Format",
   "default": "markdown"
  },
  "options": {
   "anyOf": [
    {
     "$ref": "#/$defs/ScrapeOptions"
    },
    {
     "type": "null"
    }
   ],
   "default": null,
   "deprecated": true,
   "description": "Deprecated — use `advanced` instead (same ScrapeOptions shape). Scheduled for removal in a future API semver bump."
  },
  "advanced": {
   "anyOf": [
    {
     "$ref": "#/$defs/ScrapeOptions"
    },
    {
     "type": "null"
    }
   ],
   "default": null
  },
  "egress_fallback": {
   "type": "string",
   "title": "Egress Fallback",
   "description": "Pool to retry through once when the first attempt is refused (bot check, wall, empty extraction, origin 403/429/5xx); must differ from `egress`. Absent keeps one exit for the whole call."
  }
 }
}
```

## More

- Live health (JSON, refreshed every minute): https://www.zero.xyz/c/readfetch-single-url-web-scraper-790703ac/health.json
- [Zero catalog index](https://www.zero.xyz/llms.txt)
- [Other services from readfetch.com](https://www.zero.xyz/host/readfetch.com/llms.txt)
