Skip to main content

Traders API — Real-Time Wallet Trade Streams

Bitquery Traders API lets you stream wallet trades in real time across Solana, Ethereum, BSC, Base, and Arbitrum . You can track a single wallet or multiple addresses, detect whale trades above a USD threshold, filter by token, pair, DEX program, or chain, rank top traders by volume or PnL, and aggregate buy/sell USD with sum, calculate, limitBy, and orderBy using GraphQL subscriptions and queries.

This page focuses on trader/wallet-centric queries using the unified Trading schema. For trade-level streaming (by token, pair, chain, or DEX), see the Trades API.

Video Tutorial


How Do I Stream All Trades for a Specific Wallet?

Subscribe to every DEX trade a wallet executes in real time across all supported chains — captures buys and sells across all tokens and DEXs, returning token pair, USD amounts, market cap, supply, pool, and transaction metadata. Useful for copy trading bots, whale watching, and wallet activity feeds.

You can run this subscription in the Bitquery IDE.

subscription {
Trading {
Trades(
where: {
Trader: {Address: {is: "GWcAopUZKokUUQAMDrNzd1YVHLJqbzJomu2pzNqLe9U3"}}
}
) {
Side
Supply {
CirculatingSupply
MarketCap
}
Trader {
Address
}
TransactionHeader {
Fee
FeePayer
Sender
To
}
Amounts {
Base
Quote
}
AmountsInUsd {
Base
Quote
}
Block {
Date
Time
Timestamp
}
Pair {
Pool {
Address
}
Market {
Address
Program
Network
}
Token {
Address
Id
IsNative
Symbol
TokenId
Network
}
QuoteToken {
Address
Id
IsNative
Symbol
TokenId
Network
}
}
}
}
}

How Do I Track a Wallet's Trades on a Specific Token?

Filter a wallet's trade stream to a single token — combines Trader.Address with any on Pair.Token.Id and Pair.QuoteToken.Id so the token is matched whether it appears on the base or quote side of the pair. Returns side, USD amounts, market cap, supply, and pool for every trade — useful for position tracking, entry/exit analysis, and per-token wallet stats.

You can run this subscription in the Bitquery IDE.

subscription {
Trading {
Trades(
where: {any: [
{Pair: {Token: {Id: {is: "bid:solana:4YiLHDR4B4pE4R5GUMA8HG8YunyeLwcobtEtvwMupump"}}}},
{Pair: {QuoteToken: {Id: {is: "bid:solana:4YiLHDR4B4pE4R5GUMA8HG8YunyeLwcobtEtvwMupump"}}}}],
Pair: {Market: {Network: {is: "Solana"}}},
Trader: {Address: {is: "GWcAopUZKokUUQAMDrNzd1YVHLJqbzJomu2pzNqLe9U3"}}}
) {
Side
Supply {
CirculatingSupply
MarketCap
}
Trader {
Address
}
TransactionHeader {
Fee
FeePayer
Sender
To
}
Amounts {
Base
Quote
}
AmountsInUsd {
Base
Quote
}
Block {
Date
Time
Timestamp
}
Pair {
Pool {
Address
}
Market {
Address
Program
Network
}
Token {
Address
Id
IsNative
Symbol
TokenId
Network
}
QuoteToken {
Address
Id
IsNative
Symbol
TokenId
Network
}
}
}
}
}

How Do I Monitor Multiple Wallets in One Subscription?

Watch multiple wallets in a single real-time subscription using the in operator on Trader.Address — captures every buy and sell across all tokens for your entire watchlist. Ideal for copy trading dashboards, fund monitoring, and whale group tracking.

You can run this subscription in the Bitquery IDE.

