Get top traders for a given ERC20 token
curl --request GET \
--url https://deep-index.moralis.io/api/v2.2/erc20/{address}/top-gainers \
--header 'X-API-Key: <api-key>'import requests
url = "https://deep-index.moralis.io/api/v2.2/erc20/{address}/top-gainers"
headers = {"X-API-Key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'X-API-Key': '<api-key>'}};
fetch('https://deep-index.moralis.io/api/v2.2/erc20/{address}/top-gainers', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://deep-index.moralis.io/api/v2.2/erc20/{address}/top-gainers",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"X-API-Key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://deep-index.moralis.io/api/v2.2/erc20/{address}/top-gainers"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("X-API-Key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://deep-index.moralis.io/api/v2.2/erc20/{address}/top-gainers")
.header("X-API-Key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://deep-index.moralis.io/api/v2.2/erc20/{address}/top-gainers")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["X-API-Key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"name": "Kylin Network",
"symbol": "KYL",
"decimals": 18,
"logo": "https://cdn.moralis.io/eth/0x67b6d479c7bb412c54e03dca8e1bc6740ce6b99c.png",
"possible_spam": "false",
"result": [
{
"avg_buy_price_usd": "<string>",
"avg_cost_of_quantity_sold": "<string>",
"avg_sell_price_usd": "<string>",
"count_of_trades": 123,
"realized_profit_percentage": 123,
"realized_profit_usd": "<string>",
"total_sold_usd": "<string>",
"total_tokens_bought": "<string>",
"total_tokens_sold": "<string>",
"total_usd_invested": "<string>",
"address": "<string>"
}
]
}Advanced Signals
Top Traders by Token
List the most profitable wallets that have traded a specific ERC20 token.
GET
/
erc20
/
{address}
/
top-gainers
Get top traders for a given ERC20 token
curl --request GET \
--url https://deep-index.moralis.io/api/v2.2/erc20/{address}/top-gainers \
--header 'X-API-Key: <api-key>'import requests
url = "https://deep-index.moralis.io/api/v2.2/erc20/{address}/top-gainers"
headers = {"X-API-Key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'X-API-Key': '<api-key>'}};
fetch('https://deep-index.moralis.io/api/v2.2/erc20/{address}/top-gainers', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://deep-index.moralis.io/api/v2.2/erc20/{address}/top-gainers",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"X-API-Key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://deep-index.moralis.io/api/v2.2/erc20/{address}/top-gainers"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("X-API-Key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://deep-index.moralis.io/api/v2.2/erc20/{address}/top-gainers")
.header("X-API-Key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://deep-index.moralis.io/api/v2.2/erc20/{address}/top-gainers")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["X-API-Key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"name": "Kylin Network",
"symbol": "KYL",
"decimals": 18,
"logo": "https://cdn.moralis.io/eth/0x67b6d479c7bb412c54e03dca8e1bc6740ce6b99c.png",
"possible_spam": "false",
"result": [
{
"avg_buy_price_usd": "<string>",
"avg_cost_of_quantity_sold": "<string>",
"avg_sell_price_usd": "<string>",
"count_of_trades": 123,
"realized_profit_percentage": 123,
"realized_profit_usd": "<string>",
"total_sold_usd": "<string>",
"total_tokens_bought": "<string>",
"total_tokens_sold": "<string>",
"total_usd_invested": "<string>",
"address": "<string>"
}
]
}We recommend using the new Top Traders by Token endpoint on the Universal API - broader chain coverage, a selectable ranking metric, and low-liquidity filters.
Authorizations
Path Parameters
The ERC20 token address.
Example:
"0x6982508145454ce325ddbe47a25d4ec3d2311933"
Query Parameters
Timeframe in days for which profitability is calculated, Options include 'all', '7', '30' default is 'all'.
The chain to query
Available options:
eth, 0x1, sepolia, 0xaa36a7, polygon, 0x89, bsc, 0x38, bsc testnet, 0x61, avalanche, 0xa86a, cronos, 0x19, arbitrum, 0xa4b1, chiliz, 0x15b38, gnosis, 0x64, base, 0x2105, base sepolia, 0x14a34, optimism, 0xa, polygon amoy, 0x13882, linea, 0xe708, moonbeam, 0x504, moonriver, 0x505, flow, 0x2eb, flow-testnet, 0x221, ronin, 0x7e4, ronin-testnet, 0x31769, lisk, 0x46f, pulse, 0x171, sei-testnet, 0x530, sei, 0x531, monad, 0x8f Example:
"eth"
Response
200 - application/json
Successful response with top profitable wallets.
The name of the token contract
Example:
"Kylin Network"
The symbol of the NFT contract
Example:
"KYL"
The number of decimals on the token
Example:
18
The logo of the token
Example:
"https://cdn.moralis.io/eth/0x67b6d479c7bb412c54e03dca8e1bc6740ce6b99c.png"
Indicates if a contract is possibly a spam contract
Example:
"false"
List of top profitable wallets per token.
Show child attributes
Show child attributes

