Robinhood Token Holders API — Rankings, Counts & Distribution
Query token holders on Robinhood with Bitquery's dedicated EVM.Holders cube — the token-centric view: who holds a token, ranked by balance, with per-holder change history (FirstChangeTime, LastChangeTime, UpdateCount) built in. One query replaces the transfer-indexing pipeline you would otherwise need, and it powers holder leaderboards, holder counts, distribution stats, whale floors, dormancy screens, and airdrop snapshots.
For the wallet-centric view — one address's full portfolio — use the Robinhood Balances API instead. Every query on this page was executed against the production endpoint before publishing.
To query or stream data outside the Bitquery IDE, you need an API access token.
Follow the steps here: How to generate Bitquery API token ➤
- Robinhood Balances API
- Robinhood Token Supply API
- Robinhood Transfers (live movement between holders)
- Robinhood Trades (prices to value holdings)
On this page: Concepts · Top holders · Holder count · Whale floors · Distribution · Dormant holders · Stock tokens · ETH rich list · Pagination · FAQ
Cube concepts
- Rows are (holder, token) pairs:
Holder.Addressplus aBalancewithAmount,FirstChangeTime,LastChangeTime, andUpdateCount. SelectCurrencyfields when you query across tokens. - Use
dataset: archive— holder tables are computed from full history. - No USD field on this cube — threshold and rank by token
Amount(USDG ≈ dollars); join prices from the Trades API to value holdings. Balance.LastChangeTime.tillfilters by inactivity, not history: a future date includes every holder (the current snapshot); a past date returns only wallets whose balance hasn't changed since then — with their frozen balances — which makes it a dormancy screen, not time travel.- A plain
countincludes everyone who ever held (including now-zero balances). AddBalance: { Amount: { gt: "0" } }for current holders — the two numbers differ a lot on active tokens. - The cube also accepts
Holder.Addressfilters for wallet-side lookups, but portfolios are better served by the Balances API.
Top holders of a token
The holder leaderboard — ranked by balance, with each holder's history stats. Example: USDG. The future-dated LastChangeTime.till explicitly includes all holders (see concepts); tighten it to screen for dormancy.
{
EVM(dataset: archive, network: robinhood) {
Holders(
where: {
Currency: { SmartContract: { is: "0x5fc5360d0400a0fd4f2af552add042d716f1d168" } }
Balance: { LastChangeTime: { till: "2026-07-31T11:59:59Z" } }
}
limit: { count: 100 }
orderBy: { descending: Balance_Amount }
) {
Holder {
Address
}
Balance {
Amount
FirstChangeTime
LastChangeTime
UpdateCount
}
}
}
}
Holder count of a token
One number per question: how many wallets currently hold the token (with the gt: "0" filter), or how many ever held it (without).
{
EVM(dataset: archive, network: robinhood) {
Holders(
where: {
Currency: { SmartContract: { is: "0x5fc5360d0400a0fd4f2af552add042d716f1d168" } }
Balance: { Amount: { gt: "0" } }
}
) {
holders: count
}
}
}
Drop the Balance filter to count all-time holders instead.
Holders above a balance floor
Whale lists and eligibility checks: a regular where filter on Balance.Amount keeps only holders above a threshold — for USDG, the floor is effectively in dollars.
{
EVM(dataset: archive, network: robinhood) {
Holders(
where: {
Currency: { SmartContract: { is: "0x5fc5360d0400a0fd4f2af552add042d716f1d168" } }
Balance: { Amount: { ge: "100000" } }
}
limit: { count: 10 }
orderBy: { descending: Balance_Amount }
) {
Holder {
Address
}
Balance {
Amount
}
}
}
}
Holder distribution statistics
Concentration analysis in one aggregate call: current holder count, total held, and the mean / median / 99th-percentile holder size. Expect a long tail — the median holder is typically far below the mean.
{
EVM(dataset: archive, network: robinhood) {
Holders(
where: {
Currency: { SmartContract: { is: "0x5fc5360d0400a0fd4f2af552add042d716f1d168" } }
Balance: { Amount: { gt: "0" } }
}
) {
holders: count
total: sum(of: Balance_Amount)
avg: average(of: Balance_Amount)
med: median(of: Balance_Amount)
p99: quantile(of: Balance_Amount, level: 0.99)
}
}
}
standard_deviation and other quantile levels are available for deeper concentration metrics (top-N share is easiest computed client-side from the top holders list against total).
Dormant holders (diamond hands)
Set LastChangeTime.till to a past date to keep only wallets whose balance hasn't moved since then — their Amount is the balance frozen at their last change. Combine with FirstChangeTime and UpdateCount to separate long-term holders from one-touch airdrop recipients.
{
EVM(dataset: archive, network: robinhood) {
Holders(
where: {
Currency: { SmartContract: { is: "0x5fc5360d0400a0fd4f2af552add042d716f1d168" } }
Balance: { LastChangeTime: { till: "2026-07-01T00:00:00Z" }, Amount: { gt: "0" } }
}
limit: { count: 10 }
orderBy: { descending: Balance_Amount }
) {
Holder {
Address
}
Balance {
Amount
FirstChangeTime
LastChangeTime
UpdateCount
}
}
}
}
Tokenized stock holders (NVDA)
Robinhood's tokenized equities are ordinary ERC-20s, so holder analytics work unchanged — Amount reads as the tokenized share count. Example: NVIDIA; swap in AAPL (0xaf3d76f1834a1d425780943c99ea8a608f8a93f9) or any other stock token.
{
EVM(dataset: archive, network: robinhood) {
Holders(
where: { Currency: { SmartContract: { is: "0xd0601ce157db5bdc3162bbac2a2c8af5320d9eec" } } }
limit: { count: 10 }
orderBy: { descending: Balance_Amount }
) {
Holder {
Address
}
Balance {
Amount
FirstChangeTime
LastChangeTime
UpdateCount
}
}
}
}
Native ETH rich list
Filter Currency.Native: true for the chain's largest ETH holders. Contracts appear as holders — the WETH contract naturally tops the list since it custodies wrapped ETH; filter or label known contracts for a people-only ranking.
{
EVM(dataset: archive, network: robinhood) {
Holders(
where: { Currency: { Native: true } }
limit: { count: 10 }
orderBy: { descending: Balance_Amount }
) {
Holder {
Address
}
Balance {
Amount
}
}
}
}
Paginating full holder snapshots
Airdrop snapshots and exports: page through the complete holder set with limit.offset, keeping the same orderBy so pages don't overlap.
{
EVM(dataset: archive, network: robinhood) {
Holders(
where: { Currency: { SmartContract: { is: "0x5fc5360d0400a0fd4f2af552add042d716f1d168" } } }
limit: { count: 5, offset: 5 }
orderBy: { descending: Balance_Amount }
) {
Holder {
Address
}
Balance {
Amount
}
}
}
}
For very large one-off snapshots, Bitquery can also provide data exports.
Use-case patterns
| Goal | Approach |
|---|---|
| Holder leaderboard page | Top holders, refreshed on your interval |
| Distribution / concentration dashboards | Holder count + distribution stats; top-N share client-side |
| Airdrop eligibility & snapshots | Balance floors + offset pagination |
| Diamond-hands / dormancy analysis | LastChangeTime screens with FirstChangeTime / UpdateCount |
| Stock-token cap tables | Tokenized stock holders |
| Live movement between holders | Stream the token on the Transfers API |
Tips
- Use
dataset: archiveand always keep alimit— popular tokens have very large holder sets. - Add
Balance: { Amount: { gt: "0" } }whenever you mean current holders; plain counts include every wallet that ever held. - There is no USD field on this cube — rank and threshold in token units (USDG ≈ dollars) and join prices from the Trades API for valuations.
LastChangeTime.tillin the future = full current snapshot; in the past = dormancy screen with frozen balances. It is not an as-of-date balance calculator — for historical balances use the Balances API's date filter.- Contracts are holders too (WETH tops native rankings by design) — maintain a label list to exclude them from people-only rankings.
UpdateCountseparates active traders (high) from set-and-forget holders (low) at a glance.
FAQ
How do I get the top holders of a Robinhood token?
Query EVM.Holders on dataset: archive, filter Currency.SmartContract, and order by Balance_Amount descending — see Top holders. Each row includes the holder's first/last change time and update count.
How do I get a token's holder count?
Run the holder-count query with Balance: { Amount: { gt: "0" } } for current holders, or without it for all-time holders.
Can I take an airdrop snapshot of all holders?
Yes — page through the full holder set with limit: { count, offset } under a stable orderBy, optionally with a balance floor for eligibility. For very large snapshots, ask about data exports.
How do I find dormant or diamond-hand holders?
Set Balance.LastChangeTime.till to a past date — only wallets untouched since then return, with their frozen balances. See Dormant holders.
Why is there no USD value on holder rows?
The Holders cube reports token amounts only. Use token-unit thresholds (USDG ≈ dollars), or multiply amounts by a price from the Trades API.
Should I use Holders or Balances?
Holders is token-centric (one token → many wallets): rankings, counts, distribution. Balances is wallet-centric (one wallet → many tokens): portfolios, multi-address batches, and as-of-date balance history.