Skip to main content
Wallet Classification turns raw stablecoin activity into a compact wallet profile: a balance tier, a wallet type, a behavioral segment, and 0–100 engagement and risk scores. Use it to size cohorts, segment users, and screen for volatile or anomalous wallets without building the feature pipeline yourself. Each row is a daily snapshot of one wallet on one chain(chain, address, snapshot_date) is the unique key.
Classification is derived from stablecoin transfers and balances (the top stablecoins per chain), not from a wallet’s full on-chain footprint. A wallet’s tier and scores describe its stablecoin behavior. A heavy NFT or DEX trader who rarely touches stablecoins will look small here. For a wallet’s broader activity, see Wallet 360.
Always filter by chain. The crosschain table unions 30+ chains, so an unfiltered scan reads every chain at once. Filtering by chain (and, where possible, snapshot_date) keeps queries fast and cheap — the table is clustered on snapshot_date, and chain is the natural partition. Every sample query below filters by chain for this reason.

Where it lives

SurfaceTableUse when
Crosschain (all chains)crosschain.wallet360.wallet_classificationYou want one query across chains — filter by chain.
Per chain<chain>.wallet_features.wallet_classificationYou only need one chain (e.g. ethereum.wallet_features.wallet_classification).
The crosschain table is a union of the per-chain tables, so both share the same columns. A wallet active on several chains appears as one row per chain — aggregate across rows (group by address) for a wallet’s multi-chain view.

How addresses are selected

The address universe is built from filtered stablecoin transfers, then snapshotted to each wallet’s most recent activity day.
1

Start from top stablecoins

Transfers of the top stablecoins per chain (the largest by volume) are the raw input. Activity in non-tracked tokens does not contribute.
2

Keep only organic, real-payment transfers

A transfer is included only when it is the largest USD leg of its transaction that day, the sender is organic, and the transfer is not a mint or burn. An address is flagged inorganic (and dropped) when it moves ≥ $10M or makes ≥ 1,000 transfers in a rolling 31-day window, or carries a bot/MEV label.
3

Exclude non-end-user addresses

Addresses labeled as exchanges, DeFi protocols, infrastructure, bridges, treasuries, tokens/contracts, or sanctioned are excluded, along with dust (max balance < 10 and 30-day volume &lt; 100) and obvious bot/test wallets (active nearly every day with an average transfer < $3).
4

Snapshot to the latest activity day

snapshot_date is the wallet’s last day of recorded stablecoin activity. Models run daily with a 30-day lookback so the rolling 30-day metrics stay correct. Downstream consumers typically take the latest snapshot per wallet.
No attribution labels (CEX / DeFi / infrastructure / entity names) are exposed in this table by design. Labels are used internally to assign wallet_type, but are not output as columns.

Classification dimensions

DimensionColumn(s)What it answers
Sizebalance_tierHow large is the wallet? (whale → dust, by max stablecoin balance)
Typewallet_typeConsumer, Business, or Institutional behavior
Lifecyclebehavioral_segment, combined_segmentNew, active, dormant, or churned
Engagementengagement_score, engagement_tier (+ recency/frequency/consistency)How consistently active is the wallet? (0–100)
Riskrisk_score, risk_flag (+ volatility/anomaly)How volatile or anomalous is its balance? (0–100)
See Wallet Classification Attributes for every column, its formula, and exact thresholds.

Sample queries

Distribution of wallets by balance tier and lifecycle on Ethereum, latest snapshot per wallet.
with latest as (
    select *
    from crosschain.wallet360.wallet_classification
    where chain = 'ethereum'                      -- always filter by chain
    qualify row_number() over (
        partition by address order by snapshot_date desc
    ) = 1
)
select
    balance_tier,
    behavioral_segment,
    count(*) as wallets
from latest
group by all
order by wallets desc
On chains without native end-of-day stablecoin balances, current_balance_usd and the balance-derived fields are reconstructed from net transfer flow and are best-effort rather than exact. Tiering and engagement signals remain directionally reliable.