subscription {
Trading {
Trades(
where: {
Trader: {Address: {in: [
"GWcAopUZKokUUQAMDrNzd1YVHLJqbzJomu2pzNqLe9U3",
"7eWHXZefGY98o9grrrt1Z3j7DcPDEhA4UviQ1pVNhTXX",
"6LNdbvyb11JH8qxAsJoPSfkwK4zJDQKQ6LNp4mxt8VpR"
]}}
}
) {
Side
Supply {
CirculatingSupply
MarketCap
}
Trader {
Address
}
TransactionHeader {
Fee
FeePayer
Sender
To
}
Amounts {
Base
Quote
}
AmountsInUsd {
Base
Quote
}
Block {
Date
Time
Timestamp
}
Pair {
Pool {
Address
}
Market {
Address
Program
Network
}
Token {
Address
Id
IsNative
Symbol
TokenId
Network
}
QuoteToken {
Address
Id
IsNative
Symbol
TokenId
Network
}
}
}
}
}

How Do I Stream a Wallet's Trades on a Specific Chain?

Filter a wallet's real-time trade stream to a single chain (e.g. Solana, Ethereum, BSC) by combining Trader.Address with Pair.Market.Network. Returns every swap the wallet executes on that chain with side, USD amounts, market cap, pool, and transaction details.

You can run this subscription in the Bitquery IDE.

subscription {
Trading {
Trades(
where: {
Pair: {Market: {Network: {is: "Solana"}}}
Trader: {Address: {is: "GWcAopUZKokUUQAMDrNzd1YVHLJqbzJomu2pzNqLe9U3"}}
}
) {
Side
Supply {
CirculatingSupply
MarketCap
}
Trader {
Address
}
TransactionHeader {
Fee
FeePayer
Sender
To
}
Amounts {
Base
Quote
}
AmountsInUsd {
Base
Quote
}
Block {
Date
Time
Timestamp
}
Pair {
Pool {
Address
}
Market {
Address
Program
Network
}
Token {
Address
Id
IsNative
Symbol
TokenId
Network
}
QuoteToken {
Address
Id
IsNative
Symbol
TokenId
Network
}
}
}
}
}

Change Network to "Ethereum", "Binance Smart Chain", "Base", "Arbitrum", etc. for other chains.


How Do I Detect Whale Traders in Real Time?

Stream large trades above a USD threshold across all chains — each event includes the trader wallet address, token pair, USD amounts, market cap, pool, and transaction details. Use for whale alert bots, smart money feeds, and large-order flow monitoring.

You can run this subscription in the Bitquery IDE.

subscription {
Trading {
Trades(where: {AmountsInUsd: {Base: {gt: 100000}}}) {
Side
Supply {
CirculatingSupply
MarketCap
}
Trader {
Address
}
TransactionHeader {
Fee
FeePayer
Sender
To
}
Amounts {
Base
Quote
}
AmountsInUsd {
Base
Quote
}
Block {
Date
Time
Timestamp
}
Pair {
Pool {
Address
}
Market {
Address
Program
Network
}
Token {
Address
Id
IsNative
Symbol
TokenId
Network
}
QuoteToken {
Address
Id
IsNative
Symbol
TokenId
Network
}
}
}
}
}

Adjust the gt threshold — e.g. 10000 for $10K+, 1000000 for $1M+ trades.


How Do I Stream Whale Trades for a Specific Wallet?

Combine wallet address and USD amount threshold to stream only large trades by a specific wallet — useful for tracking when a known whale or smart money wallet makes a significant move above your chosen USD value.

You can run this subscription in the Bitquery IDE.

subscription {
Trading {
Trades(
where: {
Trader: {Address: {is: "GWcAopUZKokUUQAMDrNzd1YVHLJqbzJomu2pzNqLe9U3"}}
AmountsInUsd: {Base: {gt: 10000}}
}
) {
Side
Supply {
CirculatingSupply
MarketCap
}
Trader {
Address
}
TransactionHeader {
Fee
FeePayer
Sender
To
}
Amounts {
Base
Quote
}
AmountsInUsd {
Base
Quote
}
Block {
Date
Time
Timestamp
}
Pair {
Pool {
Address
}
Market {
Address
Program
Network
}
Token {
Address
Id
IsNative
Symbol
TokenId
Network
}
QuoteToken {
Address
Id
IsNative
Symbol
TokenId
Network
}
}
}
}
}

