DEV Community

CyberWareX
CyberWareX

Posted on

Let your AI agent read any web page as markdown for $0.001, no API key

Most LLM agents hit the same wall the first time they need a real web page: a plain HTTP GET returns an empty shell, a cookie wall, or 300 KB of navigation markup. Running headless Chrome yourself fixes that, and then you own a browser fleet.

Agent Web Access is a pay-per-call alternative. Your agent sends a URL and gets back the rendered page as clean markdown. JavaScript runs in a real browser first, then navigation, ads and boilerplate are stripped. There is no account and no API key. Each call is paid in USDC on Base through the open x402 protocol.

Prices

Call What you get Price
/fetch the rendered page as markdown, text or html $0.001
/extract every element matching a CSS selector $0.001
/screenshot PNG, viewport or full page $0.005
/pdf print-quality PDF $0.005

The prices come from the service's own 402 reply, which any client can read for free.

Try it without paying

GET https://web.cyberwarex.com/sample returns one real paid answer, together with its on-chain settlement transaction, so you can see the output before you spend anything.

Python, about ten lines

# pip install "x402[evm,requests]"
import os
from eth_account import Account
from x402 import x402ClientSync
from x402.http.clients import x402_requests
from x402.mechanisms.evm import EthAccountSigner
from x402.mechanisms.evm.exact import ExactEvmScheme

client = x402ClientSync()
client.register("eip155:8453", ExactEvmScheme(EthAccountSigner(Account.from_key(os.environ["PK"]))))
session = x402_requests(client)

r = session.get("https://web.cyberwarex.com/fetch",
                params={"url": "https://news.ycombinator.com", "format": "markdown"})
page = r.json()
print(page["status"], len(page["content"]), "chars")
print(page["content"][:300])
Enter fullscreen mode Exit fullscreen mode

PK is the private key of a Base wallet holding a little USDC. A dollar covers a thousand page reads. The client gets the 402 invoice, signs the payment and retries the request on its own.

I ran this exact script before publishing: it returned status 200 and about 11 KB of markdown for the Hacker News front page, at a cost of $0.001.

From an MCP client

The same four tools are served over MCP at https://web.cyberwarex.com/mcp (streamable HTTP, no auth): web_fetch, web_extract, web_screenshot and web_pdf. An unpaid tools/call returns the x402 invoice as a tool error, and the client retries with the payment.

When to use it

  • a page is a single-page app and plain GET returns nothing useful
  • you need the text of a page, not its markup, to feed a model
  • you want a screenshot or PDF of a page inside an agent run without running a browser

When not to

  • the site offers an official API: use that
  • you need to log in: this reads public pages only

Docs: https://cyberwarex.com/llms.txt · Service catalog: https://cyberwarex.com/.well-known/x402

Update: markdown you can build a pipeline on

A reader asked whether the markdown is stable enough to be an intermediate representation, not just readable text. Every /fetch reply now carries:

  • provenance: the source URL, the fetch time, a sha256 of the content and its length, so a chunk can always be traced back and a changed page detected
  • checks: whether code fences are balanced, how many links there are and how many are unusable, how many headings
  • sections=1: the markdown split by headings, each with its level and parent-heading path, ready to chunk without losing structure
  • include_raw=1: the rendered HTML next to the markdown, to debug a conversion

Code blocks now come out as fenced blocks with their language, and heading permalink anchors are stripped. Nothing changed for existing callers: the new fields are additive.

Top comments (1)

Collapse
 
aikotanaka profile image
Aiko Tanaka •

The key design question for agent pipelines is whether the returned Markdown is stable enough to serve as an intermediate representation, rather than just readable text. I’d preserve the source URL and extraction timestamp, then split by headings before chunking so the agent retains the document structure. It also helps to validate links and code blocks after conversion, since malformed Markdown can quietly break downstream retrieval or tool planning. A selector-based extract is useful when the full page is noisy, but keeping the raw rendered result as a fallback makes debugging much easier.