read_webpage
any URL, real stealth browser, Shadow DOM, action discovery
read_webpage(url, actions, max_length, start_index, raw)
~$0.001 per typical fetch · capped at $0.003
Sir — can I just read all web pages, and get all the text and actions, reliably?
— a poor agent, somewhere
OK. (alms for real web-page use.)
somehow, this web-fetcher is better than all the rest.
5 free a day · ~$0.001 per fetch · $5 buys ~5,400 fetches · or self-host (MIT)
Free 5 fetches a day from your address. No signup. No card.
Past the free five? A $5 spoonful of gruel buys ~5,400 fetches.
Mint a key ›
Rendered page text plus a typed list of actions your agent can call back. That second part is the differentiator — no other fetcher gives you the page’s affordances ready-to-invoke. Latency typical ~3 s, capped at 30 s.
{
"content": "Contents of https://www.roche.com/solutions/pipeline:
Title: Roche | Product Development Pipeline
[49,277 chars of rendered text, Shadow DOM and all]
--- Available actions on this page: ---
click: \"button:has-text('Download current view as CSV')\"
click: \"button:has-text('Phase')\"
click: \"button:has-text('Therapeutic Area')\"
fill: \"input[name='search']\"
click: \"a:has-text('Pipeline')\" -> /solutions/pipeline
..."
}
Receipt headers:
X-Compute-Seconds: 6.436
X-Charge-USD: 0.000593
X-Balance-USD: 4.999407
Pick an action, send it back as the actions array, and your agent
drives the page. how it works ·
all response headers.
Add pithy.bot — an MCP that reads any web page (JS, Shadow DOM, past bot walls, even Google) and hands back clean text + clickable actions.
Add to your MCP config (e.g. ~/.mcp.json) — transport http:
{"mcpServers":{"pithy":{"type":"http","url":"https://pithy.bot/mcp/","headers":{"Authorization":"Bearer <key>"}}}}
Then call read_webpage("https://…"). Reconnect MCP (no full restart). Full skill: https://pithy.bot/skill.md
No key? POST https://pithy.bot/demo/fetch {"url":"…"} — 5 free/day, no signup. Or POST /signup {"email":"…"} for a key + $0.10 trial.
Claude Code, Cursor, Windsurf, your own — it’ll do the rest.
roche.com/solutions/pipeline hides 131 drugs behind Shadow DOM.
The drug data lives inside web components; curl sees an empty shell.
We click Download CSV and bring home the whole pipeline.
| tool | chars | drug names | cost |
|---|---|---|---|
| curl / httpx | empty shell | 0 | — |
| crawl4ai (50K stars) | 7,220 | 0 | — |
| Readability extraction | ~3,000 | 0 | — |
| Firecrawl (JS rendering) | partial | partial | ~$0.006 |
| ScrapingBee (JS rendering) | partial | partial | ~$0.001 |
| pithy.bot | 49,277 | 131 | $0.000593 |
Compute time: 6.4 s (Chromium launch + page render + click + CSV download). No live-fetch button here — visitors shouldn’t pay for the demo. How it works.
Downloaded: Roche_Pipeline_Final_2026-05-11.csv (49,277 chars) Compound,Generic Name,Trade name,Combination,Therapeutic area,Project type,Indication,Phase,Filing date,Partner,Managed by,Description "RG7716","faricimab","Vabysmo","","Ophthalmology","ai","neovascular age related macular degeneration (wAMD)","Approved",... "RG6330","divarasib (KRAS G12C)","","plus combinations","Oncology/Hematology","ai","solid tumors","Phase 1",... "RG6171","glofitamab","Columvi","","Hematology","ai","relapsed/refractory follicular lymphoma","Approved",... "RG6234","forimtamig","","","Hematology","ai","relapsed/refractory multiple myeloma","Phase II",... "RG6919","B7H3-ADC","","","Oncology/Hematology","nme","solid tumors","Phase 1",... …127 more rows, full CSV in your response…
A new kind of customer is reading this page: the AI agent that just needs to read the web. Reliably. Cheaply. With the buttons it can click. Designed for that customer specifically. Built so the page doesn’t lie about what it contains.
We render the page the way your agent wants to read it: better performance, smaller context, the buttons already typed. (built for agents. used by agents. served from Darien, CT.)
read_webpage is the entry point. The deeper primitives — SEC
filings + earnings transcripts — are the same research toolbelt, hosted at
the same per-second meter. Signing up today gets you first access as each lands.
any URL, real stealth browser, Shadow DOM, action discovery
read_webpage(url, actions, max_length, start_index, raw)~$0.001 per typical fetch · capped at $0.003
SEC EDGAR — 10-K, 10-Q, 8-K, S-1, every form
list_filings(ticker, form?, date_from?, date_to?)get_filing(accession, offset?, limit?)search_filing(accession, pattern)get_facts(ticker) — XBRL fundamentalsfile-grep on the server — pull only the lines you need
earnings calls — our corpus, 4,117 tickers, 175K transcripts, 2005–present
list_transcripts(ticker, year?, max?)get_transcript(ticker, year, quarter, offset?, limit?)search_transcripts(pattern, ticker?, date_from?, date_to?)pre-compressed (~45% smaller, dependency-parsed) — pithy by design. Cross-corpus grep across the whole market.
Mint a key now for read_webpage; the filings and transcripts tools land on
the same key, same balance, same meter. No re-onboarding.
Free $0.10 trial — about 100 typical fetches. No card. Top up later in $5 packs. Your key stays in your browser; see it at /login.
“Please, sir, I want some more.”
OK.
(this was, of course, unheard of.)