{"uid":"cap_PmMf90td6vJavQTRvvAYX","slug":"vaaya-crw-structured-web-extraction-a663e240","name":"Vaaya CRW — Structured Web Extraction","description":"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 }`,…","url":"https://vaaya.ai/api/run/crw/extract","method":"POST","headers":{},"bodySchema":{"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"}}}}},"responseSchema":null,"example":null,"exampleRequest":null,"tags":["x402"],"displayCostAmount":"0.05","displayCostAsset":"USDC","priceDynamic":false,"priceHint":null,"priceStatus":"priced","priceSource":"registry","requiresHandshake":false,"reviewCount":0,"rating":{"score":"0.00","successRate":"0.00","reviews":0,"stars":null,"state":"unrated"},"availabilityStatus":"unknown","priceObserved":null,"sessionDeposit":null,"pricing":{"kind":"static","summary":"$0.05/call","primary":{"kind":"static","protocol":"x402","network":"base","amountUsd":"0.05","per":"call","confidence":"exact"},"accepted":[{"kind":"static","protocol":"x402","network":"base","amountUsd":"0.05","per":"call","confidence":"exact"}]},"paymentMethods":[{"uid":"pm_vII-nA6ISVF_xqwi6AJWW","protocol":"x402","methodType":"crypto","chain":"base","mode":"charge","costAmount":"0.05","costPer":"request","priority":0,"asset":null,"unit":"request","depositMicros":null,"planRef":null}],"brandName":null,"brandSlug":null,"brandBaseUrl":null,"brandDocsUrl":null,"whatItDoes":"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.","exampleAgentPrompt":"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.","exampleUseCases":[{"title":"Competitor pricing intelligence","prompt":"Visit these five competitor pricing pages and extract the plan names, prices, and included features as structured JSON: [url1, url2, url3, url4, url5]. I want source evidence for each field so I can audit the results."},{"title":"Lead enrichment from company websites","prompt":"Pull the company name, founding year, headquarters city, and number of employees from each of these 8 company websites and return it as structured records: [list of URLs]. Use a schema with those four fields."},{"title":"News article fact extraction","prompt":"From these three news articles, extract the headline, publication date, key people mentioned, and a one-sentence summary for each. Here are the URLs: [url1, url2, url3]."}],"resultDescription":"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.","failureModes":["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"],"whenToPreferThis":"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.","instructions":null,"reviewSummary":null,"reviewSummaryHighlights":null,"reviewSummaryConcerns":null,"reviewSummaryGeneratedAt":null,"activationCount":0,"lastUsedAt":null,"lastSuccessfullyRanAt":null,"lastHealthCheckAt":"2026-09-14T12:56:08.625Z","isFirstParty":false}