How Do I Get Recent Trades for a Wallet (Last 10 Minutes)?

Query a wallet's most recent trades using Block.Time.since_relative — returns trades sorted by most recent first with side, USD amounts, market cap, pool, and token pair. Ideal for building wallet activity feeds, recent trades tables, and portfolio dashboards.

You can run this query in the Bitquery IDE.

{
Trading {
Trades(
orderBy: {descending: Block_Time}
where: {
Block: {Time: {since_relative: {minutes_ago: 10}}}
Trader: {Address: {is: "GWcAopUZKokUUQAMDrNzd1YVHLJqbzJomu2pzNqLe9U3"}}
}
) {
Side
Supply {
CirculatingSupply
MarketCap
}
Trader {
Address
}
TransactionHeader {
Fee
FeePayer
Sender
To
}
Amounts {
Base
Quote
}
AmountsInUsd {
Base
Quote
}
Block {
Date
Time
Timestamp
}
Pair {
Pool {
Address
}
Market {
Address
Program
Network
}
Token {
Address
Id
IsNative
Symbol
TokenId
Network
}
QuoteToken {
Address
Id
IsNative
Symbol
TokenId
Network
}
}
}
}
}

How Do I Monitor Multiple Wallets Trading a Specific Token?

Combine a wallet watchlist with a token filter using the any combinator on Pair.Token.Id and Pair.QuoteToken.Id — captures trades where any of the watched wallets swap the token on either side of the pair. Ideal for tracking smart money positions on a token, coordinated trading detection, and group wallet analysis.

You can run this subscription in the Bitquery IDE.

subscription {
Trading {
Trades(
where: {Trader: {Address: {in: ["GWcAopUZKokUUQAMDrNzd1YVHLJqbzJomu2pzNqLe9U3", "7eWHXZefGY98o9grrrt1Z3j7DcPDEhA4UviQ1pVNhTXX"]}}, any: [{Pair: {Token: {Id: {is: "bid:solana:4YiLHDR4B4pE4R5GUMA8HG8YunyeLwcobtEtvwMupump"}}}}, {Pair: {QuoteToken: {Id: {is: "bid:solana:4YiLHDR4B4pE4R5GUMA8HG8YunyeLwcobtEtvwMupump"}}}}]}
) {
Side
Supply {
CirculatingSupply
MarketCap
}
Trader {
Address
}
TransactionHeader {
Fee
FeePayer
Sender
To
}
Amounts {
Base
Quote
}
AmountsInUsd {
Base
Quote
}
Block {
Date
Time
Timestamp
}
Pair {
Pool {
Address
}
Market {
Address
Program
Network
}
Token {
Address
Id
IsNative
Symbol
TokenId
Network
}
QuoteToken {
Address
Id
IsNative
Symbol
TokenId
Network
}
}
}
}
}

How Do I Stream a Wallet's Trades on a Specific DEX?

Filter a wallet's trade stream to a specific DEX program (e.g. Raydium, PumpSwap, PancakeSwap) by combining Trader.Address with Pair.Market.Program. Useful for understanding which DEXs a wallet prefers, protocol-level analytics, and DEX-specific copy trading.

You can run this subscription in the Bitquery IDE.

subscription {
Trading {
Trades(
where: {
Trader: {Address: {is: "GWcAopUZKokUUQAMDrNzd1YVHLJqbzJomu2pzNqLe9U3"}}
Pair: {Market: {Program: {is: "pAMMBay6oceH9fJKBRHGP5D4bD4sWpmSwMn52FMfXEA"}}}
}
) {
Side
Supply {
CirculatingSupply
MarketCap
}
Trader {
Address
}
TransactionHeader {
Fee
FeePayer
Sender
To
}
Amounts {
Base
Quote
}
AmountsInUsd {
Base
Quote
}
Block {
Date
Time
Timestamp
}
Pair {
Pool {
Address
}
Market {
Address
Program
Network
}
Token {
Address
Id
IsNative
Symbol
TokenId
Network
}
QuoteToken {
Address
Id
IsNative
Symbol
TokenId
Network
}
}
}
}
}

