Measure it to the payout address
Every claim we had about demand for an autonomous agent's services came from a request log. Then we counted the money that actually moved. Four numbers were wrong — including the ones in our own favour.
For several months I have run an agent whose job is to earn: it registers on marketplaces, publishes paid API routes, enters bounty boards, ships tools. It keeps a written ledger of what it believes about each lane. Recently I audited the ledger instead of the lanes, and found that the measurement layer had been quietly manufacturing conclusions for months.
None of this is about crypto in particular. It is about a distinction that applies to any product with an API: a request log answers "how many calls." Only the payment rail answers "who paid, how much, and was it us." We had been asking the first question and writing down answers to the second.
The phantom customer
We publish a handful of pay-per-call HTTP endpoints. The internal report on them said, in bold:
One client is 100% of paid volume — this is a customer, not a market.
Strategy followed from that sentence for weeks. Package for the whale. Price to the whale. Do not build a shelf nobody browses.
The sentence came from a log buffer roughly two days deep that happened to contain exactly one call, compared against an all-time counter of 512. Two denominators differing by orders of magnitude, divided, and read as a market share.
So I wrote a census that walks every inbound transfer to the receiving address and splits it by sender. Forty-five days, 566 transfers:
SELF (bootstrap payer) 156 settles $3.21 28% of calls, 59% of the DOLLARS
EXTERNAL 410 settles $2.19 from 124 DISTINCT addresses
external amounts: $0.005 x392 $0.010 x13 $0.020 x5
Three recorded beliefs died at once.
It was never one buyer. 124 distinct external addresses paid us in 45 days. The whale is real — it is still the single largest payer at 158 settles — but it is one of 124, not the market.
Our price ceiling was our own ask. The ledger said demand collapsed above half a cent. Eighteen settles landed above it, and in the most recent fortnight 38% of external payments were above the "ceiling," four of them at four times it. The receipts had been on-chain the whole time; nobody had gone and read them.
Most of the money was ours. Self-payments — a bootstrap payer used to smoke-test the paywall — were 59% of the dollars sitting in the wallet. Every headline number that did not exclude that address overstated external revenue by about 2.5×.
That last one deserves its own name, because it recurs. Third-party traction that counts your own money is not traction. We hit the identical bug on a completely different platform: a marketplace dashboard showed 52 runs of our tools in 30 days, and our own summary line proudly reported "52 external runs." It had computed that as total runs minus our own — which counts nobody. Attribution was available the whole time: every run object carries a user ID. Grouping by it gave the real answer, which was that the distinct-user count for the month was 1, and that 1 was us. Lifetime revenue, $0.00.
Ranking lanes by what leaves the payout address
The generalisation is a method, and it is cheap. For any platform that claims to pay, do not read the T&Cs or the funding announcement. Find the address it pays from — usually recoverable from the project's own deploy records — and measure the flow: total out, recipient count, median per recipient, and recency. The median is the number that decides whether the lane is enterable; a pool paying six figures to three insiders is not a lane.
Six lanes, measured this way in a single afternoon:
| Lane | What the payout address shows | Reality |
|---|---|---|
| Ecosystem builder rewards | ~5 ETH split across ~500 builders/month | $8–115/mo — the only one that paid |
| Selling paid API routes | $4,047/day of volume, 96.6% to one gateway | ~$0 |
| A funded grants escrow | $16,953 parked, $0 moved in 62 days | $0 |
| An on-chain bounty board | last payout 239 days ago, median claim ~$6 | $0 |
| ~30 agent marketplaces | $0.00 | $0 |
Reading the transfer log killed four candidate lanes in a day and stopped a fifth from being built. Nothing we have measured supports a headless service earning more than roughly $10–100 a month — which is a disappointing conclusion, and a far more useful one than the ledger's previous position, which was a plan.
Bounty boards: the prize is not the number you need
The same discipline applies to work, not just revenue. Agent task boards advertise a reward, and the reward is the only figure in the feed. On a live board this week:
| Task | Prize | Submissions | Expected value |
|---|---|---|---|
| Build a browser game (single HTML file) | $100 | 188 | $0.53 |
| Market research report | $20 | 17 | $1.18 |
| Ship an integration PR | $4.50 | 148 | $0.03 |
These are winner-take-all. The largest prize was the worst bet by more than 2×, and it was also the most work. The submission count was a single unauthenticated GET the whole time — the denominator was free, public, and absent from every alert we had written. Our watcher now fetches it and ranks the board by prize over rivals rather than by prize.
The three rules that came out of it
- Before believing any demand number, ask where it came from. Logs answer "how many requests." Only the payment rail answers "who paid, how much, and was it us." If a number about money came from a log, it is a hypothesis.
- Distrust any metric defined by subtraction. "Total minus ours" reports a population it never observed. Group by an identifier or admit you do not know.
- Check the denominators are the same size before dividing. A two-day buffer over an all-time counter produced a market share, a strategy, and weeks of work aimed at one address.
The uncomfortable part is that all four corrections were available at zero cost, in public data, the entire time. The obstacle was never access. It was that the numbers already in the ledger looked like measurements — they had units, they had precision, they were produced by scripts we wrote — and none of them had ever been checked against the money.