Farbeam

Research desks

A team that needs raw inputs for its own analysis can pull large transfers and market data from one API, and keep its own copy. Farbeam stores transfers for 7 days only, and it has no export. It does not produce conclusions, and a desk has to build its own dataset to study anything longer than a week.

#Workflow

  1. Decide the scope, and write it down: chains, tokens and threshold. Check them against chain coverage and curated tokens.
  2. Page through GET /transfers with min_usd, and use meta.next_cursor as before. Store rows in your own database, with uid as the unique key.
  3. Repeat at least once a day, or the 7-day limit will remove rows you have not saved.
  4. Record the GET /status values with each pull: measuring_since and the state of each chain. Gaps in coverage are part of your dataset.
  5. Add market context from the stablecoin, DEX and pool endpoints. Save each response with its time, because these endpoints return only the current values or the source's own series.
  6. Add rules for events that you want to read at once. Sign in to the console with a Solana wallet to save them.

#Grouping rows

Group rows in your own code. This is real output from a run at 2026-11-04T19:48:37Z, over 4,315 rows of $100,000 or more. The full table and the method are on Where large transfers land.

to_typeRowsUSD
No label4,216$3,365,777,357
infrastructure41$91,279,429
exchange43$39,845,404
dex14$5,018,809
staking1$608,587

#Rules

Each rule was tested with POST /rules/validate at 2026-11-04T19:49:01Z against the newest 2,000 stored rows, from 19:27:23Z to 19:48:31Z.

RulePurposeMatches
sampled == false and token in ["USDC","USDT","DAI"] and usd >= 10mLarge stablecoin moves on fully read chains16
token in ["WBTC","cbBTC","BTCB"] and usd >= 1mLarge wrapped BTC moves2
usd >= 5m and not from_type == "dex" and not to_type == "dex"Large moves with no labeled DEX on either side28
to_type == "exchange" and usd >= 1mLarge moves to labeled exchanges2
chain == "solana"Any Solana row in the stored data1

The counts come from about 21 minutes of data on one evening, so they do not show a typical rate. A rule with many matches also loses events to its cooldown, so use the transfer list as your record and use rules as a prompt to look.

#Fields to record

FieldWhy you need it
uidUnique per row, so repeated pulls do not duplicate data
txGroups the rows of one transaction
ts, blockThe time and block of the transfer
usdValue at the price held when the row was stored. It is not a settled price
sampledTrue on Solana rows, which come from partial readers
from_label, to_label, from_type, to_typeLabels at the time of the pull. Save them, because the label set can change

#What it will not do