Unbrowse — the registry of website API routes for AI agents

Search skills by intent, resolve to a ranked endpoint, execute for real data. MCP setup: npx unbrowse setup --mcp. Conversational demo at /aiko. Full overview at /classic.

The registry of website API routes

Any website, instantly an API for your agent

Browse 29 skills across 29 domains · 5,435 live calls

✦ or ask Aiko →

Peer-reviewed · 94-domain benchmark · 3.6× mean speedup (5.4× median), 100% win rate

Catalog

Most-used skills

Browse all →

Captured routes you replay as a direct API — no browser, no scraping.

Why it matters

Computer Use vs Unbrowse

Computer Use

Screenshot-based UI agents

1
Take screenshot
2
Upload to LLM Vision
3
Wait for processing
4
Predict coordinates
5
Move mouse & click
6
Wait for DOM load
7
Take another screenshot
8
Extract parsed text
43.0stime
~12,000tokens

Unbrowse

Direct API execution

GET/api/search?q=tokyo&guests=2
Executed200 OK · 0.8s
listings retrieved:
182 results
top result:
Shibuya Loft — $89/night
availability:
Mar 15–22 open
0.8stime
200tokens

“Stop teaching fish to walk. Let them swim.

## Not just reading. Doing.

Browse once. Call forever.

The resolve pipeline tries three paths in order: local route cache (<200ms), shared marketplace (sub-second), then a first-pass browser (8s) that visits the site for your agent and captures its internal APIs. Once captured, every later call on that site skips the browser entirely and returns the JSON answer in milliseconds. The more people install Unbrowse, the more first-pass captures land in the shared cache, so the cold-start tax shrinks across the network.

<200ms
route cache
already on your machine
~1s
marketplace
someone else already captured it
20-80s
first-pass browser
unbrowse visits for you, captures the API
Travel

Book the trip while you are in a meeting.

Agent intent
"hotels in Tokyo May 22-26 under $300/night, 2 guests"

unbrowse calls priceline.com / airbnb.com's own search + reservation endpoints (the ones their UI calls when you tap "Reserve") with your browser session.

unbrowse_resolveunbrowse_execute
sites: priceline.com, airbnb.com, opentable.com
Your saved cards + booking-site cookies
Code review

Triage the morning PR queue.

Agent intent
"approve PRs touching only docs/, request changes on the rest"

unbrowse calls github.com's pulls-list + review-submit endpoints directly. No UI driving; the comment + APPROVE verdict ride the same API the green button posts to.

unbrowse_resolveunbrowse_execute
sites: github.com
Your GitHub session cookies
Distribution

Post the thread, everywhere, from one draft.

Agent intent
"queue this thread on X and LinkedIn for 9am Tuesday"

unbrowse calls each platform's compose / schedule endpoint directly. One markdown draft fans out through the APIs the platforms use for their own composer.

unbrowse_resolveunbrowse_execute
sites: x.com, linkedin.com, typefully.com
Your real cookies on each platform
Solana / DeFi

Swap tokens without a browser tab open.

Agent intent
"swap 5 SOL to USDC, slippage 0.5%, send to my main wallet"

unbrowse hits jup.ag's quote + swap endpoints. Your wallet signs the returned tx. No DOM rendering, no MetaMask popup loop, no clicking.

unbrowse_resolveunbrowse_execute
sites: jup.ag, phantom.app
Your wallet extension session
Inbox + calendar

Clear the inbox at 7am.

Agent intent
"reply to anything from a customer, draft the rest, schedule any meeting requests"

Gmail and Calendar both expose internal APIs your browser already calls every time you refresh. unbrowse calls them with the same cookies. No OAuth scopes to wire, no per-app token.

unbrowse_resolveunbrowse_execute
sites: mail.google.com, calendar.google.com
Your Google cookies (no OAuth scopes)
Errands at scale

Reorder the cart. File the return. Cancel the trial.

Agent intent
"reorder last week's Whole Foods cart minus the milk; refund the Amazon order #117..."

Each retailer's frontend posts to internal cart-mutate and return-init endpoints. unbrowse posts to the same endpoints with your session cookies. Same effect as you tapping the button.

unbrowse_resolveunbrowse_execute
sites: amazon.com, instacart.com, doordash.com
Your saved cards + retailer cookies

Why the architecture works for writes too

The same primitive that fetches a search result POSTs a reservation.

unbrowse_execute calls any captured endpoint with your cookies, GET or POST, idempotent or not. Our 94-domain published bench measures the read path (modelled after WebArena's information-retrieval category); the write path rides the same primitive with the same auth. Browse the marketplace for the authenticated routes the community has already captured.

See the live marketplace →

The first-pass browser is the only time a browser runs for any given site. After capture the marketplace serves the route forever. Every install adds new captures to the shared cache.

Internet evolution

The transition to agentic actions

Web 1.0
READ

Google → Chrome

Web 2.0
WRITE

Blogger → YouTube

Web 3.0
OWN

MetaMask → OpenSea

Web 4.0
ACT

Unbrowse

Building Chrome + Google for the agentic internet.

## What "universal" means here

One MCP server. One Browser class. Every website your agent points at.

Not a stack of per-site MCPs. Not another framework on top of Playwright. The web layer your agent already wants.

Drop-in

Already wrote Playwright code? Swap the import.

The unbrowse SDK ships a Browser class with the same shape your agent already calls. page.goto() resolves from the skill cache first; behind the familiar interface, the engine is calling the captured shadow API, not driving Chromium. Falls through to the real browser only when the route is not yet known.

import { chromium } from "playwright";
import { Browser } from "@unbrowse/sdk";
MCP surface

Two tool calls do most of the work.

The canonical loop is unbrowse_resolve (find the right captured endpoint) then unbrowse_execute (call it with your cookies). 30+ other MCP tools (_go, _snap, _click, _fill, _submit, _eval, _scroll, _press, _select, _cookies, _auth_capture) are there for the cold-discovery path when a new site has not been captured yet.

One mcp.json entry replaces your stack
New site appears: same server, no config edit
Coverage

94 live domains in the open bench.

The paper measures 3.6x mean speedup (5.4x median) over Playwright across 94 live domains. 18 of those domains complete in under 100ms from the cache. The corpus is at harness/probes/corpus.txt; rerun the bench yourself.

Read the paper
Compounds

Every install makes the next user faster.

When your agent hits a site nobody has captured yet, the first-pass browser captures it once and publishes the route to the shared marketplace. The next agent on the same site (yours or someone else's) skips the browser entirely. The cold-start tax shrinks across the network as more people install unbrowse.

Browse the marketplace

Works with your stack

Claude Code
Cursor
OpenClaw
Windsurf
Any Skill Agent
Already runs onMCP-native. Drop-in for every major agent host.
✦ aiko-0.8b

See it work — ask Aiko anything

Aiko answers live through these routes. Watch a real question resolve and execute in seconds — the registry, in motion.

Open Aiko →
Get started

Wire it into your agent

npx unbrowse setup --mcp
live total calls endpoints domainspolls every 30s