Farbeam
Docs / Core concepts

Transfers vs trades

A transfer row records that a token balance moved from one address to another. It is not a trade. It does not name a buyer or a seller, and it holds no price paid, no intent and no view on what happens next.

Most wrong conclusions from on-chain data start here, so this page sets out what the row supports.

#What a row states

The row statesSource
Token units moved from from to to in transaction txERC-20 Transfer log, or a balance change on Solana
The block or slotChain data
The USD value at a reference price at index timeCoinGecko price
A name for from or to, when the address is in the label setHand-curated list

#What a row does not state

Common readingWhy the row cannot support it
"Someone bought X"A token moved. A swap, a loan, a deposit, a bridge or an internal sweep produces the same log.
"Someone paid this price"usd is a reference value. The row holds no execution price.
"This wallet is one person"Addresses are not people. No clustering exists here.
"Sent to an exchange means a sale is coming"A deposit is a deposit. Exchanges move funds between their own wallets too.
"From an exchange means accumulation"A withdrawal can go to another exchange, a market maker or a custody address.
"Total volume was $X"Rows repeat value across hops and cover only the curated tokens.

#One transaction, many rows

Each qualifying log becomes its own row. A route through several contracts produces several rows that carry the same value.

This real transaction on Ethereum was captured on 2026-11-04 UTC. It moves about 1.48 million USDC through four hops in one transaction.

Log indexTokenAmountUSDFrom (prefix)To (prefix)
537USDC1,482,328.311,481,8420xa56da90x029125
540USDC1,482,328.311,481,8420x0291250xe01810
544USDC1,482,328.311,481,8420xe018100xce0b17
548USDC1,482,328.311,481,8420xce0b170xbbbbbb

Transaction: 0x113d561da2487dec35344a17047525e51bb20cb264e1e80369abb9e2fede8f6c.

Summing usd on these rows gives $5.93 million for a movement of $1.48 million. Transfer statistics sum rows this way, so read them as "value of qualifying logs", and not as money moved.

To count distinct movements, group by tx and take the largest value per token.

curl -s "https://farbeamlabs.com/api/v1/transfers?chain=ethereum&limit=100" \
  | jq '[.data[]] | group_by(.tx + .token) | map(max_by(.usd).usd) | add'
const res = await fetch("https://farbeamlabs.com/api/v1/transfers?chain=ethereum&limit=100");
const { data } = await res.json();
const best = new Map();
for (const row of data) {
  const key = `${row.tx}:${row.token}`;
  best.set(key, Math.max(best.get(key) ?? 0, row.usd));
}
console.log([...best.values()].reduce((a, b) => a + b, 0));
import requests

rows = requests.get(
    "https://farbeamlabs.com/api/v1/transfers",
    params={"chain": "ethereum", "limit": 100},
    timeout=30,
).json()["data"]
best = {}
for r in rows:
    key = (r["tx"], r["token"])
    best[key] = max(best.get(key, 0), r["usd"])
print(sum(best.values()))

#Patterns that look like something else

What you seeWhat it often is
from_label is Null addressA mint. New supply, or a wrapped asset being issued.
to_label is Null addressA burn or a redemption
Same value, several rows, one txA route through contracts
Two tokens of near-equal value, one txPossibly a swap. Open the transaction. A row alone cannot confirm it.
SOL and wSOL rows of equal valueWrap or unwrap, or a Solana swap counted on both scans
Exchange to exchange, same nameAn internal move
An address with no labelUnknown. It is not "a whale" or "a retail wallet".

#What a row needs to become a claim

If you want to say more than "a transfer happened", gather more.

  1. Read the full transaction with Transaction lookup: status, method and all token movements.
  2. Read both addresses with Wallet overview, and check is_contract.
  3. Look at the label and its type, and remember a missing label means nothing.
  4. State what you do not know.

#Failed transactions

ERC-20 rows come from logs, which exist only in successful transactions. Native ETH rows are read from the block's transaction list, and each gets a receipt check, so a reverted native transfer is not stored. Failed Solana transactions are skipped.

#Using this data responsibly

Farbeam shows that movements happened. It makes no statement on why, and makes no buy or sell calls. Large transfers do not predict price. Nothing here is financial advice. Read the disclaimer.