← All posts

We indexed all 34,587 x402 Bazaar resources. 39% come from one host, ~1% return 200.

A full-pagination capture of the public Coinbase CDP x402 Bazaar discovery endpoint at 2026-10-05T17:13Z. One snapshot. 34,587 listings across 2,122 hosts. Every number on this page is a named field in the companion summary.json — cited inline so a reader can walk from claim to row.

Published 5 October 2026 · Dataset page: /data/x402-bazaar-census-2026-10 · CSV + JSON-LD + raw summary alongside · CC BY 4.0.

We publish this because nobody else ships a dated, full-pagination snapshot of what the Bazaar actually contains, and the shape of what it contains is not what the top-line listing count suggests. Listing is not the same thing as liveness, and liveness is not the same thing as delivery. The gap between the three is the verification work.

How we counted

One request/second, limit=200/page, iterated against api.cdp.coinbase.com/platform/v2/x402/discovery/resources until the last page returned fewer than limit items. No authentication, no payment, no state mutation. 173 pages. The endpoint reported pagination.total = 34,587; the fetch pulled item_count = 34,587; truncated = false. Raw bytes were hashed (raw_sha256 in snapshot_meta.json) before any derivation. Per-listing fields were then rolled up into the aggregates summarised below — host concentration, network split, scheme usage, price distribution, recency, field completeness — plus a seeded 100-URL liveness probe (sample_seed=20261005, single GET, 5s timeout). Full method and the inference rules are in METHOD.md.

Every headline number below is a named key in summary.json; the parenthetical citations point at the key path. We also keep an own-disclosure panel at the end because a self-published census shouldn’t hide what it finds about the publisher.

Update — weekly delta

2026-10-06. The dataset page now publishes a recurring Weekly delta section alongside this fixed baseline. The latest week (2026-10-05) reports 35,007 listings (+420 vs. this baseline), the top-1 host share at 39.46% (+0.48pp), and HHI on hosts at 0.160796 (+0.003683). The findings below are the 2026-10-05T17:13Z baseline reading — unchanged; the weekly companion is the recurring recomputation against the same source endpoint, published to a dated subpath per week.

Finding 1 — One host holds 38.98% of the entire index.

market.datapackvibe.com accounts for 13,481 of the 34,587 listings — 38.98% on its own (host_summary.top1_host). The top ten hosts together hold 57.91% (host_summary.top10_share). Herfindahl–Hirschman on listings per host is 0.1571 (host_summary.hhi_host) — concentrated but not single-vendor. 2,122 distinct hosts in total (host_summary.distinct_hosts).

The practical read: a lot of what looks like “a 34,587-row bazaar” is one publisher’s catalog, and a lot of the rest is a long thin tail. If you are evaluating a listing, the host is a load-bearing field — not the row count.

Finding 2 — A 100-URL seeded probe returned 1% HTTP 200, 40% HTTP 402, 47% HTTP 405, 7% net error.

We drew a seeded random sample of 100 resource URLs (seed 20261005), issued a single HTTP GET at each with a 5-second timeout, and recorded the status (liveness_probe.status_distribution). The breakdown:

Status Count Meaning
200 OK1Free tier or a non-challenging GET path.
402 Payment Required40The correct x402 payment challenge on an unauthenticated GET.
405 Method Not Allowed47Resource is POST-only; the 402 handshake never fires on a GET.
401 / 404 (other 4xx)5Auth-required or path-not-found; no challenge served.
Network error7DNS / timeout / TLS error — the host didn’t answer.

This is a lower-bound liveness measurement. It does not say any particular listing delivers what it advertises after payment — a 402 is a challenge, not a receipt. But the three populations the probe can separate (answers with a challenge / answers but not on GET / doesn’t answer at all) are already very different cohorts, and only 1 in 100 returned a 2xx on an unauthenticated GET (liveness_probe.pct_http_2xx = 1.0).

Finding 3 — The median listed price is $0.01. 83.55% price at or below one cent.

Of the 34,587 listings, 34,490 carry an inferable USD price (price_summary.items_with_derivable_usd_price); the remaining 97 either denominate in a non-USD-pegged asset or omit a decimals field. Across the priced subset:

  • Median: $0.01 (price_summary.median_usd).
  • P90: $0.03, P99: $0.945001, max: $1,000 (price_summary.p90_usd / p99_usd / max_usd).
  • 83.55% price at ≤ $0.01 — 28,817 of 34,490 priced listings (items_le_1cent_pct_of_priced).
  • 96.55% price at ≤ $0.10 (items_le_10cent_pct_of_priced).
  • 99.32% price at ≤ $1.00 (items_le_1dollar_pct_of_priced).