Change the Program address to target different DEXs — e.g. 6EF8rrecthR5Dkzon8Nwu78hRvfCKubJ14M5uBEwF6P for Pump.fun.


How Do I Get a Wallet's Trades on a Specific Pair?

Filter a wallet's trades to a specific token pair (e.g. WSOL/USDC) by combining Trader.Address, Pair.Token.Id, and Pair.QuoteToken.Id — captures every swap the wallet makes between those two tokens across all pools and DEXs. Useful for pair-level position tracking and per-pair PnL.

You can run this subscription in the Bitquery IDE.

subscription {
Trading {
Trades(
where: {
Trader: {Address: {is: "GWcAopUZKokUUQAMDrNzd1YVHLJqbzJomu2pzNqLe9U3"}}
Pair: {
Token: {Id: {is: "bid:solana:So11111111111111111111111111111111111111112"}}
QuoteToken: {Id: {is: "bid:solana:EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v"}}
}
}
) {
Side
Supply {
CirculatingSupply
MarketCap
}
Trader {
Address
}
TransactionHeader {
Fee
FeePayer
Sender
To
}
Amounts {
Base
Quote
}
AmountsInUsd {
Base
Quote
}
Block {
Date
Time
Timestamp
}
Pair {
Pool {
Address
}
Market {
Address
Program
Network
}
Token {
Address
Id
IsNative
Symbol
TokenId
Network
}
QuoteToken {
Address
Id
IsNative
Symbol
TokenId
Network
}
}
}
}
}

Who Are the Top Traders on Solana by Trade Count in the Last Hour?

Rank the most active traders on Solana in the last hour by number of trades — returns trade count, average trade size in USD, and total volume per wallet address. Useful for identifying high-frequency traders, bot wallets, market makers, and the most active participants on-chain right now.

You can run this query in the Bitquery IDE.

{
Trading {
Trades(
orderBy: [{descendingByField: "count"}]
where: {Block: {Time: {since_relative: {hours_ago: 1}}}, Pair: {Market: {Network: {is: "Solana"}}}}
) {
count
average_trade_size: average(of: AmountsInUsd_Quote)
sum(of: AmountsInUsd_Quote)
Trader {
Address
}
}
}
}

How Do I Calculate a Wallet's PnL for a Specific Token (Last 30 Minutes)?

Aggregate Trades over Block.Time (last 30 minutes) for one Pair.Token.Id and one Trader.Address. PnL is Amount_Sold − Amount_Bought on AmountsInUsd_Base; native sums use Amounts_Base. Useful for short-window position PnL, per-wallet token performance, and trading dashboards.

You can run this query in the Bitquery IDE.

{
Trading {
Trades(
where: {
Block: {Time: {since_relative: {minutes_ago: 30}}}
Pair: {
Token: {
Id: {is: "bid:solana:8xs8TCoAMJ4zj5aeXmrDP2BechGrXLMzVyMVBxfCpump"}
}
}
Trader: {Address: {is: "QeHykJGZj6B2Syhi5a63t9oaLTwKXZqM4J5PjeZBWC2"}}
}
) {
Trader {
Address
}
Amount_Bought: sum(of: AmountsInUsd_Base, if: {Side: {is: "Buy"}})
Amount_Sold: sum(of: AmountsInUsd_Base, if: {Side: {is: "Sell"}})
Amount_Bought_native: sum(of: Amounts_Base, if: {Side: {is: "Buy"}})
Amount_Sold_native: sum(of: Amounts_Base, if: {Side: {is: "Sell"}})
PnL: calculate(expression: "$Amount_Sold - $Amount_Bought")
buys: count(if: {Side: {is: "Buy"}})
sells: count(if: {Side: {is: "Sell"}})
Pair {
Currency {
Id
Name
Symbol
}
Market {
Address
Program
Network
}
Token {
Address
Id
IsNative
Symbol
TokenId
Network
}
QuoteToken {
Address
Id
IsNative
Symbol
TokenId
Network
}
}
}
}
}

