Read, fetch, scrape, or extract any public webpage or URL for AI agents
Read, fetch, scrape, or extract any public webpage or URL for AI agents. Returns clean text, Markdown, links, and metadata, with automatic browser rendering for JavaScript-heavy pages.
5000 (raw units)
price
3
calls / 30d
1
unique payers
2026-09-01
updated
Provider
smartfetch-production-ea53.up.railway.app · discovered, not yet claimed by its owner
Payment (x402 accepts[])
[
{
"scheme": "exact",
"network": "eip155:8453",
"payTo": "0xE29Fcb6ef1534d5F138E48a8A71370BE7770A786",
"asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"amount": "5000",
"maxTimeoutSeconds": 300
}
]Output schema
{
"bazaar": {
"info": {
"input": {
"body": {
"force_browser": false,
"max_chars": 20000,
"url": "https://example.com/article"
},
"bodyType": "json",
"method": "POST",
"type": "http"
},
"output": {
"example": {
"content": "SmartFetch local API test\nThis is useful article content for validating the production API layer. It contains enough text to pass extraction and verifies that navigation boilerplate is removed correctly from the result.\nSecond paragraph with a\nuseful link\n.",
"content_hash": "3ae07fdaa195ad19b590e0bdf032e362ae7d573330dd978027880b0706dc62e7",
"elapsed_ms": 54,
"final_url": "https://example.com/article",
"links": [
{
"href": "https://example.com/next",
"text": "useful link"
}
],
"links_returned": 1,
"low_quality": false,
"markdown": "# SmartFetch local API test\n\nThis is useful article content for validating the production API layer. It contains enough text to pass extraction and verifies that navigation boilerplate is removed correctly from the result.\n\nSecond paragraph with a [useful link](/next).",
"max_chars": 20000,
"original_content_chars": 257,
"original_markdown_chars": 269,
"render_method": "http",
"request_id": "a1b2c3d4e5f60708",
"requested_url": "https://example.com/article",
"returned_content_chars": 257,
"returned_markdown_chars": 269,
"service_version": "1.10.6",
"status_code": 200,
"success": true,
"title": "SmartFetch local API test",
"truncated": false,
"word_count": 40
},
"type": "json"
}
},
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"input": {
"additionalProperties": false,
"properties": {
"body": {
"properties": {
"force_browser": {
"default": false,
"description": "Start with browser rendering instead of HTTP retrieval.",
"type": "boolean"
},
"max_chars": {
"default": 20000,
"description": "Maximum characters returned for content and Markdown.",
"maximum": 50000,
"minimum": 1000,
"type": "integer"
},
"url": {
"description": "Public HTTP or HTTPS URL to retrieve.",
"format": "uri",
"pattern": "^https?://",
"type": "string"
}
},
"required": [
"url"
],
"type": "object"
},
"bodyType": {
"enum": [
"json",
"form-data",
"text"
],
"type": "string"
},
"method": {
"enum": [
"POST",
"PUT",
"PATCH"
],
"type": "string"
},
"type": {
"const": "http",
"type": "string"
}
},
"required": [
"type",
"method",
"bodyType",
"body"
],
"type": "object"
},
"output": {
"properties": {
"example": {
"properties": {
"content": {
"type": "string"
},
"content_hash": {
"pattern": "^[0-9a-f]{64}$",
"type": "string"
},
"elapsed_ms": {
"minimum": 0,
"type": "integer"
},
"fallback_reason": {
"type": "string"
},
"final_url": {
"format": "uri",
"type": "string"
},
"links": {
"items": {
"properties": {
"href": {
"format": "uri",
"type": "string"
},
"text": {
"type": "string"
}
},
"required": [
"href",
"text"
],
"type": "object"
},
"type": "array"
},
"links_returned": {
"minimum": 0,
"type": "integer"
},
"low_quality": {
"type": "boolean"
},
"markdown": {
"type": "string"
},
"max_chars": {
"minimum": 1000,
"type": "integer"
},
"original_content_chars": {
"minimum": 0,
"type": "integer"
},
"original_markdown_chars": {
"minimum": 0,
"type": "integer"
},
"render_method": {
"enum": [
"http",
"browser"
],
"type": "string"
},
"request_id": {
"type": "string"
},
"requested_url": {
"format": "uri",
"type": "string"
},
"returned_content_chars": {
"minimum": 0,
"type": "integer"
},
"returned_markdown_chars": {
"minimum": 0,
"type": "integer"
},
"service_version": {
"type": "string"
},
"status_code": {
"type": "integer"
},
"success": {
"type": "boolean"
},
"title": {
"type": "string"
},
"truncated": {
"type": "boolean"
},
"word_count": {
"minimum": 0,
"type": "integer"
}
},
"required": [
"success",
"requested_url",
"final_url",
"status_code",
"render_method",
"elapsed_ms",
"title",
"content",
"markdown",
"links",
"word_count",
"content_hash",
"low_quality",
"truncated",
"original_content_chars",
"original_markdown_chars",
"returned_content_chars",
"returned_markdown_chars",
"links_returned",
"max_chars",
"request_id",
"service_version"
],
"type": "object"
},
"type": {
"type": "string"
}
},
"required": [
"type"
],
"type": "object"
}
},
"required": [
"input"
],
"type": "object"
}
}
}Use it
curl
curl "https://smartfetch-production-ea53.up.railway.app/fetch" # -> 402 Payment Required, accepts[] lists how to pay # retry with a PAYMENT-SIGNATURE (or PAYMENT header) once paid
JavaScript
const res = await fetch("https://smartfetch-production-ea53.up.railway.app/fetch");
if (res.status === 402) {
const { accepts } = await res.json();
// pay one of accepts[] via an x402 client, then retry with the payment header
}Python
import httpx
res = httpx.get("https://smartfetch-production-ea53.up.railway.app/fetch")
if res.status_code == 402:
accepts = res.json()["accepts"]
# pay one of accepts[] via an x402 client, then retry with the payment headerMachine-readable
Everything on this page is also available as clean JSON at /resources/12487.json, and this resource appears in /discovery/resources and /discovery/search.