Any URL → clean Markdown + fixed-schema JSON, built for AI agents and RAG pipelines.
50 calls/day per IP, no key needed. Add the X-Billing: free header (or ?free=1):
curl -H "X-Billing: free" "https://api.webextract.dev/v1/extract?url=https://example.com"
Without the header, no key and no payment, the API answers HTTP 402 with x402 payment requirements. MCP clients get 50 free calls/day with no header.
1,000 calls
$0.005 / call
5,000 calls
$0.004 / call
15,000 calls
$0.0033 / call
Option A — card: pay via Stripe Checkout. Your API key is shown once on the success page.
/v1/extract (Markdown + product/price, tables, metadata) = 1 credit; /v1/markdown (Markdown only) = 0.4 credit.Option B — no account (AI agents): pay $0.005 per structured call ($0.002 for /v1/markdown) in USDC via x402 on Base, Polygon, Arbitrum One, Avalanche C-Chain, OP Mainnet, World Chain or Monad (not Ethereum mainnet). Requests without a key, payment or X-Billing: free get HTTP 402 with payment requirements (reason: x402_required); x402 clients pay and retry automatically. Discovery: /.well-known/x402.
curl -H "Authorization: Bearer lx_..." "https://api.webextract.dev/v1/extract?url=https://example.com/product" curl -H "Authorization: Bearer lx_..." "https://api.webextract.dev/v1/balance"
Endpoints: GET /v1/extract?url=<page> → JSON: markdown, metadata, product (name/price/currency/availability via JSON-LD, microdata, OpenGraph or page heuristics), tables. GET /v1/markdown?url=<page> → Markdown only. Both also accept POST with a JSON body {"url": "..."}. Full docs: /docs · schema: /openapi.json · agent summary: /llms.txt.
Auth: REST free tier: send X-Billing: free (or ?free=1) for 50 calls/day per IP, otherwise you get a 402; MCP: 50/day free, no header; Authorization: Bearer <key> for prepaid credits (GET /v1/balance shows remaining); or pay per call with x402 v2 ($0.005 per /v1/extract, $0.002 per /v1/markdown) in USDC on Base (recommended), Polygon, Arbitrum One, World Chain, Monad, Avalanche C-Chain or OP Mainnet. A request with no key, payment or free opt-in gets the HTTP 402 with payment requirements right away (PAYMENT-REQUIRED header; X-Billing: x402 does the same explicitly); retry with the signed PAYMENT-SIGNATURE header. Discovery: /.well-known/x402.
Sandbox (free test money only): test your x402 client without real money at /sandbox/v1/extract and /sandbox/v1/markdown, or send X-Billing: x402-testnet to the normal endpoints. Only Base Sepolia (eip155:84532) test USDC is accepted, settled by the x402.org testnet facilitator; get test USDC from the Circle faucet. Rate limited per IP.
MCP: remote streamable-http server at https://api.webextract.dev/mcp, tools extract_url and page_markdown. Listed in the official MCP Registry as dev.webextract/extract.
Billing: Credits never expire. No charge on failed fetches (404, timeout, blocked, robots.txt disallowed). Structured JSON at no extra cost: /v1/extract = 1 credit, /v1/markdown = 0.4 credit. If structured fields come back empty, you're only charged the Markdown rate. robots.txt always respected. x402 payments settle at the quoted price.
Errors (JSON, never charged): 400 missing or invalid url · 401 bad key · 402 payment required (the body's reason says which: x402_required no key/payment/free opt-in, x402_requested X-Billing: x402 sent, free_limit_reached opted into free but used up, invalid_payment, unsupported_network, settlement_failed not charged, retry) or out of credits · 400 also for an unknown X-Billing value · 422 site blocked · 451 robots.txt disallow.
We identify as WebExtractBot, obey robots.txt, never bypass CAPTCHAs or anti-bot protection, and refuse private network addresses.