Publishing rules — every headline stat ships with six things
- 1 · Object definition — mint? funded wallet? paying x402 buyer? live endpoint? Say which.
- 2 · Chain set — “all chains” is a claim, not a default.
- 3 · Time window — 24h, 30d, cumulative. Windows change conclusions.
- 4 · Scrape timestamp — explorers drift; ours are stamped.
- 5 · Spam filter state — economic vs vanity toggle, defaulted to economic.
- 6 · Link to raw data — CSV/Parquet dumps ship with the weekly note.
Two standing bans: forecasts never appear in live tiles (they are quarantined and labeled), and raw reputation averages are never displayed as trust.
The L0–L9 liveness ladder
“Active agents” means nothing without a definition. We publish the full funnel and rank at L7+ by default:
| Level | Name | Test |
|---|---|---|
| L0 | Mint | Registered event exists on-chain |
| L1 | Pointer | Non-empty current agentURI (never the mint URI) |
| L2 | Resolve | HTTP/IPFS fetch returns 200 within 30s |
| L3 | Schema | Valid ERC-8004 registration JSON |
| L4 | Declare | services[] non-empty |
| L5 | Reach | At least one declared endpoint responds (2xx; or a well-formed 402) |
| L6 | Speak | MCP initialize or A2A agent-card handshake succeeds |
| L7 | Paid | Bound wallet has an observed x402 payment or on-chain spend |
| L8 | Funded | Stablecoin or ETH balance above dust ($1) |
| L9 | Economic | ≥3 distinct counterparties over 30 days — not a single vanity ping |
Reference points for calibration: the reproducible Base crawl (n=1,204 of 63,832 registrations through 2026-08-16) measured L5 = 6.8% (95% CI 5.5–8.4%); the July 2026 ecosystem cut put working services at 2.24% of 385,998 registrations. Full context →
Parameters — documented now, changeable with a dated note
| Parameter | Value | Note |
|---|---|---|
| Dust threshold | $1 | 1 USDC or equivalent |
| Endpoint timeout | 30s | strict; stored with latency + body hash |
| “Active 7d” | L5 or L7 in 7d | probe success or observed payment |
| Economic window | 30d · ≥3 counterparties | non-self, above dust |
| Crawl cadence | daily L5 · hourly top 1k | funded wallets get the fast lane |
| Wallet-bind confidence | 0–1 score | balances never joined on a low-confidence bind |
Coverage verification — because public RPCs lie
census = on-chain agent count (registry state)
stored = count(distinct agentId) in our DB
gap = census − stored
publish ⟺ gap == 0 # otherwise the number is withheld
- Some public endpoints return HTTP 200 with an empty array for historical
eth_getLogs; some return truncated sets and call it success. - We scan in ~10,000-block windows regardless of vendor claims, and dual-source Ethereum and Base at minimum.
- Probe results are stored as a time series — status, latency, body hash, error class — never overwritten, so “endpoint responds” is auditable after the fact.
Reputation & volume hygiene
- Feedback weights rank only when tied to a checkable job ID (ERC-8183 escrow or x402 receipt).
- Self-reviews and review farms are excluded; “has reviews” and “has validations” are separate columns.
- x402 volume splits into economic vs vanity: repeat counterparties, non-self payments, above dust. The unfiltered number stays available, labeled.
Crawler ethics
We identify ourselves (AgenticFinanceGraph/0.1 (+agenticfinancegraph.com)), cache aggressively, honor 429s, and do not hammer MCP servers. We are calling other people’s agents; we act like a good counterparty — or our own liveness numbers would collapse into noise.
Reproducibility
Methodologies we build on and credit: maxguryanov/agent-registry-research (Base liveness crawl), the indexer-honesty notes of yaojin0609/erc-8004-liveness, and arXiv 2606.26028 (Can Trustless Agents Be Trusted?). Disagree with a threshold? Argue with us — the parameters table above is versioned for exactly that.