The modal x402 unit is a microtransaction. SaaS-seat pricing is a rounding error in this catalog, and the single max value of $1,000 is almost certainly a one-shot workload or a mis-flagged batch unit, not a $1,000-per-call list price.

Finding 4 — 99.47% of listings accept at least one mainnet; Base dominates.

99.47% of the 34,587 listings carry at least one mainnet in their accepts[] array (network_summary.items_mainnet_share); 93.14% are mainnet-only (no testnet accepts entry at all). The modal payment network, by a wide margin, is Base mainnet (CAIP-2 eip155:8453) with 35,534 of 59,803 accepts[] entries. Solana mainnet is second (7,359), then Polygon mainnet (3,313), Arbitrum One (2,527), Base Sepolia (2,362), and Optimism mainnet (1,178). The index spans 47 distinct CAIP-2 network identifiers in total (network_summary.distinct_networks_in_accepts) — including XRPL, Stellar pubnet, Algorand mainnet, and multiple less-common EVM chains.

Finding 5 — Only 32 of 34,587 listings are MCP-type (0.09%).

The resource-type split (type_distribution) is 34,555 http and 32 mcp. MCP-type listings are 0.093% of the index — a rounding error. If you came here looking for the Bazaar as an MCP distribution channel, it isn’t one; the Bazaar is overwhelmingly a catalog of classical HTTP endpoints you call directly over x402.

Finding 6 — The index is young. 58.4% of listings were updated in the last 7 days.

recency.age_buckets_pct_of_total reports 58.4% of listings carry a lastUpdated within 7 days of the fetch window, 16.93% within 24 hours, and only 0.05% older than 90 days. The catalog is being actively refreshed, which is consistent with the host-concentration finding above — the top publisher almost certainly batch-rolls its catalog on a short cadence. Field completeness is high on descriptive fields (description_present_pct = 99.82, tags_present_pct = 80.74) and middling on identity-bearing fields (service_name_present_pct = 44.4).

What this means for an agent choosing x402 services

Listing is not liveness. 34,587 rows exist in the Bazaar; a seeded random probe at those rows returned a 2xx on 1 in 100 and a correct x402 payment challenge on 40 in 100. Half of the probed listings never got to the 402 handshake on a GET at all. A buyer-side agent evaluating these services has to answer three separate questions — is it advertised, does it answer, does it deliver after payment — and the Bazaar listing itself only addresses the first.

Listing is not identity. The host field is a URL, not a counterparty. 38.98% of the index resolves to a single host; another ~19% resolves to the next nine. Walking a listing to a registry-owned identity (the ERC-8004 publisher that owns the pay_to) is a separate layer, and the overlap between “listed in the Bazaar” and “registered as an ERC-8004 agent” is a cross-dataset join — see the companion ERC-8004 four-chain census for the on-chain population.

The gap between the three layers is the verification work.

Our own disclosure — zero listings resolve to onchainagentintel.io.

summary.json.ours_listed.count = 0. We publish /.well-known/x402.json on our own domain and have not registered with the Bazaar as of the fetch window. Publishing /.well-known is not sufficient on its own — the Bazaar is populated via a separate submission flow — and we state that plainly here because a self-published dataset shouldn’t hide a disclosure that reflects on the publisher. The full note is in ours_listed.notes.

Reproducing this report

Every number above is a named key in summary.json (7,031 bytes). The underlying per-listing rows are in dataset.csv (34,587 rows, 21 columns). The schema.org Dataset metadata is in dataset.jsonld. The 100-URL probe trace is in liveness_probe.json. File hashes are pinned in SHA256SUMS. Everything is CC BY 4.0.

If you’re choosing x402 services, walk the verification layers

Our paid /v1/intel/* API joins the listing layer to on-chain identity — the ERC-8004 owner of the pay_to, feedback-row count, counterparty profile, and the delivered-after-payment cohort. The free /mcp server exposes five read-only tools so an agent can check coverage before deciding to pay. Both are a strict superset of “the row is in the Bazaar.”

See the paid API → Try the free MCP server

Cite as

Onchain Agent Intel (2026). We indexed all 34,587 x402 Bazaar resources. 39% come from one host, ~1% return 200. Narrative findings on the Coinbase x402 Bazaar discovery census (2026-10-05). CC BY 4.0. https://onchainagentintel.io/blog/x402-bazaar-census-findings-2026-10