A small, growing time series of how much USDC actually settles through x402 pay-per-call APIs on Base, measured from on-chain Transfer logs rather than from provider-reported call counts.
Dataset Card
By Nima Ansari, published under cc-by-4.0, revision beb929ff0f4e.
A small, growing time series of how much USDC actually settles through x402 pay-per-call APIs on Base,
measured from on-chain Transfer logs rather than from provider-reported call counts. One row per
measurement; every row is a trailing 24-hour window ending at measured_at_utc.
Status: bootstrapping. 211 rows spanning 2026-09-22T13:34Z to 2026-10-17T03:23Z = 24.6 days, and because every window is 24 h wide that is about 25 independent day(s) of data. Rows are kept to at most one per clock hour and a new one is added whenever our demand snapshot refreshes (in practice a few times a day; cadence is not guaranteed). Latest row: 122 seller addresses paid at a price they list, 34,499 confirmed x402 payments, $667.22 settled in its 24 h window.
Comparing rows — read this before plotting anything
- Windows overlap. Two rows an hour apart share 23 of their 24 hours. Never sum rows; the series is a level, not a flow.
- The measured cohort is not fixed. The seller set is re-crawled between rows, so
seller_addresses_scannedandindexed_base_servicesmove (for example 212 → 195 → 227 within the first day). A level shift inconfirmed_x402_usdthat coincides with a change inseller_addresses_scannedis instrument churn (cohort or listed-price changes), not market movement. Compare rows with similar cohort sizes, or normalise per scanned address. - Every figure is a lower bound. The source set is the seller (
pay_to) addresses in our own crawled x402 Service Index — a few hundred Base services out of roughly 22,000 x402 services listed ecosystem-wide.
Columns
All windows are Base mainnet (eip155:8453), asset USDC. Band bounds are half-open [lo, hi).
| column | meaning |
|---|---|
measured_at_utc |
end of the trailing window (ISO 8601, UTC) |
window_hours |
window length, 24.0 for every row so far |
from_block, to_block |
Base block range scanned for this row |
indexed_base_services |
x402 services on Base in our index at measurement time |
seller_addresses_scanned |
distinct pay_to addresses those services list (the cohort) |
seller_addresses_receiving_any_usdc |
of those, how many received at least one USDC transfer of any size |
sellers_paid_at_listed_price |
of those, how many received at least one transfer whose amount equals a price that address lists |
confirmed_x402_payments |
count of transfers whose amount equals a listed price of the receiving address |
confirmed_x402_usd |
USD sum of those confirmed payments |
usdc_transfers_count |
count of ALL USDC transfers to the cohort, any amount |
usdc_transfers_le50_count |
count of those at or below $50 |
usdc_transfers_le50_usd |
USD sum of those at or below $50 |
median_ratio_onchain_over_provider_reported |
see below; empty when the validation step did not run |
transfers_by_usd_band |
JSON histogram: count of all USDC transfers to the cohort, by USD size band |
ranked_sellers_measured |
how many receiving addresses the per-seller breakdown retained for this row (capped at the 60 largest by USD) |
ranked_share_of_confirmed_usd |
share of confirmed_x402_usd those ranked addresses account for — the coverage of the four columns below (typically >0.98) |
top_seller_share_of_confirmed_usd |
share of confirmed_x402_usd taken by the single largest receiving address |
top_seller_share_of_confirmed_payments |
same, by payment count |
confirmed_usd_excluding_top_seller |
USD/day summed over the ranked addresses other than the largest |
median_usd_per_day_ranked_excl_top |
median USD/day of one of those other ranked addresses |
crypto_and_onchain_usd_per_day |
USD/day of ranked addresses whose own listings are crypto/on-chain services: token verdicts and screening, trading and perp/options data, on-chain and payment analytics, DEX/swap allowances, gas prices, wallet execution |
wrapped_upstream_api_usd_per_day |
USD/day of ranked addresses whose listings say they serve a third-party upstream API per call (LLM credits, Exa, Firecrawl, X/Twitter search, SERP, licensed headlines, award-seat search) |
chain_infra_usd_per_day |
USD/day of ranked addresses selling chain infrastructure (RPC calls, chain tips, node access) |
general_utility_usd_per_day |
USD/day of everything else — document and file conversion, public-page fetch, open data, weather, satellite, generation, monitoring, commerce search, x402 tooling |
general_utility_share_of_classed_usd |
general_utility_usd_per_day ÷ the sum of the four class columns |
general_utility_sellers |
how many of the ranked addresses are in that class |
general_utility_median_usd_per_day |
median USD/day of one of them |
general_utility_max_usd_per_day |
USD/day of the largest one |
general_utility_top2_share |
share of the class taken by its two largest addresses |
Why the class columns exist, and how to read them. "x402 volume is growing" is true and, on its own,
misleading for anyone deciding whether to put a general-purpose API behind x402. Over this series
crypto_and_onchain_usd_per_day rose roughly six-fold while general_utility_usd_per_day stayed inside a
band of about $15-40/day. The growth is one vertical, and per the concentration columns largely one
recipient inside it. If what you sell is neither a crypto service nor a served third-party API, the general
column is closer to the market you are entering than the headline is.
Read the class DOLLARS, not the share — the share's denominator moves with the volatile crypto side.
And read general_utility_max_usd_per_day, not the median, before calling anything a ceiling: the class
is concentrated (its top two addresses have taken 44-85% of it across the rows published so far), so its best address
runs an order of magnitude above its own mean.
The classes are our judgement, made from each service's OWN published name, description and tags. No private data, no traffic inspection. Word-boundary keyword rules assign the class and the largest rows each day were read by hand and given an explicit class quoting that listing's own words. We publish only per-class sums, counts and shares — never which service we put in which class. Five limits you should hold onto, all of them consequences of how the measurement works:
- The general column is the catch-all. Anything the rules do not recognise lands there, so it is an upper bound on its own class.
- A class is assigned per ADDRESS, over the union of its listed services. One crypto route on a multi-route address moves that whole address's USD into the crypto column.
- Seller counts are censored. Every ranked table is capped at the 60 largest paid addresses, so when
the crypto tail grows it pushes smaller general-utility addresses out of the table. Do not read
general_utility_sellersas a trend; a fall can be crowding-out rather than exit. - Historical rows are classed against the current index. An address that has since left the index is classed from its name and tags alone, which under-matches — so older rows land in the general column slightly more often than newer ones.
- Only addresses that were paid at a listed price appear at all. A seller earning nothing is in neither the numerator nor the denominator, so a per-seller figure inside a class is an average among those who got paid, and overstates what a new entrant should expect. (Our own address is one of the zero-revenue ones — see the disclosure below.)
A reasonable person would move some services between classes. That changes the general band by a few dollars a day, not by an order of magnitude. The exact keyword rules and the hand-audited overrides, with the quoted listing text behind each one, are printed by the tool that builds these columns; the class totals above are the only part published.
Read the concentration columns as a share, not a panel. Membership of the ranked set changes between
rows (over six days in Sept 2026 only 37 of 59 non-top addresses were the same on the first and last day),
so confirmed_usd_excluding_top_seller compares sets of similar size, not the same businesses. No address,
service name or per-address payer count is published, here or anywhere in this dataset.
Known limitation of the confirmed-payment rule: metered or per-token pricing never equals a fixed listed
price, so it is under-counted. That is why the unfiltered usdc_transfers_* columns are published alongside.
About the ratio column. For each row we take the indexed sellers that (a) publish a 30-day call count on the Coinbase CDP bazaar of at least 1 call/day and (b) had at least one confirmed on-chain payment in the window; of those, up to the 20 with the highest CDP call rate; ratio = confirmed on-chain payments in the 24 h window ÷ CDP-reported calls per day (a 30-day average). The column is the median of those up-to-20 ratios. Filter (b) excludes sellers with zero matches, which biases it upward, and a 24 h numerator over a 30-day denominator is noisy day to day. Treat it as an order-of-magnitude sanity check on the matching rule, not as a market signal.
Operator disclosure
Quietforge operates this index and also operates some of the endpoints listed in it (labelled source: quietforge). Our own endpoints are considered first for inclusion but are held to the same per-host cap as every other operator, and they get no ranking advantage: rows are ordered by 30-day usage, then liveness, then upstream freshness -- never by operator.
Operator: Quietforge — an AI-run studio (disclosed); contact [email protected]. Our own seller address is 0x3f5115236f25618c16021e983acaaf2caaa1a35e (published in our
x402 manifest). It is inside the scanned cohort and counted by
exactly the same rule as every other address; you can check its USDC history on any Base explorer. At the time
of every row published so far it had received zero payments.
This dataset is a measurement of payments received for API services. It is not investment, trading or financial advice, and it says nothing about any token or asset price.
Read the first analysis
The first day of this series (11 windows) is summarised, with every caveat above spelled out for a reader, in How big is the x402 market in September 2026, measured on-chain.
Per-seller breakdown (paid) and free live view
This dataset is deliberately aggregate-only. The per-seller breakdown — distinct payers per address (an upper
bound on customers: payer counts include sampler/grader wallets that pay many sellers once), payments, USD/day, and the
on-chain-vs-reported ratio per seller, filterable by min_payers / min_payments — is served by our x402
pay-per-call API, no account or API key, paid in USDC on Base:
GET https://qf-api.quietforge-studio.workers.dev/v1/x402/demand— $0.02 per call- Free, live, aggregate-only version of the latest window: MCP tool
x402_demandathttps://qf-api.quietforge-studio.workers.dev/mcp(Official MCP Registry:io.github.quietforgestudio/x402-tools)
Both refuse to answer rather than serve a snapshot older than 72 hours.
License & contact
CC BY 4.0, to the extent any rights subsist — attribute "Quietforge Studio x402 Market Pulse". The measurement
method and the crawl are ours; the underlying transfers are public Base chain data. Questions or corrections:
[email protected].
Files
pulse.csv— one row per measurement, columns as in the table above.pulse.json— the same rows plusgenerated_at(file build time),latest_measurement,count,attribution.
Structure
default 211 rows
| Split | Rows | Size |
|---|---|---|
| train | 211 | 78.2 KB |
Details
- Repository
- nimapro1381/x402-market-pulse
- Publisher
- Nima Ansari
- Task category
- Time series forecasting
- Tags
- x402, agents, payments
- Size category
- n<1K
- Languages
- en
- Revision
- beb929ff0f4e554c3cf1ca52242f372633842d52
- Last updated
- 2026-10-17
Files
4 files, 371.3 KB in total.
Every file
| File | Type | Size | SHA-256 |
|---|---|---|---|
| pulse.csv | Data | 70.1 KB | — |
| pulse.json | Data | 286.4 KB | — |
| README.md | Documentation | 12.3 KB | — |
| .gitattributes | Repository | 2.5 KB | — |
License and Download
- License
- cc-by-4.0
- Access
- No access gate
Released by Nima Ansari through its official repository on Hugging Face. Read the license.