# GMGN Token Holders Intelligence — Wallet PnL & Tags (`logiover/gmgn-token-holders-intelligence`) Actor

Every holder of any token on Solana, BSC, Ethereum, Base, Tron, Monad with 65+ fields per wallet: balance, cost basis, PnL, buy/sell counts, transfer history, holding period, tags (smart, sniper, whale, bundler, fresh, KOL, insider). Plus per-token holder summary and category-tagged lists.

- **URL**: https://apify.com/logiover/gmgn-token-holders-intelligence.md
- **Developed by:** [Logiover](https://apify.com/logiover) (community)
- **Categories:** Automation, Lead generation, Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.50 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).


# README

## GMGN Token Holders Intelligence — Full Holder List, PnL, Tags, Smart/Sniper/Whale Classification

![GMGN Token Holders Intelligence — Wallet PnL & Tags](https://apify-image-uploads-prod.s3.us-east-1.amazonaws.com/GjS6nQ8qauOdq9KGy-actor-cWNEeVQa8cKbli8au-2XhNAv6GaU-images.png)

**The deepest on-chain wallet intelligence scraper on Apify.** Pass any token (Solana, BSC, Ethereum, Base, Tron, or Monad) and get every holder with **65+ fields per wallet**: balance, cost basis, realized / unrealized PnL, buy & sell history, transfer history, GMGN tags (smart, sniper, whale, bundler, fresh, KOL, insider, dev, bluechip), Twitter handle, last-active timestamp, holding period.

> One token in, thousands of fully-classified holder records out. The forensics backbone for rugpull research, smart-money tracking, wash-trading detection, and project-level holder analytics.

---

### 🚀 What this actor does

For each `(chain, tokenAddress)` you pass, the actor calls GMGN.ai's holders endpoint, paginates through the entire list (up to `maxHoldersPerToken`), and normalizes each wallet into a stable schema with 65+ fields.

Optionally, it ALSO pulls:
- **Holder summary stats** — per-token category counts (how many smart_degen, renowned, fresh, insider, dev, bluechip, bundler, sniper, dex_bot wallets hold this token).
- **Wallet-tag lists** — GMGN's pre-tagged category lists for the token: `smart_wallets`, `sniper_wallets`, `whale_wallets`, `fresh_wallets`, `bundler_wallets`, `creator_wallets`, `rat_trader_wallets`, `renowned_wallets`, `top_wallets`, `following_wallets`.
- **Top buyers** — the influential early buyers list with status (hold / sold / bought_more / transfered).

Pass a list of tokens (batch up to 100) and the actor runs all of this in parallel — perfect for analyzing your entire watchlist in one run.

---

### 💡 Use cases

- **Rugpull / forensics research** — for any suspect token, get the full holder distribution, suspicious-wallet flags, dev / creator holdings, sniper exposure.
- **Token project teams** — understand who's holding your token, who's selling, who's whale-watching you. Run daily snapshots for governance & marketing.
- **Smart-money tracking dashboards** — show "which top wallets hold this token" with their PnL on it.
- **Anti-wash-trading** — flag `isSuspicious` wallets and analyze their transfer patterns.
- **Insider detection** — `fresh_wallet` + early buy + still-holding = likely insider.
- **Pre-pump radar** — scan a watchlist of tokens daily; track when `smart_degen_count` jumps.
- **Holder PnL studies** — query average cost basis vs current price to gauge if holders are in profit / loss territory (psychology of sell pressure).
- **Influencer attribution** — find which `renowned_wallets` / `kol` wallets quietly bought a token before it pumped.

---

### ⚙️ Input configuration

| Field | Type | Default | Description |
|-------|------|---------|-------------|
| `tokens` | `array` | required | Array of `{ chain, address }`. Up to 100 entries. |
| `maxHoldersPerToken` | `integer` | `500` | How many holders to page through per token. Max practical: ~5,000. |
| `holdersOrderBy` | `string` | `"amount_percentage"` | `amount_percentage`, `balance`, `realized_profit`, `profit`, `buy_amount_cur`, `sell_amount_cur` |
| `direction` | `string` | `"desc"` | `desc` or `asc`. |
| `includeHolderStat` | `boolean` | `true` | Emit per-token summary row with category counts. |
| `includeWalletTagsStat` | `boolean` | `true` | Emit one row per (category, wallet) in tagged-wallet lists. |
| `includeTopBuyers` | `boolean` | `false` | Emit top-buyer status rows. |
| `onlyHolders` | `boolean` | `false` | Drop rows where `balance == 0` (sold out). |
| `tagFilter` | `string[]` | `[]` | Keep only wallets carrying these GMGN tags. |
| `useProxy` | `boolean` | `true` | Apify Proxy on/off. |
| `proxyConfiguration` | `object` | residential | |
| `maxConcurrency` | `integer` | `5` | |

#### Holder tags GMGN exposes

| Tag | Meaning |
|-----|---------|
| `smart_degen` | High-PnL active trader. |
| `renowned` | Verified public figure / KOL. |
| `kol` | Key opinion leader. |
| `fresh_wallet` | Newly-funded wallet (insider signal). |
| `insider` | Identified insider wallet. |
| `dev` | Project / contract creator. |
| `bluechip` | Holds bluechip tokens. |
| `bundler` | Bundler wallet (mass-buy bot). |
| `sniper` | Sniper bot (block-0 buyer). |
| `whale` | Top holder by USD value. |
| `rat_trader` | Suspected insider pattern. |
| `dex_bot` | Generic DEX bot. |
| `gmgn` | Active GMGN user. |

---

### 📦 Output rows

The dataset emits four kinds of rows, distinguished by `_kind`:

#### 1. `holder` (per holder row — the bulk of the data)
| Field | Description |
|-------|-------------|
| `chain`, `tokenAddress`, `walletAddress`, `rank` | Identity. |
| `accountAddress`, `addrType`, `exchange`, `avatar`, `name`, `twitterUsername`, `twitterName` | Wallet metadata. |
| `tags`, `makerTokenTags`, `walletTagV2` | Classification tags. |
| `isNew`, `isOnCurve`, `isSuspicious` | Boolean flags. |
| `balance`, `nativeBalance`, `amountCur`, `amountPercentage`, `usdValue`, `accuAmount`, `accuCost`, `sellAmountPercentage` | Position size. |
| `cost`, `costCur`, `totalCost`, `avgCost`, `avgSold` | Cost basis. |
| `profit`, `profitChange`, `realizedProfit`, `realizedPnl`, `unrealizedProfit`, `unrealizedPnl` | PnL. |
| `buyAmountCur`, `buyTxCountCur`, `buyVolumeCur` | Recent buys. |
| `sellAmountCur`, `sellTxCountCur`, `sellVolumeCur` | Recent sells. |
| `currentBuyAmount`, `currentSellAmount`, `currentTransferInAmount`, `currentTransferOutAmount` | Current-window flows. |
| `historyBoughtCost`, `historyBoughtFee`, `historySoldIncome`, `historySoldFee` | Lifetime totals. |
| `historyTransferInAmount`, `historyTransferInCost`, `historyTransferOutAmount`, `historyTransferOutFee`, `historyTransferOutIncome` | Lifetime transfers. |
| `transferIn`, `transferInCount`, `transferOutCount`, `nativeTransfer`, `tokenTransfer`, `tokenTransferIn`, `tokenTransferOut` | Transfer counts. |
| `netflowAmount`, `netflowUsd` | Net flow. |
| `createdAt`, `startHoldingAt`, `endHoldingAt`, `lastActiveTimestamp`, `lastBlock` | Timestamps. |
| `gmgnWalletUrl` | Convenience link. |
| `scrapedAt` | Scrape time. |

#### 2. `holder_stat` (summary row per token)
| Field | Description |
|-------|-------------|
| `smartDegenCount` | Number of `smart_degen` holders. |
| `renownedCount` | Renowned holders. |
| `freshWalletCount` | Fresh wallets. |
| `dexBotCount` | DEX bots. |
| `insiderCount` | Identified insiders. |
| `followingCount` | Holders you (the wallet that ran the call) follow. |
| `devCount` | Dev wallets. |
| `bluechipOwnerCount` | Bluechip owners. |
| `bundlerCount` | Bundlers. |
| `sniperCount` | Snipers. |

#### 3. `wallet_tag_member` (one row per wallet in each tagged-category list)
| Field | Description |
|-------|-------------|
| `category` | One of `smart_wallets`, `sniper_wallets`, `whale_wallets`, `fresh_wallets`, `bundler_wallets`, `creator_wallets`, `rat_trader_wallets`, `renowned_wallets`, `top_wallets`, `following_wallets`. |
| `walletAddress`, `tokenAddress`, `chain` | Identity. |

#### 4. `top_buyer` (one row per influential early buyer)
| Field | Description |
|-------|-------------|
| `walletAddress`, `status`, `tags`, `makerTokenTags` | Wallet + status. |
| `top70SniperHoldRate`, `boughtRate`, `holdingRate`, `top10HolderRate` | Token-level header stats included with each row. |

---

### 🧪 Example output (holder row)

```json
{
  "_kind": "holder",
  "chain": "bsc",
  "tokenAddress": "0xe379f34d9405761af8ca8a09fc01d81bb9e74444",
  "rank": 1,
  "walletAddress": "0x1596a456fc3cfbcb24a7de6049d05de44676dfe2",
  "tags": ["gmgn"],
  "makerTokenTags": ["sniper"],
  "isSuspicious": false,
  "balance": 1240000.5,
  "amountPercentage": 0.04938,
  "usdValue": 23801.21,
  "avgCost": 0.0000048,
  "profit": 12450.32,
  "realizedProfit": 8920.12,
  "unrealizedProfit": 3530.2,
  "buyAmountCur": 1240000.5,
  "buyTxCountCur": 4,
  "historyBoughtCost": 5950.24,
  "historySoldIncome": 0,
  "lastActiveTimestamp": "2026-05-15T11:08:00.000Z",
  "gmgnWalletUrl": "https://gmgn.ai/bsc/address/0x1596a456fc3cfbcb24a7de6049d05de44676dfe2",
  "scrapedAt": "2026-05-15T12:00:00.000Z"
}
````

***

### 🧰 Recipes

#### 1. Full forensics dump for one token

```json
{
  "tokens": [{ "chain": "sol", "address": "EKpQGSJtjMFqKZ9KQanSqYXRcF8fBopzLHYxdM65zcjm" }],
  "maxHoldersPerToken": 2000,
  "includeHolderStat": true,
  "includeWalletTagsStat": true,
  "includeTopBuyers": true
}
```

Gets 2,000 holders + summary + tagged-wallet lists + top buyers. ~2,500 rows.

#### 2. Watchlist daily snapshot (10 tokens, 500 holders each)

```json
{
  "tokens": [
    { "chain": "sol", "address": "..." },
    { "chain": "bsc", "address": "..." }
  ],
  "maxHoldersPerToken": 500,
  "includeHolderStat": true
}
```

Schedule daily → time-series wallet movement archive.

#### 3. Only smart-money + KOL holders

```json
{
  "tokens": [{ "chain": "sol", "address": "..." }],
  "maxHoldersPerToken": 1000,
  "tagFilter": ["smart_degen", "renowned", "kol"]
}
```

#### 4. Wash-trading flag dataset

```json
{
  "tokens": [...],
  "maxHoldersPerToken": 1000,
  "tagFilter": ["rat_trader", "bundler", "dex_bot"]
}
```

Surface only the suspicious wallets per token.

#### 5. Profitable holders only (winners club)

Run with `holdersOrderBy: "realized_profit"` then filter client-side to `realizedProfit > 0`. Gives you the "who's made money on this token" leaderboard.

***

### 🛡️ Under the hood

- **Endpoints** —
  - `GET /vas/api/v1/token_holders/{chain}/{addr}?limit=100&cost=20&orderby=...&direction=...&cursor=...` (paginated)
  - `GET /vas/api/v1/token_holder_stat/{chain}/{addr}`
  - `GET /api/v1/token_wallet_tags_stat/{chain}/{addr}`
  - `GET /defi/quotation/v1/tokens/top_buyers/{chain}/{addr}`
- **Pagination** — GMGN's `next` cursor; the actor follows it until `maxHoldersPerToken` is hit.
- **Auth** — none.
- **Proxy** — Apify Residential default.
- **Retries** — 5 attempts with exponential backoff on 403 / 429 / 5xx; immediate fail on 404 (missing token).

***

### ⚡ Performance

| Configuration | Rows | Time | Cost |
|--------------|------|------|------|
| 1 token, 500 holders, all extras | ~520 | <30s | <$0.01 |
| 10 tokens, 500 holders each | ~5,000 | ~2 min | ~$0.05 |
| 100 tokens, 1,000 holders each | ~100,000 | ~20 min | ~$0.50 |

***

### 📅 Recommended schedules

- **Daily watchlist snapshot** — once per day for your tracked tokens.
- **Live new-token deep dive** — on-demand triggered by a launch detector.
- **Hourly rugcheck** — for active project teams monitoring their own token.

***

### ❓ FAQ

#### How many holders can I get per token?

GMGN's paginated holders endpoint practically scales to ~5,000 holders per token. The `maxHoldersPerToken` input caps it — 500 is the sweet spot for cost vs depth.

#### Why are some `tags` empty?

GMGN only assigns tags to wallets it's classified. Most retail wallets are untagged. Tagged wallets are the interesting ones for forensics.

#### Difference between `tags` and `makerTokenTags`?

`tags` is the wallet's GLOBAL classification (e.g. `smart_degen` across the whole chain). `makerTokenTags` is the wallet's role for THIS specific token (e.g. `sniper` if they bought in block 0).

#### What's `walletTagV2`?

GMGN's newer single-label classification (e.g. `whale`). Often more specific than the `tags` array.

#### Why is `realizedProfit` sometimes negative?

The wallet has sold at a loss. Common for late buyers and panic sellers.

#### What does `isSuspicious: true` mean?

GMGN's heuristic for wash trading / suspicious behavior — same wallet on both sides of trades, or bot-like patterns.

#### Can I get historical holder snapshots?

Not directly — GMGN only exposes current state. To build history, schedule the actor daily and store results timestamped.

#### How does this interact with the Wallet Portfolio actor?

This actor is token-centric (one token → many wallets). The **GMGN Wallet Portfolio & PnL Tracker** is wallet-centric (one wallet → many tokens). Use both together for a complete picture.

#### Are wallet addresses linked to Twitter handles?

When the wallet owner has registered their Twitter on GMGN (or it's been crowd-tagged), `twitterUsername` / `twitterName` are populated. About 5-20% of high-PnL wallets are linked.

#### Can I filter by USD value (whales only)?

Sort by `balance` or `amount_percentage` desc to get the biggest wallets first, then take the top N client-side. Or filter the output dataset by `usdValue > X`.

#### How fresh is the data?

GMGN's holder list updates every few blocks. The actor returns whatever's current at call time.

#### What if a token doesn't exist?

The actor logs the error and continues — the rest of the tokens are processed normally.

#### Why does `top_buyers` only return ~10-20 wallets?

GMGN's top-buyers endpoint surfaces only wallets that bought significantly early AND are still tracked.

#### How do I detect insider patterns?

Look for: `tags: ["fresh_wallet"]` + `currentBuyAmount > 0` + `realizedProfit > 0`. Newly-funded wallet that bought early and is now profitable = strong insider signal.

***

### 🔗 Related actors

- **GMGN Trending Memecoin Scanner** — pick which tokens to scrape holders for.
- **GMGN New Token Launch Detector** — feed fresh token addresses into this actor.
- **GMGN Wallet Portfolio & PnL Tracker** — wallet-centric view.
- **GMGN Smart Money Wallet Leaderboard** — top traders.
- **GMGN Smart Money Buy Signals** — live whale buys.
- **GMGN Token Rugcheck & Deep Analytics** — security + dev history per token.
- **GMGN Crypto KOL Twitter & Telegram Signal Feed** — KOL chatter for tokens you're researching.

***

### 🆘 Support

Bug? Missing tag? Open an issue on the actor's Apify page.

# Actor input Schema

## `tokens` (type: `array`):

List of tokens to scrape. Each entry must be `{ chain, address }`. Up to 100 tokens per run. Chain: sol, bsc, eth, base, tron, monad. Address: token contract address.

## `maxHoldersPerToken` (type: `integer`):

How many holders to scrape per token. Paginated via GMGN's cursor (100 per page). Set high to pull thousands per token.

## `holdersOrderBy` (type: `string`):

Holders are returned in this order. `amount_percentage` (descending) = the biggest holders first (typical analysis).

## `direction` (type: `string`):

Sort direction. desc = highest first (default, matches the source UI). asc = lowest first — useful for hunting unfamiliar entries.

## `includeHolderStat` (type: `boolean`):

When ON, fetches the per-token holder summary endpoint and emits one extra row per token with category counts (smart, renowned, fresh, insider, dev, bluechip, bundler, sniper, dex\_bot).

## `includeWalletTagsStat` (type: `boolean`):

When ON, fetches the per-token tagged wallet lists (smart\_wallets, sniper\_wallets, whale\_wallets, fresh\_wallets, bundler\_wallets, creator\_wallets, rat\_trader\_wallets, renowned\_wallets, top\_wallets, following\_wallets) and emits each list as separate rows. Excellent for quickly enumerating each category.

## `includeTopBuyers` (type: `boolean`):

When ON, fetches the GMGN 'top buyers' list (first significant buyers who profited) and emits one row per top-buyer.

## `onlyHolders` (type: `boolean`):

When ON, drops rows where the wallet has sold its entire position (`balance == 0`). Useful for live holder distribution analyses.

## `tagFilter` (type: `array`):

Keep only holders carrying one of these GMGN tags (e.g. `smart_degen`, `sniper`, `renowned`, `bundler`, `whale`, `kol`, `fresh_wallet`, `insider`, `dev`, `bluechip`). Empty = all.

## `useProxy` (type: `boolean`):

Route requests through Apify Proxy. Strongly recommended ON — residential proxy is the most reliable way to bypass Cloudflare rate limits.

## `proxyConfiguration` (type: `object`):

Apify Proxy configuration. Residential proxy group is recommended for the highest success rate against Cloudflare.

## `maxConcurrency` (type: `integer`):

Maximum number of API calls running in parallel. Higher = faster runs but more chance of hitting rate limits. 3-5 is safe.

## Actor input object example

```json
{
  "tokens": [
    {
      "chain": "sol",
      "address": "EKpQGSJtjMFqKZ9KQanSqYXRcF8fBopzLHYxdM65zcjm"
    },
    {
      "chain": "sol",
      "address": "So11111111111111111111111111111111111111112"
    },
    {
      "chain": "sol",
      "address": "DezXAZ8z7PnrnRJjz3wXBoRgixCa6xjnB7YaB1pPB263"
    },
    {
      "chain": "sol",
      "address": "JUPyiwrYJFskUPiHa7hkeR8VUtAeFoSYbKedZNsDvCN"
    },
    {
      "chain": "bsc",
      "address": "0xe379f34d9405761af8ca8a09fc01d81bb9e74444"
    },
    {
      "chain": "bsc",
      "address": "0x55d398326f99059fF775485246999027B3197955"
    },
    {
      "chain": "eth",
      "address": "0xdAC17F958D2ee523a2206206994597C13D831ec7"
    },
    {
      "chain": "base",
      "address": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913"
    }
  ],
  "maxHoldersPerToken": 5000,
  "holdersOrderBy": "amount_percentage",
  "direction": "desc",
  "includeHolderStat": true,
  "includeWalletTagsStat": true,
  "includeTopBuyers": true,
  "onlyHolders": false,
  "tagFilter": [],
  "useProxy": true,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  },
  "maxConcurrency": 5
}
```

# Actor output Schema

## `_kind` (type: `string`):

holder, holder\_stat, wallet\_tag\_member, or top\_buyer

## `chain` (type: `string`):

Blockchain slug

## `tokenAddress` (type: `string`):

Token contract address

## `walletAddress` (type: `string`):

Holder wallet address

## `rank` (type: `string`):

Position in the holder list

## `balance` (type: `string`):

Token balance held

## `amountPercentage` (type: `string`):

Share of total supply

## `usdValue` (type: `string`):

Position value USD

## `avgCost` (type: `string`):

Average cost basis per token

## `profit` (type: `string`):

Total profit USD

## `realizedProfit` (type: `string`):

Realized profit USD

## `unrealizedProfit` (type: `string`):

Unrealized profit USD

## `buyAmountCur` (type: `string`):

Recent buy amount

## `sellAmountCur` (type: `string`):

Recent sell amount

## `historyBoughtCost` (type: `string`):

Lifetime cost of buys

## `historySoldIncome` (type: `string`):

Lifetime income from sells

## `tags` (type: `string`):

Wallet global tags

## `makerTokenTags` (type: `string`):

Wallet role tags for this token

## `isSuspicious` (type: `string`):

GMGN suspicious-pattern flag

## `isNew` (type: `string`):

New wallet flag

## `twitterUsername` (type: `string`):

Linked Twitter handle

## `lastActiveTimestamp` (type: `string`):

ISO timestamp of last touch

## `category` (type: `string`):

wallet\_tag\_member category (smart\_wallets, sniper\_wallets, etc.)

## `gmgnWalletUrl` (type: `string`):

GMGN wallet page

## `scrapedAt` (type: `string`):

Scrape timestamp

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "tokens": [
        {
            "chain": "sol",
            "address": "EKpQGSJtjMFqKZ9KQanSqYXRcF8fBopzLHYxdM65zcjm"
        },
        {
            "chain": "sol",
            "address": "So11111111111111111111111111111111111111112"
        },
        {
            "chain": "sol",
            "address": "DezXAZ8z7PnrnRJjz3wXBoRgixCa6xjnB7YaB1pPB263"
        },
        {
            "chain": "sol",
            "address": "JUPyiwrYJFskUPiHa7hkeR8VUtAeFoSYbKedZNsDvCN"
        },
        {
            "chain": "bsc",
            "address": "0xe379f34d9405761af8ca8a09fc01d81bb9e74444"
        },
        {
            "chain": "bsc",
            "address": "0x55d398326f99059fF775485246999027B3197955"
        },
        {
            "chain": "eth",
            "address": "0xdAC17F958D2ee523a2206206994597C13D831ec7"
        },
        {
            "chain": "base",
            "address": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913"
        }
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("logiover/gmgn-token-holders-intelligence").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = { "tokens": [
        {
            "chain": "sol",
            "address": "EKpQGSJtjMFqKZ9KQanSqYXRcF8fBopzLHYxdM65zcjm",
        },
        {
            "chain": "sol",
            "address": "So11111111111111111111111111111111111111112",
        },
        {
            "chain": "sol",
            "address": "DezXAZ8z7PnrnRJjz3wXBoRgixCa6xjnB7YaB1pPB263",
        },
        {
            "chain": "sol",
            "address": "JUPyiwrYJFskUPiHa7hkeR8VUtAeFoSYbKedZNsDvCN",
        },
        {
            "chain": "bsc",
            "address": "0xe379f34d9405761af8ca8a09fc01d81bb9e74444",
        },
        {
            "chain": "bsc",
            "address": "0x55d398326f99059fF775485246999027B3197955",
        },
        {
            "chain": "eth",
            "address": "0xdAC17F958D2ee523a2206206994597C13D831ec7",
        },
        {
            "chain": "base",
            "address": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
        },
    ] }

# Run the Actor and wait for it to finish
run = client.actor("logiover/gmgn-token-holders-intelligence").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "tokens": [
    {
      "chain": "sol",
      "address": "EKpQGSJtjMFqKZ9KQanSqYXRcF8fBopzLHYxdM65zcjm"
    },
    {
      "chain": "sol",
      "address": "So11111111111111111111111111111111111111112"
    },
    {
      "chain": "sol",
      "address": "DezXAZ8z7PnrnRJjz3wXBoRgixCa6xjnB7YaB1pPB263"
    },
    {
      "chain": "sol",
      "address": "JUPyiwrYJFskUPiHa7hkeR8VUtAeFoSYbKedZNsDvCN"
    },
    {
      "chain": "bsc",
      "address": "0xe379f34d9405761af8ca8a09fc01d81bb9e74444"
    },
    {
      "chain": "bsc",
      "address": "0x55d398326f99059fF775485246999027B3197955"
    },
    {
      "chain": "eth",
      "address": "0xdAC17F958D2ee523a2206206994597C13D831ec7"
    },
    {
      "chain": "base",
      "address": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913"
    }
  ]
}' |
apify call logiover/gmgn-token-holders-intelligence --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=logiover/gmgn-token-holders-intelligence",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "GMGN Token Holders Intelligence — Wallet PnL & Tags",
        "description": "Every holder of any token on Solana, BSC, Ethereum, Base, Tron, Monad with 65+ fields per wallet: balance, cost basis, PnL, buy/sell counts, transfer history, holding period, tags (smart, sniper, whale, bundler, fresh, KOL, insider). Plus per-token holder summary and category-tagged lists.",
        "version": "1.0",
        "x-build-id": "KFZ3kbtcKk4BeP35V"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/logiover~gmgn-token-holders-intelligence/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-logiover-gmgn-token-holders-intelligence",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/logiover~gmgn-token-holders-intelligence/runs": {
            "post": {
                "operationId": "runs-sync-logiover-gmgn-token-holders-intelligence",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/logiover~gmgn-token-holders-intelligence/run-sync": {
            "post": {
                "operationId": "run-sync-logiover-gmgn-token-holders-intelligence",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "required": [
                    "tokens"
                ],
                "properties": {
                    "tokens": {
                        "title": "Tokens",
                        "type": "array",
                        "description": "List of tokens to scrape. Each entry must be `{ chain, address }`. Up to 100 tokens per run. Chain: sol, bsc, eth, base, tron, monad. Address: token contract address."
                    },
                    "maxHoldersPerToken": {
                        "title": "Max Holders per Token",
                        "minimum": 1,
                        "type": "integer",
                        "description": "How many holders to scrape per token. Paginated via GMGN's cursor (100 per page). Set high to pull thousands per token.",
                        "default": 5000
                    },
                    "holdersOrderBy": {
                        "title": "Holders Order By",
                        "enum": [
                            "amount_percentage",
                            "balance",
                            "realized_profit",
                            "profit",
                            "buy_amount_cur",
                            "sell_amount_cur"
                        ],
                        "type": "string",
                        "description": "Holders are returned in this order. `amount_percentage` (descending) = the biggest holders first (typical analysis).",
                        "default": "amount_percentage"
                    },
                    "direction": {
                        "title": "Direction",
                        "enum": [
                            "desc",
                            "asc"
                        ],
                        "type": "string",
                        "description": "Sort direction. desc = highest first (default, matches the source UI). asc = lowest first — useful for hunting unfamiliar entries.",
                        "default": "desc"
                    },
                    "includeHolderStat": {
                        "title": "Include Holder Stat Summary",
                        "type": "boolean",
                        "description": "When ON, fetches the per-token holder summary endpoint and emits one extra row per token with category counts (smart, renowned, fresh, insider, dev, bluechip, bundler, sniper, dex_bot).",
                        "default": true
                    },
                    "includeWalletTagsStat": {
                        "title": "Include Wallet-Tags Categories",
                        "type": "boolean",
                        "description": "When ON, fetches the per-token tagged wallet lists (smart_wallets, sniper_wallets, whale_wallets, fresh_wallets, bundler_wallets, creator_wallets, rat_trader_wallets, renowned_wallets, top_wallets, following_wallets) and emits each list as separate rows. Excellent for quickly enumerating each category.",
                        "default": true
                    },
                    "includeTopBuyers": {
                        "title": "Include Top Buyers",
                        "type": "boolean",
                        "description": "When ON, fetches the GMGN 'top buyers' list (first significant buyers who profited) and emits one row per top-buyer.",
                        "default": true
                    },
                    "onlyHolders": {
                        "title": "Only Current Holders",
                        "type": "boolean",
                        "description": "When ON, drops rows where the wallet has sold its entire position (`balance == 0`). Useful for live holder distribution analyses.",
                        "default": false
                    },
                    "tagFilter": {
                        "title": "Tag Filter",
                        "type": "array",
                        "description": "Keep only holders carrying one of these GMGN tags (e.g. `smart_degen`, `sniper`, `renowned`, `bundler`, `whale`, `kol`, `fresh_wallet`, `insider`, `dev`, `bluechip`). Empty = all.",
                        "default": [],
                        "items": {
                            "type": "string"
                        }
                    },
                    "useProxy": {
                        "title": "Use Apify Proxy",
                        "type": "boolean",
                        "description": "Route requests through Apify Proxy. Strongly recommended ON — residential proxy is the most reliable way to bypass Cloudflare rate limits.",
                        "default": true
                    },
                    "proxyConfiguration": {
                        "title": "Proxy Configuration",
                        "type": "object",
                        "description": "Apify Proxy configuration. Residential proxy group is recommended for the highest success rate against Cloudflare.",
                        "default": {
                            "useApifyProxy": true,
                            "apifyProxyGroups": [
                                "RESIDENTIAL"
                            ]
                        }
                    },
                    "maxConcurrency": {
                        "title": "Max Concurrent Requests",
                        "minimum": 1,
                        "maximum": 20,
                        "type": "integer",
                        "description": "Maximum number of API calls running in parallel. Higher = faster runs but more chance of hitting rate limits. 3-5 is safe.",
                        "default": 5
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
