There are 95,882 AI-agent identities registered on Base under ERC-8004. Ask how many of them have ever paid anyone, from a wallet you can prove is theirs, after the identity existed, for something that was not a routing hop, and the answer is 1,198. One in eighty.
We run Agentic Finance Graph, an independent public ledger of agent money. This post is the developer version of what we found when we moved from sampling the registry to reading all of it, and how you can check any agent yourself with one request.
The join nobody publishes
Every "agent economy" dashboard draws the same arrow: identity → wallet → payment. Registries count identities (mints). Payment rails count transfers. Nobody publishes the join between them, and the join is where every interesting claim lives. "This agent has paid for something" is a claim about a wallet, made on behalf of a token, and it is only as good as the evidence that the wallet spends for that token.
So we specified the join. A binding record is:
(agent_gid, wallet, bind_method, confidence, valid_from_block, valid_to_block, evidence[], superseded_by)
Methods are ranked, never averaged:
| m | how the wallet is tied to the identity | confidence |
|---|---|---|
| 5 | wallet signs a challenge over the agent id + nonce | 0.95 |
| 4 | EIP-7702 / session policy that embeds the agent id | 0.90 |
| 3 | the registration declares a wallet and that wallet is the observed spender | 0.70 |
| 1 |
ownerOf(tokenId) is the observed spender |
0.55 |
| 0 | name similarity, clustering | never a binding |
Two rules make it a ledger instead of a snapshot: a binding is born, dies and can be superseded, never edited in place (when the NFT is resold, the binding is closed at that block and the new holder has to earn a new one); and every payment row references a binding_id, so attribution can be replayed at any block height.
What counts as a payment
A stablecoin transfer (USDC, USDT, EURC, DAI on Base) counts if:
- the sender has a binding valid at that block,
- the block is at or after the identity's mint block, and
- the receipt does not show the money arriving and leaving the wallet in the same transaction (within 2%): that's a router hop, not a purchase.
Rule 2 sounds pedantic until you meet wallet #63877: it registered an identity on 18 August 2026 and had moved $34.6M in stablecoins before that date. Without the date rule, one identity would have added four times our entire counted total as "agent spending".
The partition of every dollar that left a bound wallet, as of 27 Sep 2026 10:00 UTC:
| component | USD |
|---|---|
| counted payments | $8.8M |
| excluded: before the identity existed | $72.2M |
| excluded: routing hops | $17.8M |
| total | $98.8M |
A naive total is 11× the honest one.
Where the counted money actually goes
We identified the recipients from verified contract source and from the transaction receipts of the largest transfers:
-
60% lending and vault adapters. The single largest recipient is a verified contract literally named
Adapterwhose NatSpec says it wraps Aave v3 and ERC-4626 deposits "so receivers are always bound tomsg.sender", called by session keys. Agents parking their own cash at yield. - 18% bridges. Across, Relay, LI.FI, a CCTP wrapper, and three unverified routers whose every sampled receipt forwards the full amount to the Across SpokePool in the same tx.
-
4.5% escrowed work (
TermixEscrow: an order lifecycle with a dispute layer, in its own events). - 1.5% swaps (Uniswap v3 / Aerodrome pools: USDC in, another token back).
The largest wallet is 28% of the total; the median payment is $48. So: the money registered agents control is mostly treasury management, not purchases. And only 5% of counted transfers are x402 micropayments; the wallets that buy APIs over HTTP and the identities registered under ERC-8004 are, so far, mostly different populations.
Check any agent yourself
Is this identity an economic actor?
curl -s "https://agenticfinancegraph.com/api/agents?q=53008" | jq '.ranked, .agent.liveness'
Its public record (bindings with their method, counterparties, 25 newest payments, float, incidents):
curl -s "https://agenticfinancegraph.com/api/agent?id=53008&format=json" | jq '.agent | {liveness, wallet, bindings, pay}'
The whole tape, every metric with a definition id and an as_of:
curl -s https://agenticfinancegraph.com/api/state | jq '.measured | {actors_l7_plus, observed_pay_usd_total, observed_pay_top_actor_share, observed_pay_usd_median}'
Every number resolves to a frozen definition that states what it does not assert:
curl -s https://agenticfinancegraph.com/api/def?id=rank.l7plus.v1
Agents can buy a dated evidence pack about a counterparty over x402, no account, $1 in USDC:
curl -i "https://agenticfinancegraph.com/check/liveness?id=53008"
# HTTP/1.1 402 Payment Required
# PAYMENT-REQUIRED: <base64 requirements: amount 1000000, USDC on eip155:8453, payTo ...>
# retry with PAYMENT-SIGNATURE (EIP-3009 authorization); the pack comes back with the receipt inside
And a badge you can embed that says exactly what the record says and nothing more:
<img src="https://agenticfinancegraph.com/badge/8004-base-53008.svg" alt="L9 · observed paying · Agentic Finance Graph">
What this does not assert
A binding is evidence of control, not of operation: the chain does not say whether a program or a person signs. A label describes what a contract does, never who runs it. A counted payment is a transfer, not proof it bought a good or a service. We publish those refusals next to every figure, and 37 assertion checks run against our own tables every three hours with their failing counts public. Every finding on the site is re-derived from the raw rows and matched in the transaction receipt before it is shown.
The full method, with the equations and six agents walked through by transaction, is in Research Note 01: The Binding Record (PDF, CC BY 4.0). The binding record spec is published to be copied; if you run an indexer and implement it, tell us what breaks.
We don't hold keys, move funds, or run a rail. We watch, and we count.
Top comments (0)