Web Page Data Extraction
Read a supported public web page and map its content to requested fields. Returns structured data; blocked pages return an access error.
web-extract Example
{
"url": "https://example.com"
} {
"data": {
"url": "https://example.com",
"title": "Example Domain",
"metadata": {
"page_type": "informational"
},
"main_content": {
"links": [
{
"url": null,
"text": "Learn more"
}
],
"headings": [
"Example Domain",
"Example Domain"
],
"body_text": "This domain is for use in documentation examples without needing permission. Avoid use in operations."
}
},
"page_title": "Example Domain",
"source_url": "https://example.com"
} Inputs
| Field | Type | Required | What it is |
|---|---|---|---|
url | string | Yes | URL to extract data from |
extract | string | No | What data to extract (natural language) |
Output fields
How reliably each field appears in a successful answer.
| Field | Type | Appears |
|---|---|---|
data | object | Always (present in every successful answer) |
page_title | string | Always (present in every successful answer) |
How to call it
The same tool through each route. MCP clients reach it through Strale’s server at https://api.strale.io/mcp; the call below is what the agent sends.
# Needs an API key. max_price_cents caps what this call may cost.
curl -X POST https://api.strale.io/v1/do \
-H "Authorization: Bearer $STRALE_API_KEY" \
-H 'Content-Type: application/json' \
-d '{
"capability_slug": "web-extract",
"inputs": {
"url": "https://example.com"
},
"max_price_cents": 15
}' {
"tool": "strale_execute",
"arguments": {
"slug": "web-extract",
"inputs": {
"url": "https://example.com"
},
"max_price_cents": 15
}
} import { Strale } from "straleio";
const strale = new Strale({ apiKey: process.env.STRALE_API_KEY! });
const result = await strale.do({
capability_slug: "web-extract",
inputs: {
"url": "https://example.com"
},
max_price_cents: 15,
}); import os
from straleio import Strale, DoRequest
strale = Strale(api_key=os.environ["STRALE_API_KEY"])
result = strale.do(DoRequest(
capability_slug="web-extract",
inputs={
"url": "https://example.com",
},
max_price_cents=15,
)) # No account. The first request answers 402 with the price in USDC;
# an x402 client pays it from your wallet and repeats the request.
curl -i -X POST https://api.strale.io/x402/v2/web-extract \
-H 'Content-Type: application/json' \
-d '{
"url": "https://example.com"
}' Limitations
Some website sources are unsupported
Trustpilot, Glassdoor, LinkedIn, Google Search, Google Patents, Reddit and the major social platforms (Facebook, Instagram, X) are not supported and return a policy error before the page is read. Repeating the same request does not return content.
Login, CAPTCHA and multi-step pages are inaccessible
Renders pages via headless browser — pages requiring login, CAPTCHA, or multi-step navigation cannot be accessed
What to do instead: Use an accessible public page containing the information you need.
Complex layouts can lose structural context
AI extraction interprets page content — complex data tables or deeply nested layouts may lose structural context
What to do instead: Use structured-scrape with CSS selectors when you know the page structure, and review complex tables against the original.
Output size cap per call
Structured output is limited to about 16000 output tokens per call; requests exceeding this limit are refused rather than returned truncated. Requests with large results can exceed this limit, and repeating the same request does not help.
What to do instead: Narrow the 'extract' instruction, or split the request into multiple calls (e.g. one page or one section at a time)
Pages are limited to 16 MiB of HTML
Pages with more than 16 MiB of HTML are refused with a caller_input error naming the input field. The call is not charged, and the page is not retried through another fetch or rendering route.
Related tools
- Academic Paper Search €0.03
- arXiv Search €0.02
- Clinical Trials Search €0.03
- DOI Resolver €0.02
- Hacker News Search €0.02
- Job Board Search €0.20