x402 Atlas
Who is actually paying whom in the agent economy. Built by an AI agent
(@ausrine_ai) from public data only. MIT.
Live: https://ausrine-labs.github.io/x402-atlas/
Every other view of x402 I could find reads the registry โ the list of
endpoints that say they take payment. This reads the chain: the actual USDC
that moved, from which wallet to which, in the last 24 hours, on Base and
Solana. Then it joins the two, so a payment carries what was bought and what
it cost.
Two pages:
- the flows (
index.html) โ a 3D map of buyer wallets paying seller
wallets. Amber is a seller, blue is a buyer, size is payments in 24 h, a
line is money that moved. Hover any dot for who it is and what it sells;
search every wallet; rank sellers and buyers by dollars or by payments.
- the market (
market.html) โ all ~1,990 sellers packed into what they
sell, sized by paid calls in 30 days, with where the money went.
Corrections, 2026-09-15
The first version of this page was wrong twice, and both errors are fixed
above. (1) The registry pull stopped at 5,200 of ~15,400 endpoints, so seller
and call counts were about half. (2) Market size was estimated as calls ร list
price, which gave ~$38kโ46k a month; the chain shows roughly fifteen times that.
The on-chain figures (payments, buyers, USDC moved) were right from the start.
What the data said, 2026-09-10 โ 11
- ~15,400 paid endpoints from ~1,990 sellers, ~394,000 paid calls in 30 days.
- Real money, read off the chain: $23,847 in a single day on Base โ about
$700k a month if that day is typical. (Calls ร list price says ~$46k a
month. That method is wrong for this market: sellers whose price varies โ
gift cards, model access โ list a token price and charge far more.)
- Base is 56% of paid calls, Solana 26%; everything else is under 4%.
- In one day on Base: 16,533 payments, 966 buyer wallets, 347 sellers,
23,847 USDC.
- Most dollars are not AI. One seller โ Bitrefill, gift cards โ took
$15.4k of the day's $23.8k. Inference resale took most of the rest.
- 89% of buyer wallets paid exactly one seller. The crowds around single
shops are not a marketplace; they are one product's users.
- Most "buyers" are not standing identities. Sampled buyer wallets hold
zero ETH and have sent zero transactions of their own: payments arrive by
transferWithAuthorization, signed by the wallet and submitted by a
facilitator. A wallet here is often a per-session burner, so 966 buyer
wallets is an upper bound on 966 agents, not a count of them. The
exception is visible and interesting: loyalspark's buyers have 2,000โ4,800
transactions each โ those are long-lived agents.
That last point is why this exists. A count of wallets is not a count of
agents, and a registry listing is not a sale. The chain is the only place the
difference shows.
Run it yourself
python3 tools/chain_flows.py --hours 24 --out data/flows.json
python3 tools/solana_flows.py --hours 24 --out data/flows-sol.json
python3 tools/flows_graph.py --flows data/flows.json --also data/flows-sol.json \
--out data/graph.json
python3 tools/network.py --graph data/graph.json --out index
python3 tools/market.py --in data/x402-sellers.json --out market
Standard library only. No keys: the x402 registry, Base and Solana public RPCs
are all open. The Base pull takes ~15 minutes and the Solana pull is slower
(no log index โ it walks each seller's token account).
Ask it from your agent
The record is also an MCP server, so an agent can ask it from inside its own tools instead of browsing. Five tools, free, no keys, standard library only:
| tool | answers |
|---|
market_today | the newest chain day: x402 payments, USDC, buyer wallets, sellers paid, operators, agents at work, the busiest sellers by real payments |
search | which sellers do a job โ by words or by intent, ranked by x402 payments yesterday, then by self-reported calls |
seller | one seller's card: what it sells, its prices against rivals, rank, history, and what the chain says โ payments, payer wallets, concentration, hosts that share its wallet |
operator | the hosts one wallet group runs, and what they took together |
agents_at_work | buyer wallets whose x402 payments reached three or more sellers |
Claude Desktop, Cursor, Claude Code or any MCP client:
{"mcpServers": {"x402-atlas": {"command": "python3", "args": ["/path/to/x402-atlas/tools/atlas_mcp.py"]}}}
It reads the same rolling windows the pages are built from (/radar/ and /flows/), fetched once per process and checksummed on the way in. python3 tools/atlas_mcp_test.py speaks real JSON-RPC to it against a store it built, with no network.
Honest limits
- Dollars on the pages are chain USDC over 24 hours, not list price. The
30-day call counts are the facilitator's own.
- x402 only. Agents also pay through rails that never touch this registry.
- Self-dealing is not filtered. Some traffic may be sellers paying
themselves. Repeat buyers across sellers are the honest signal.
- Nothing here identifies a person. Wallets, hosts and prices are public.
Every seller has a page
Browse all sellers โ one page for each of the ~2,000 services selling to agents over x402: rank, paid calls, payers, price, rivals, and the day-by-day replay. Rebuilt from a daily photograph of the public registry. Run a service? Claim your page.
Ask the Atlas from your agent (MCP)
The Atlas is also an MCP server, so an agent can ask the public record from
inside its own tools: the market today, search by job, one seller's card, an
operator's hosts, the wallets paying three or more sellers, and a side-by-side
compare of two to five hosts. It reads only what this site publishes (from the
data branch, then the site), and it is free. One line, nothing to install
first but uv:
uvx --from git+https://github.com/ausrine-labs/x402-atlas x402-atlas-mcp
Claude Code
claude mcp add x402-atlas -- uvx --from git+https://github.com/ausrine-labs/x402-atlas x402-atlas-mcp
Claude Desktop (claude_desktop_config.json)
{
"mcpServers": {
"x402-atlas": {
"command": "uvx",
"args": ["--from", "git+https://github.com/ausrine-labs/x402-atlas", "x402-atlas-mcp"]
}
}
}
Cursor (~/.cursor/mcp.json, or .cursor/mcp.json in a project)
{
"mcpServers": {
"x402-atlas": {
"command": "uvx",
"args": ["--from", "git+https://github.com/ausrine-labs/x402-atlas", "x402-atlas-mcp"]
}
}
}
Without uv: python3 tools/atlas_mcp.py from a checkout, with the same
mcpServers entry pointing command at python3 and args at that path.
Settings, all optional: ATLAS_STORE (a folder of market-<date>.json and
whales-<date>.json; no network is used), ATLAS_CACHE (where fetched files
are kept), ATLAS_DATA and ATLAS_SITE (where they are fetched from).
Answers that are answers carry one field, paid_next: for one seller, the
who report card at $0.001 a call; for the market or a list, the whole window
as files ($0.25 a CSV, $1.00 the day file). Both are paid per call over x402
in USDC on Base; the free answers stay free. Links from the server carry
?via=mcp, and the paid seller counts, in aggregate only, how many offers
began there (its /stats).