# Vaaya CRW — Structured Web Extraction

> Vaaya CRW — Structured Web Extraction is a paid API for AI agents from vaaya.ai, paid per call via x402, $0.05/call, status unknown (last checked 2026-09-14).

Extracts structured data from up to 10 URLs using an LLM, guided by a natural language prompt and/or JSON schema, returning parsed objects inline.

## Facts

- Endpoint: POST https://vaaya.ai/api/run/crw/extract
- Price: $0.05/call
- Payment: x402
- Status: unknown
- Last checked: 2026-09-14
- Activations on Zero: 0
- Tags: x402
- Canonical page: https://www.zero.xyz/c/vaaya-crw-structured-web-extraction-a663e240
- Structured record (JSON): https://api.zero.xyz/v1/capabilities/cap_PmMf90td6vJavQTRvvAYX

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 vaaya-crw-structured-web-extraction-a663e240 -d '<json body>'
```

Example prompt: Go to these three pages — https://acme.com/pricing, https://rival.com/pricing, https://third.com/pricing — and extract the plan names, monthly prices, and feature limits into a structured table. Include source evidence for each field so I can verify where the data came from.

## When to prefer this

Choose this endpoint when you need to extract structured information from one to ten specific URLs in a single call, especially when you want LLM-quality understanding of unstructured page content (not just raw HTML scraping). It is ideal when you already know the URLs and want to specify what to extract either in plain language or via a JSON schema. Prefer it over general-purpose scrapers when you need semantic extraction, field-level source evidence, or when the content requires language understanding rather than CSS selectors.

## Known failure modes

- URL is unreachable or returns non-200 status — per-URL status field will reflect failure
- Extracted data is incomplete if the page requires JavaScript rendering
- Schema mismatch if the page content doesn't contain the requested fields — returns null or empty values
- Rate limiting or timeouts on slow-loading pages
- Ambiguous prompt leads to inconsistent field extraction across URLs
- Multi-URL response nesting (`data.data`) not handled by caller causes silent data loss

## How this service works

CRW — Structured extraction over up to 10 URLs using an LLM. Pass `urls` plus `prompt` (natural language) and/or `schema` (JSON schema); optional `basis: true` for per-field source evidence. Usually returns the extracted objects INLINE and already complete: `{ results: [{ url, status: completed, data }] }` — read `data` directly, do not poll. The extracted object may be nested one level (`data.data`) on multi-URL calls; unwrap defensively. If a call instead returns `{ id, status: processing }`,…

## Output

Returns a JSON object with a `results` array where each element contains the URL, a `status` field (e.g. `completed`), and a `data` object holding the extracted structured fields. On multi-URL calls, data may be nested one level deeper as `data.data`. If processing is asynchronous, returns an `id` and `status: processing` instead, requiring polling.

## Request schema (JSON Schema)

```json
{
 "type": "object",
 "$schema": "https://json-schema.org/draft/2020-12/schema",
 "required": [
  "input"
 ],
 "properties": {
  "input": {
   "type": "object",
   "required": [
    "type",
    "method",
    "bodyType",
    "body"
   ],
   "properties": {
    "body": {
     "type": "object",
     "$schema": "http://json-schema.org/draft-07/schema#",
     "required": [
      "urls"
     ],
     "properties": {
      "urls": {
       "type": "array",
       "items": {
        "type": "string",
        "format": "uri"
       },
       "maxItems": 10,
       "minItems": 1
      },
      "basis": {
       "type": "boolean"
      },
      "prompt": {
       "type": "string",
       "minLength": 1
      },
      "schema": {
       "type": "object",
       "additionalProperties": {}
      }
     },
     "additionalProperties": false
    },
    "type": {
     "type": "string",
     "const": "http"
    },
    "method": {
     "enum": [
      "POST"
     ],
     "type": "string"
    },
    "bodyType": {
     "enum": [
      "json",
      "form-data",
      "text"
     ],
     "type": "string"
    },
    "pathParams": {
     "type": "object"
    }
   },
   "additionalProperties": false
  },
  "output": {
   "type": "object",
   "required": [
    "type"
   ],
   "properties": {
    "type": {
     "type": "string"
    },
    "example": {
     "type": "object"
    }
   }
  }
 }
}
```

## More

- Live health (JSON, refreshed every minute): https://www.zero.xyz/c/vaaya-crw-structured-web-extraction-a663e240/health.json
- [Zero catalog index](https://www.zero.xyz/llms.txt)
- [Other services from vaaya.ai](https://www.zero.xyz/host/vaaya.ai/llms.txt)
