TACO reads Robinhood Chain directly. No third party API sits in between. Everything below is derived from swap events and pool balances the chain already published. Where a number is an estimate, this page says so.
A job polls the chain every ten seconds and reads the Swap events emitted by Uniswap V3 pools, bucketing them into rows one minute wide. Pool balances are read separately and less often, because they change slowly and cost more to fetch.
The indexer reads the latest block rather than the finalized one. Finality on this chain runs roughly eighteen minutes behind, which would make a five minute window meaningless. The cost of that choice is that a reorg could briefly change a number after the fact.
The headline. For each minute, the volume that moved through the pool is converted to US dollars and multiplied by the pool fee tier — or, on V4, taken from the fee the pool recorded charging. Fees 5m is the sum over the last five minutes, including the minute currently in progress, so the number moves within a minute rather than stepping once every sixty seconds.
This is fee revenue for the whole pool, not for you. What you would earn depends on your share of the liquidity, which is what the deposit calculator estimates.
The dollars that moved through the pool over the same five minutes, the figure the fee was taken out of. Each swap is counted once, on the side of it that is money — ETH, WETH or a stablecoin — rather than on the side the trader happened to pay in.
That distinction is not pedantic. A swap has two legs and they can disagree wildly about what it was worth: someone paying 0.000999 ETH for ten quadrillion units of a thin token has moved $2.53, but the token leg, valued at that token’s quoted price, reads as $3.5 trillion. Quoted prices describe the first unit out of a pool, not the ten quadrillionth. The money leg does not have that problem, so it is the one counted.
Where neither side is money, both paid-in legs are valued at their quoted prices instead, and the usual caution about thin-pool quotes applies.
It sits in the drawer next to the swap count because the pair is what makes either one mean something: the same $95 fee can be four hundred small trades or a single large one, and those are not the same pool to walk into.
Both are the same fact stated at different scales. The five minute fee is scaled to an hour (×12) or a year (×105,120) and divided by the pool's TVL.
These are extrapolations, not forecasts. A five minute burst annualised looks enormous, and TACO's own measurements say fee spikes on this chain last about five minutes. The median spike is over in that time, and almost none run past thirty. Treat a five figure APR as a description of the last five minutes, nothing more. It is also why the raw fee figure sits above the APR rather than below it.
The last complete minute of fees divided by the average of the five minutes before it. Above 1.0× the pool is earning faster than it just was. Below, it is cooling off.
The minute in progress is deliberately excluded here. A partial minute is always smaller than a whole one, and including it would drag every pool's ratio down.
A pool that earned fees this minute after five silent ones has no baseline to divide by. That is not missing data, it is the sharpest version of the thing momentum measures, so it reads NEW and sorts above every finite ratio. The dash in that column is reserved for the other case: no fees in the last complete minute at all.
This is the number that separates arriving from leaving. A pool can show large Fees 5m and a momentum of 0.1×, which means almost all of that money was earned four minutes ago.
The pool's own price at the end of the window against its price at the start, computed from the square root price the pool records on each swap. It is the pool price, not a market average. An isolated pool can drift from everywhere else.
It sits next to the fees on purpose. Fees come from volume, volume moves price, and price movement is impermanent loss. A high fee number with a large price move is not free money.
Both token balances held by the pool contract, priced in dollars. It refreshes on a slower cycle than fees. Once a reading is more than ten minutes old it is not shown: the TVL and the APR divided by it both read as a dash until the pool is read again, rather than printing an old size next to current fees. Pools with no recent trading are not polled at all, which is another reason a row can show a dash.
Reading a balance costs a chain call, and only so many fit in one pass. The pools that traded in the last fifteen minutes are queued by fees, highest first, with never priced pools breaking ties, so the top of the leaderboard is priced before the tail. A pool can still appear with NO TVL on the pass where it first arrives.
Stablecoins and the chain's major assets anchor the price graph. Everything else is priced by following pools back to one of those anchors. The further a token sits from an anchor, the more room the dollar figure has to be wrong, and three hops or more earns a LOOSE $ flag.
For each minute, the largest recipients of swap output are recorded. Over the five minute window, the biggest single address's share is what drives the 1 WALLET flag at more than 50%.
A swap names its recipient, and on a route with several hops that recipient is the router, not the person. Routers are found by how widely they appear: an address that receives in ten or more different pools inside five minutes is infrastructure, not a trader, and it is excluded from the numerator. Its volume stays in the denominator, so removing it can only lower the share, never invent one. The drawer reports how much of the flow arrived that way, because for that portion the trader simply cannot be identified from the logs.
The flag also needs at least ten swaps in the window. Below that, one address holding most of the volume says more about the sample than about the market. Only the loudest addresses per minute are kept, so read this as “is one address doing all of this?” rather than as an exact percentage.
None of this applies to V4 pools, and TACO does not report it for them. A V4 swap log names the address that called the pool manager rather than the recipient, and a V4 swap can only be made from inside a callback, so that address always belongs to a contract — there is no trader in the log to find. Checking the code on chain for every address TACO had classed as a direct wallet on V4 returned contracts for all of them, against a V3 control where four in five were ordinary accounts. So on a V4 row the busiest-wallet share and the wallet count read —, the routed share reads 100%, and the 1 WALLET flag cannot fire. Recovering the real trader would mean fetching every transaction behind every swap, which is not something this runs on. A blank is the honest answer; a number made of router addresses is not.
Taken from the pool's creation event, indexed back to the chain's first block, not from when TACO first noticed the pool. Timestamps are interpolated between sampled block headers, so an age can be off by a few minutes on old pools. Pools whose creation event has not been indexed yet read age ? rather than a guess.
Every row carries its age, not only the ones under a day old. Age on its own decides nothing. It is what the other numbers get read against. Eight months and $30M of liquidity paying $160 is a different proposition from twenty minutes and $12k paying the same amount, and that difference is only visible when both facts share a line.
Flags are evidence, not advice. None of them removes a pool from the ranking. A flagged pool stays exactly where its fees put it, labelled.
A pool that trips none of them is labelled too, as no flags. An empty space would be ambiguous between “checked, found nothing” and “never looked”. It is a statement about the checks below, not a verdict on the pool: TACO does not read contracts, ownership, or anything that happened before its window.