AgentCount
Sections
FindingsAgentsReportsData

AgentCount is an independent, open-source audit layer for the agent economy: it counts what gets claimed, checks what actually stands behind it, and publishes the evidence for both. Its first instrument checks every AI agent registered under ERC-8004 on the chains it sweeps; its second asks whether the sellers advertising paid resources over x402 actually answer, quote and settle — method published, figures still to come. All code and data are public.

agentcount.ai

On this site
Findings
What the sweeps found, one chain at a time.
Agents
Every agent counted, searchable, each with its own record.
Reports
Written analysis of a sweep, dated and cited.
Data
The archives — download any run and recompute it.
Reference
Method
How each check is measured, and what it refuses to claim.
Coverage
Which chains are swept, and what share of agents that is.
Seller Census
The second instrument: who actually sells over x402.
Check a file
Run the checks against your own agent document.
SourceCore (Rust)This siteApache-2.0
Contactprobes@agentcount.ai

What we measure

What each of the seven checks asks, in the same vocabulary the API, the checker and this page’s own changelog use — so a claim never has two definitions to drift apart.

Checks this census runs

7_

checker 0.7.0schema v8

Why this exists

Hundreds of thousands of AI agents are registered on public blockchains under ERC-8004, and those registration counts get cited as evidence that an autonomous agent economy exists. Nobody was checking what stands behind the counts.

AgentCount reads every registered agent on the chains it sweeps at a pinned block and asks seven checkable questions: does the registration point at a document, does the document work, does the document say which agent it belongs to, does anyone attest to the agent. Every answer is published with the evidence to recompute it, and none of them is combined into a score.

What the checks show so far: three-quarters of registration documents declare no way to reach an agent, and most reputation is written by a few automated clients. The registry is real. What it is being taken as proof of is not, and counting is the honest way to say so.

In short

  • Every agent registered under ERC-8004 on the chains this census sweeps (BNB Chain, Base, Ethereum mainnet, Billions, MegaETH, X Layer, Celo, Gnosis, Arbitrum, Polygon, and OP Mainnet) gets the same seven checks, and every answer carries the evidence collected to reach it.
  • Check 6 is not implemented. It reads as not checked for every agent, never as a failure — the question is not being asked of anyone yet.
  • Checks measure conformance to a spec, not safety, intent or quality. Passing everything is not an endorsement, and failing is not proof of bad intent.

Independence

  • Nobody in the census pays us. No payment is accepted from any agent operator, platform, registry or chain that appears in these results. Every agent here was checked without its owner’s knowledge, at a block pinned in advance.
  • There is nothing to buy. No badge, no certification, no placement, no listing. The directory is ordered by agent id and the census by population.
  • No payment changes a finding. A finding is corrected when it is wrong, and for no other reason. Every correction this project has made to itself is published in the methodology changelog.
  • We run no launchpad and mint nothing. If a probe identity is ever registered, it is flagged as ours in the dataset and excluded from every published rate.

Who is who

“The agent” is seven different parties wearing one word. They are frequently the same address and just as frequently not, so every claim on this site names which one it means — and says whether the census reads it at all.

NFT ownerownerOf(agentId) — on-chain, block-dependentcensus reads this
Who holds the agent’s ERC-721 token at a given block. This is the only identity the census reads, and it is not stable: the token can be transferred, so “the owner” means “the owner at the pinned block” and nothing more. 42 of the 313 agents whose declared wallet has been paid have changed hands at least once.
Mintersender of the registration transaction — stored since schema 6census reads this
Who called register(). Often but not always the first owner, and frequently a platform registering on a customer’s behalf, which makes it the one role that separates the party that created an identity from the party that holds it. The census records it from schema 6 onward; a run swept under an earlier schema carries no minter, so a figure covering those runs was pulled by hand from the mint transaction and says so. 8004scan displays the same address as CREATOR.
Approved operatorERC-721 approve / setApprovalForAllnot read
An address the owner has authorised to act on the token. The spec bans feedback from operators as well as owners (line 217), but — so it cannot identify an operator, and no check or report may claim otherwise.