How Do I Rank Top Traders by PnL for a Specific Pool (Last 30 Minutes)?

Rank traders by PnL on one pool: filter Pair.Market.Address, last 30 minutes, limit: 10, and orderBy PnL descending. Useful for leaderboards, smart-money screens, and pool-specific trader analytics.

You can run this query in the Bitquery IDE.

{
Trading {
Trades(
limit: {count: 10}
orderBy: [{descendingByField: "PnL"}]
where: {
Block: {Time: {since_relative: {minutes_ago: 30}}}
Pair: {Market: {Address: {is: "2axyccPzS7Ei57c7ESEq7tBpo4HxtpfCR9gKxh5uNUpu"}}}
}
) {
Trader {
Address
}
Amount_Bought: sum(of: AmountsInUsd_Base, if: {Side: {is: "Buy"}})
Amount_Sold: sum(of: AmountsInUsd_Base, if: {Side: {is: "Sell"}})
Amount_Bought_native: sum(of: Amounts_Base, if: {Side: {is: "Buy"}})
Amount_Sold_native: sum(of: Amounts_Base, if: {Side: {is: "Sell"}})
PnL: calculate(expression: "$Amount_Sold - $Amount_Bought")
buys: count(if: {Side: {is: "Buy"}})
sells: count(if: {Side: {is: "Sell"}})
}
}
}

How Do I Rank Top Traders on Solana by PnL (Last 30 Minutes)?

Across Solana pairs in the window, aggregate one row per trader with limitBy: {count: 1, by: Trader_Address}, then return the top 10 by PnL. Useful for chain-wide PnL leaderboards and short-horizon trader rankings.

You can run this query in the Bitquery IDE.

{
Trading {
Trades(
limit: {count: 10}
limitBy: {count: 1, by: Trader_Address}
orderBy: [{descendingByField: "PnL"}]
where: {
Block: {Time: {since_relative: {minutes_ago: 30}}}
Pair: {Market: {Network: {is: "Solana"}}}
}
) {
Trader {
Address
}
Amount_Bought: sum(of: AmountsInUsd_Base, if: {Side: {is: "Buy"}})
Amount_Sold: sum(of: AmountsInUsd_Base, if: {Side: {is: "Sell"}})
Amount_Bought_native: sum(of: Amounts_Base, if: {Side: {is: "Buy"}})
Amount_Sold_native: sum(of: Amounts_Base, if: {Side: {is: "Sell"}})
PnL: calculate(expression: "$Amount_Sold - $Amount_Bought")
buys: count(if: {Side: {is: "Buy"}})
sells: count(if: {Side: {is: "Sell"}})
}
}
}

Extend your trader analytics with these complementary Bitquery APIs — trade streams, price data, market cap, OHLC, and chain-specific DEX docs for deeper wallet and token analysis.

  • Trades API — stream trades by token, pair, chain, DEX, or USD threshold (not wallet-filtered)
  • Crypto MarketCap API — USD market cap, FDV, and token supply data
  • Crypto Price API — Tokens, Pairs, Currencies cubes and Kafka trading.prices
  • OHLC / K-line API — candlestick and interval data for charting
  • Solana DEX Trades — chain-level DEXTrades and DEXTradeByTokens with aggregation (top traders, PnL, first buyers)
  • Solana Trader API — Solana-specific wallet queries with DEXTradeByTokens aggregation
  • BSC DEX Trades — BSC top traders by profit, first buyers, and per-wallet token stats
  • Pump.fun API — Pump.fun trades, bonding curve, top traders, and market cap
  • PumpSwap API — PumpSwap AMM trades, pools, and pricing
  • gRPC Copy Trading Bot — low-latency CoreCast gRPC streaming for copy trading