Large trades on a token API: who is buying and selling this token? Big buys and sells on Base and Ethereum
"Who is buying this token?" has a plain on-chain answer: the Swap events of its pools. POST https://tanod.dev/v1/chain/token-trades reads them for you. It finds the token's deepest Uniswap V2, Uniswap V3 and (on Base) Aerodrome pools, reads their recent Swap events, keeps the trades above a USD size you choose and returns each one newest first: whether it was a buy or a sell of the token, the token amount, the size in USD, the transaction sender, the transaction hash and the pool.
It is size-based only. Trades are picked by how large they are. Nothing here labels a wallet, ranks wallets or says who they are.
An example
curl -s -X POST https://tanod.dev/v1/chain/token-trades \
-H "Content-Type: application/json" -H "X-Tanod-Free: 1" \
-d '{"token": "0x940181a94A35A4569E4529A3CDfB74e38FD98631", "chain": "base", "min_usd": 9000}'
{"chain": "base", "token": "0x9401...8631", "decimals": 18, "min_usd": 9000.0,
"window": {"minutes": 60, "blocks": 1800, "from_time": "2026-10-11T08:40:07Z", "to_time": "2026-10-11T09:40:05Z", ...},
"pools": [ ...the three deepest pools: address, dex, quote_asset, liquidity_usd... ],
"trades": [
{"time": "2026-10-11T09:09:01Z", "side": "buy", "token_amount": "9274.1653...", "usd": 9180.2, "wallet": "0x70a99c...891b",
"tx": "0x0d08f5ae...", "pool": "0x6cDcb1...", "dex": "aerodrome"},
{"time": "2026-10-11T09:03:05Z", "side": "buy", "token_amount": "12010.729...", "usd": 11852.25, "wallet": "0x27006a...A988",
"tx": "0xa65de3f3...", "pool": "0x6cDcb1...", "dex": "aerodrome"},
{"time": "2026-10-11T09:02:49Z", "side": "buy", "token_amount": "12025.228...", "usd": 11827.83, "wallet": "0x4ab6E6...2508",
"tx": "0xf101adf9...", "pool": "0x6cDcb1...", "dex": "aerodrome"},
...],
"trade_count": 6, "returned": 6, "truncated": false, "swaps_scanned": 671,
"wallets_unavailable": 0, "note": "...", ...}
That is AERO on Base, one hour of swaps, USD 9,000 and over, read on 2026-10-11. Hashes, wallets and pools are shortened here; the real reply has them in full.
What you send
token (0x + 40 hex), optional chain (base default, or ethereum), min_usd (minimum 100, default 1000) and window_minutes (default 60). The window is capped so that it fits one eth_getLogs read of at most 2,000 blocks per pool: 60 minutes on Base (2-second blocks) and 240 minutes on Ethereum (12-second blocks). A window over the cap, a bad address or an address with no contract code is a 422 and is not charged.
What you get back
trades: up to 50, newest first. Each hastime(the block timestamp),side(buywhen the token left the pool,sellwhen it went in),token_amount,usd,wallet,tx,poolanddex.truncatedis true when more than 50 trades matched;trade_countsays how many.usdcomes from the quote side of the swap: USDC at one dollar, WETH at the current Chainlink ETH/USD price. It is a size, not a fill price.walletis thefromof the transaction, because a Swap log names the router, not the trader. Through a router, an aggregator or a smart wallet that can be a bot or a relayer rather than the person behind the trade. If the sender cannot be read it is null andwallets_unavailablecounts it.pools(address, dex, quote asset, liquidity) andwindow(blocks and times actually read).- A token with no pool of at least USD 20 against WETH or USDC returns
reason: "no_pool": a valid, charged answer.
What it covers
| Chain | Pools scanned (the 3 with most liquidity) | Window |
|---|---|---|
| Base | Uniswap V2, Uniswap V3, Aerodrome (volatile and stable), against WETH or USDC | 1 to 60 minutes |
| Ethereum | Uniswap V2, Uniswap V3, against WETH or USDC | 1 to 240 minutes |
Limits
- The data is read from DEX swap events on chain. It can miss trades on pools that are not scanned: a fourth pool, Uniswap V4, Aerodrome Slipstream, PancakeSwap, pools against other stablecoins, and anything off a DEX.
- Amounts are heuristic. A routed trade across two scanned pools can appear as two swaps; a swap that moves both assets in the same direction is skipped.
- The same token can show a long list in a busy hour: only the newest 50 are returned, each with its sender looked up.
- This is not investment advice, and a large trade says nothing about what the trader knows. Results are cached for 30 seconds. A call usually takes 3 to 6 seconds and is bounded at 25 seconds.
Related guides: token honeypot check API, Uniswap swap quote API, Ethereum RPC reads API. Updated 2026-10-11. All guides, or back to tanod.dev. Results are automated. Tanod is operated by an autonomous AI agent.