# Agent Utility Suite – Batch Web Scrape (scrape-batch)

> Agent Utility Suite – Batch Web Scrape (scrape-batch) is a paid API for AI agents from x402-agent-api.onrender.com, paid per call via x402, $0.008/call, status unknown (last checked 2026-10-10).

Fetches 2–5 public URLs simultaneously and returns each page as clean Markdown, with optional link extraction and per-page character limits.

## Facts

- Endpoint: POST https://x402-agent-api.onrender.com/api/v1/scrape-batch?utm_source=zero.xyz
- Price: $0.008/call
- Payment: x402
- Status: unknown
- Last checked: 2026-10-10
- Activations on Zero: 0
- Tags: x402
- Canonical page: https://www.zero.xyz/c/agent-utility-suite-batch-web-scrape-scrape-batch-3760d76f
- Structured record (JSON): https://api.zero.xyz/v1/capabilities/cap_FFIHQPRRl6zfTADiIV3tB

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 agent-utility-suite-batch-web-scrape-scrape-batch-3760d76f -d '<json body>'
```

Example prompt: Can you fetch the content of these three pages for me — https://example.com/pricing, https://example.com/docs, and https://example.com/about — and return just the main content of each as clean Markdown, with a max of 15,000 characters per page?

## When to prefer this

Use this endpoint when you need to fetch 2–5 distinct URLs in a single paid call, saving round-trips and cost compared to calling the single-URL scrape endpoint repeatedly. It is ideal when you already know the set of URLs you need (e.g. a company's pricing, docs, and about pages) and want their clean Markdown in one response. Prefer the single-URL endpoint for one page at a time, or when you need to paginate through a very long document using next_offset.

## Known failure modes

- UPSTREAM_FAILED: one or more target URLs returned a non-200 HTTP status (e.g. 404, 403, 500) — that URL's result has ok:false with an error code
- Payment required (402): the x402 payment was not provided or was invalid — retry with a valid PAYMENT-SIGNATURE header
- Too few or too many URLs: the urls array must contain 2–5 items; providing 1 URL or more than 5 returns a validation error
- Invalid URL format: any URL that is not a valid http/https URI will cause a validation error
- Timeout: slow or unresponsive target servers may cause individual page fetches to fail with a timeout error
- Content too large: pages exceeding 50,000 characters are truncated; use next_offset with the single-URL scrape endpoint to read the remainder

## How this service works

Read 2-5 public URLs as clean Markdown in one call: articles, docs, pricing pages, PDFs, feeds. Per page: main content, tables, code, author and dates, optional links; failures reported per URL so one bad page does not spoil the batch. Not charged when no page can be read. One payment instead of five. No account or API key. $0.008 USDC per call.

## Output

A JSON object with a results array (one entry per URL, in the same order as the input). Each successful entry contains: the page URL, HTTP status, page title, Markdown content (up to max_chars_per_page characters), word count, character count, token estimate, truncation flag, next_offset for reading more of a long page, source type, final URL after redirects, and rich metadata (author, language, description, canonical URL, published/modified time, OG image). Failed URLs include an error code and message. The top-level object also reports succeeded and failed counts, plus optional next_calls suggestions.

## Request schema (JSON Schema)

```json
{
 "type": "object",
 "properties": {
  "mode": {
   "enum": [
    "main",
    "full"
   ],
   "type": "string",
   "default": "main",
   "description": "main (default): each page's article or main content only. full: whole pages, including navigation and footers."
  },
  "urls": {
   "type": "array",
   "items": {
    "type": "string",
    "format": "uri",
    "maxLength": 2048
   },
   "maxItems": 5,
   "minItems": 2,
   "description": "2-5 different public http(s) URLs to read, e.g. [\"https://example.com/pricing\", \"https://example.com/docs\"]. Results come back in the same order."
  },
  "include_links": {
   "type": "boolean",
   "default": false,
   "description": "Also return each page's links as a list (url, text, internal). Default false."
  },
  "strip_link_urls": {
   "type": "boolean",
   "default": false,
   "description": "Write links as plain text in the Markdown (keeps the text, drops the URLs) to save tokens. Default false."
  },
  "max_chars_per_page": {
   "type": "integer",
   "default": 20000,
   "maximum": 50000,
   "minimum": 1000,
   "description": "Return at most this many characters of each page (1,000-50,000, default 20,000). Read the rest of a long page with scrape_markdown and its next_offset."
  }
 }
}
```

## Response schema (JSON Schema)

```json
{
 "type": "json",
 "example": {
  "failed": 1,
  "results": [
   {
    "ok": true,
    "url": "https://example.com/",
    "title": "Example Domain",
    "offset": 0,
    "source": "html",
    "status": 200,
    "markdown": "This domain is for use in documentation examples without needing permission. Avoid use in operations.\n\n[Learn more](https://iana.org/domains/example)",
    "metadata": {
     "type": null,
     "image": null,
     "pages": null,
     "author": null,
     "language": "en",
     "site_name": null,
     "description": null,
     "canonical_url": null,
     "modified_time": null,
     "published_time": null
    },
    "final_url": "https://example.com/",
    "truncated": false,
    "char_count": 149,
    "word_count": 17,
    "next_offset": null,
    "total_chars": 149,
    "content_type": "text/html",
    "token_estimate": 38
   },
   {
    "ok": false,
    "url": "https://example.org/missing",
    "error": {
     "code": "UPSTREAM_FAILED",
     "message": "The page returned HTTP 404."
    }
   }
  ],
  "succeeded": 1,
  "next_calls": [
   {
    "why": "Who runs this site's email, and which SaaS does its domain use?",
    "tool": "domain_enrich",
    "price": "$0.004",
    "arguments": {
     "domain": "example.com"
    }
   }
  ]
 }
}
```

## More

- Live health (JSON, refreshed every minute): https://www.zero.xyz/c/agent-utility-suite-batch-web-scrape-scrape-batch-3760d76f/health.json
- [Zero catalog index](https://www.zero.xyz/llms.txt)
- [Other services from x402-agent-api.onrender.com](https://www.zero.xyz/host/x402-agent-api.onrender.com/llms.txt)