AgentCount is a conformance census, not a rating agency. Every agent registered under ERC-8004 on the chains this census sweeps (BNB Chain, Base, Ethereum mainnet, Billions, MegaETH, X Layer, Celo, Gnosis, Arbitrum, Polygon, and OP Mainnet) gets the same seven yes/no/skip/error questions, called checks, and every answer carries the evidence the checker collected to reach it. There is deliberately no score, grade, tier, or ranking anywhere in this product. Reaching your own conclusion from the seven answers is the point.

The seven checks

Each check has a short machine name. The API, the evidence keys and the downloaded archives call these rung1–7 and use the names in the second column, so anyone re-deriving a figure from an archive meets those words rather than these.

How each check is named on this page and elsewhere on the site
checkmachine nameshown aswhat a pass establishes
1registeredRegistered?The agent exists in the on-chain registry, with an owner and a document URL.
2resolvableReachable?The document URL it declared actually answers when fetched.
3parseableReadable?What came back is valid JSON that a machine can read.
4conformantFollows the spec?The document meets what ERC-8004 requires of it.
5boundClaims its identity?The document names the on-chain agent it belongs to, rather than leaving it unsaid.

Check 4’s fields, by severity

The spec invokes RFC 2119, so MUST, SHOULD and MAY are three different promises and check 4 keeps them apart. Pinned against spec commit 68fc6765761a10fb26f0692df21c8a6f9d12b1be, checker version 0.7.0 (schema 8). ERC-8004 is a Draft: the standard can still change, which is why every result pins the exact spec text it was judged against and the pin is re-checked for drift rather than assumed current.

MUST — the only fields whose absence fails the check

One requirement, and conditional — a document carrying no registrations array has nothing it must do.

FieldCondition
registrations[].agentIdrequired within each entry, only when `registrations` is present
registrations[].agentRegistryrequired within each entry, only when `registrations` is present

SHOULD — recorded as a gap, never a failure

  • type
  • name
  • description
  • image
  • services
  • registrations
  • services[].version

MAY — purely informational

  • x402Support
  • active

What a status means

Each check answers with one of a small fixed vocabulary, always in the checker’s own words: pass, fail, skipped(a check this one depends on didn’t pass, so this question could not be meaningfully asked — for example, an agent that fails check 2 cannot meaningfully be asked check 3; dependencies run within a check’s own track, not across every check number in order — check 7 depends only on check 1, so a check-2 failure never skips it), or error(the check itself could not complete — a timeout, a malformed response — which is a different claim from a clean fail). A check with no row at all was never reached this run, which this site renders as “not checked” — distinct from skipped, since “not checked” and “we couldn’t ask” are different claims.

Check 5 alone can also answer unclaimed, added 2026-07-29: the document made no binding claim (no registration entry, or an empty one) for this check to check. That is neither a pass (nothing was verified) nor a fail (a merely-recommended field, not a broken one) — it is its own, honest word for “there was nothing here to check”. Any status word this site does not recognise renders with neutral styling and the verbatim text the API sent, never guessed at as one of the words above.

✗fail
did not pass
✓pass
passed
–skipped
skipped — a check this one depends on did not pass
○unclaimed
unclaimed — the document made no claim to check
⌀unprobeable

What this does not tell you

A pass on every check is not a safety guarantee, and a fail is not proof of bad intent — the checks measure conformance to a spec, not intent or quality. Absence of an implemented check 6 today does not mean an agent’s endpoints work; it means that question is not yet being asked of anyone. Every claim here is scoped to exactly what the evidence attached to it shows.

this census never reads approvals
agentWalletgetAgentWallet(agentId) — on-chain, signature-verifiedcensus reads this
The spec’s payment address: reserved registry metadata, changeable only by proving control of the new address (EIP-712, or ERC-1271 for contract wallets), and cleared automatically when the agent is transferred. Set for 40,473 agents on Base — but equal to the owner for 40,126 of them, which is the default and required no proof. Only 347 agents have verified a distinct address.
Declared wallet (convention)a services[] entry named "agentWallet" — off-chain, unverifiedcensus reads this
A community convention that appears nowhere in the spec. 920 documents use it. It carries no proof of control, no link to the on-chain identity, and is served over mutable HTTP — and for 409 agents it disagrees with the address the registry has verified. Never presented as conformance.
Payment-contract controllerowner() of a per-agent payment or vault contractnot read
Where an agentWallet is a contract rather than an EOA, whoever that contract answers to. Appears in no registry and in none of the other roles. It is the address that actually controls the money: for the largest registrant in the dataset, 148 agents held by one owner paid into contracts controlled by 126 different addresses, none of them the owner. Ignoring this role produced a published claim that was wrong about who had been paid.
Agent-controlled keya TEE-held or agent-held signing key — nothing on-chain marks itnot read
An address the agent itself signs with, rather than a human. Nothing in ERC-8004 distinguishes it from any other EOA: a key in a TEE and a key on a founder’s laptop are the same 20 bytes on-chain. So the census cannot tell autonomous action from human action, and no check or report may imply it can.
Service operatorwhoever runs the endpoints — in no registry at allnot read
The party actually answering the agent’s declared endpoints. Not recorded on-chain, not in the registration document, and not knowable from either. An agent’s owner, minter, wallet controller and service operator can all be four different parties, and nothing in ERC-8004 lets a reader tell.
6liveAnswers?A declared endpoint responds to a probe. Not implemented yet, so nobody passes or fails it.
7attestedHas feedback?At least one on-chain feedback entry names this agent.
1 · registered
The agent id exists in the on-chain Identity Registry with anagentURIrecorded against it.
2 · resolvable
That URI can be fetched and returns a body — a strict 2xx over HTTP, or a successfully decoded data: URI. An HTTP 402 does not count as resolving.
3 · parseable
The fetched body parses as JSON.
4 · conformant
The parsed document contains every field the spec pinned below requires — see the exact list underneath.
5 · bound
The document’s own registration entry names the same agent id, registry, and chain that the on-chain lookup used to find it — the card and the registry entry agree about who this is. Since a registration entry is only recommended, not required (check 4), a document can pass conformance while making no binding claim at all — that case is neither a pass nor a fail; it renders as unclaimed. See “What a status means” below.
6 · live
Whether the endpoints the card declares in services[] actually respond. Not yet implemented — every agent currently shows no row for this check, rendered on this site as “not checked”, never as a guessed status.
7 · attested
Whether this agent has received at least one Reputation Registry feedback entry, from any client address at all. Runs for every agent that passes check 1 — it does not depend on whether the document itself ever resolved, parsed, conformed, or bound. This check does not, and cannot, check whether the feedback came from the agent’s own owner or an approved operator. The pinned spec (line 217) bans both: “The feedback submitter MUST NOT be the agent owner or an approved operator for agentId.” That is a contract-level invariant — such feedback cannot be submitted in the first place — so there is nothing here for this check to detect. Verified against the deployed contract on 2026-08-01, not assumed from the spec: the Reputation Registry’s verified source (giveFeedback at 0x8004baa1…9b63, Blockscout-verified on Base) reverts for the owner, any approved-for-all operator, and the per-token approved address, and an eth_call simulation from the owner of a live agent reverts with “Self-feedback not allowed”. One honest limit: the registry is an upgradeable proxy, so the invariant is as permanent as its current implementation — and it binds addresses, not people; an owner submitting from a second wallet is not detectable by anyone. Note the scope of what we read: the census reads ownerOfonly, and never ERC-721 approvals, so it could not identify an approved operator even if the ban did not exist. It answers only “did anyone at all vouch for this agent”, not “was it independent” — renamed from independent on 2026-07-29 for exactly that reason.
  • supportedTrust
  • unprobeable — no declared endpoint that a probe can reach
    ·not checked
    not checked — this check was never asked