# CEX Reserve Tracker — Exchange Wallet Balances (BTC/ETH) (`gochujang/cex-reserve-tracker`) Actor

Live BTC / ETH / USDT / USDC reserves at major CEXs (Binance, Coinbase, Kraken, OKX, Bybit). Track exchange outflows = bullish (custody), inflows = bearish (sell pressure). PPE $0.001/balance row.

- **URL**: https://apify.com/gochujang/cex-reserve-tracker.md
- **Developed by:** [Hojun Lee](https://apify.com/gochujang) (community)
- **Categories:** Developer tools, Automation, Other
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per usage

This Actor is paid per platform usage. The Actor is free to use, and you only pay for the Apify platform usage, which gets cheaper the higher subscription plan you have.

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

## 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

## CEX Exchange Reserve Tracker

> Query on-chain wallet balances for **Binance, Coinbase, Kraken, Bitfinex, OKX, and Bybit cold/hot wallets** across **ETH, USDT, USDC, WBTC, and DAI**. Reserve trends are the single most-watched macro signal in crypto. No API key required.

---

### What It Does

Exchange reserves are aggregate balances of well-known CEX cold wallets. Watching them is how funds, market makers, and serious analysts read macro flow:

- **Falling reserves** + **growing stablecoin reserves** = capital ready to deploy = bullish
- **Rising ETH/BTC reserves** = inventory build for distribution = bearish
- **Stablecoin reserve growth** = sidelined buyers entering = bullish

This Actor returns the **current balance per wallet × asset** with USD valuation, plus per-exchange and per-asset totals. Schedule it to build your own time-series.

---

### Why This Matters

CEX reserve data has historically called major tops and bottoms (notably FTX-induced reserve drops, post-Luna inflows, 2024 ETF launch deposits). Live reserve snapshots are what institutional desks pay $5K+/month for from CryptoQuant. This Actor delivers a useful slice for fractions of a cent.

---

### Input

| Field | Type | Default | Description |
|-------|------|---------|-------------|
| `exchanges` | array | all | Subset of `Binance, Coinbase, Kraken, Bitfinex, OKX, Bybit` |
| `assets` | array | all | Subset of `ETH, USDT, USDC, WBTC, DAI` |
| `minBalanceUsd` | integer | `1000000` | Skip wallets with < $X for an asset |
| `sortBy` | string | `balance_usd_desc` | `balance_usd_desc`, `exchange_asset`, `asset_only` |
| `limit` | integer | `200` | Max rows |

#### Example: Binance + Coinbase USDT only
```json
{"exchanges": ["Binance", "Coinbase"], "assets": ["USDT"]}
````

#### Example: All-asset snapshot for daily ETL

```json
{"sortBy": "exchange_asset", "minBalanceUsd": 0, "limit": 500}
```

***

### Output

```json
{
  "exchange": "Binance",
  "asset": "USDT",
  "wallet_label": "Binance 8 (Cold)",
  "wallet_address": "0xf977814e90da44bfa03b6295a0616a897441acec",
  "balance_native": 19967378227.0,
  "balance_usd": 19967378227.00,
  "price_used_usd": 1.0
}
```

Plus a **SUMMARY** key-value record with totals by exchange and asset.

***

### Pricing

- **$0.001 per (wallet × asset) row returned**

Examples:

- Full snapshot (~6 exchanges × ~3 wallets × 5 assets ≈ 90 rows): **~$0.09**
- Single exchange focus (~5 rows): **$0.005**

***

### Use Cases

**Daily reserve report** — Schedule daily, compare against prior day's stored snapshot, alert on > 5% delta.

**Stablecoin inflow signal** — Filter `asset: "USDT"` + `sortBy: "exchange_asset"`, watch totals daily. Sustained Tether inflow = sidelined buying power.

**Coinbase ETH outflow tracker** — Coinbase's ETH balance trends correlate with custody-into-staking flows (which precede price moves).

***

### Limitations

- Only Ethereum L1 wallets are scanned. Doesn't cover BSC, Solana, Tron, or BTC native chain.
- The wallet list is **curated public knowledge**, not exhaustive. Some exchange reserves live in wallets not in the public domain.
- Snapshot only — no historical time-series. Run on a schedule and compare runs to derive trends.

***

### Data Sources

- **Etherscan V2 API** (`module=account&action=balance / tokenbalance`) — shared API key bundled
- **Coingecko** for USD pricing

***

### Related Actors

- **[Stablecoin Depeg Monitor](https://apify.com/gochujang/stablecoin-depeg-monitor)** — Pairs nicely with stablecoin reserve trend.
- **[Crypto ETF Flow Tracker](https://apify.com/gochujang/crypto-etf-flow-tracker)** — ETF inflows + CEX reserve drops = high-confidence rally signal.
- **[Smart Money Wallet Tracker](https://apify.com/gochujang/smart-money-tracker)** — On-chain whale activity complement.

***

***

### 🎬 Live Sample Run

A real run of this actor with default-ish inputs, executed on 2026-06-10:

| Field | Value |
|---|---|
| Items in dataset | 6 |
| Dataset (JSON) | `https://api.apify.com/v2/datasets/OWU4mBUMugpxfTDCI/items?clean=1&format=json` |
| Dataset (CSV) | `https://api.apify.com/v2/datasets/OWU4mBUMugpxfTDCI/items?clean=1&format=csv` |
| Run summary (KVS) | `https://api.apify.com/v2/key-value-stores/JDcBEth0cwsnvXs2M/records/SUMMARY` |
| Run details | `https://api.apify.com/v2/actor-runs/axMZBMPfmQ35J6Tp3` |

**Try it now**: pop any of the dataset URLs in your browser to see live output, or hit the API endpoints from your code.

> Want to reproduce? Click **Try Actor** on the Apify Store page and use the input defaults shown above.

### Feedback

[Leave a review on Apify Store](https://apify.com/gochujang/cex-reserve-tracker#reviews)

# Actor input Schema

## `exchanges` (type: `array`):

Which exchanges' wallets to scan. Leave empty for all.

## `assets` (type: `array`):

Which on-chain assets to query. ETH = native; rest are ERC-20.

## `minBalanceUsd` (type: `integer`):

Skip wallet/asset rows below this USD value.

## `sortBy` (type: `string`):

Sort order.

## `limit` (type: `integer`):

Maximum number of (wallet × asset) rows to return.

## `alertChangePctNote` (type: `string`):

This Actor reports the current snapshot. For change-over-time alerts, run on schedule and compare runs (or store snapshots in your own KV store).

## `etherscanApiKey` (type: `string`):

Bring your own Etherscan V2 API key for higher rate limits (recommended for scheduled/heavy use). Get a free key at etherscan.io/myapikey. Default works for occasional use.

## Actor input object example

```json
{
  "exchanges": [
    "Binance",
    "Coinbase",
    "Kraken",
    "Bitfinex",
    "OKX",
    "Bybit"
  ],
  "assets": [
    "ETH",
    "USDT",
    "USDC",
    "WBTC",
    "DAI"
  ],
  "minBalanceUsd": 1000000,
  "sortBy": "balance_usd_desc",
  "limit": 200,
  "alertChangePctNote": ""
}
```

# Actor output Schema

## `dataset` (type: `string`):

No description

## `summary` (type: `string`):

No description

# 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 = {
    "exchanges": [
        "Binance",
        "Coinbase",
        "Kraken",
        "Bitfinex",
        "OKX",
        "Bybit"
    ],
    "assets": [
        "ETH",
        "USDT",
        "USDC",
        "WBTC",
        "DAI"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("gochujang/cex-reserve-tracker").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 = {
    "exchanges": [
        "Binance",
        "Coinbase",
        "Kraken",
        "Bitfinex",
        "OKX",
        "Bybit",
    ],
    "assets": [
        "ETH",
        "USDT",
        "USDC",
        "WBTC",
        "DAI",
    ],
}

# Run the Actor and wait for it to finish
run = client.actor("gochujang/cex-reserve-tracker").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 '{
  "exchanges": [
    "Binance",
    "Coinbase",
    "Kraken",
    "Bitfinex",
    "OKX",
    "Bybit"
  ],
  "assets": [
    "ETH",
    "USDT",
    "USDC",
    "WBTC",
    "DAI"
  ]
}' |
apify call gochujang/cex-reserve-tracker --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=gochujang/cex-reserve-tracker",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "CEX Reserve Tracker — Exchange Wallet Balances (BTC/ETH)",
        "description": "Live BTC / ETH / USDT / USDC reserves at major CEXs (Binance, Coinbase, Kraken, OKX, Bybit). Track exchange outflows = bullish (custody), inflows = bearish (sell pressure). PPE $0.001/balance row.",
        "version": "0.1",
        "x-build-id": "eaT96cNhMPVOqSSZy"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/gochujang~cex-reserve-tracker/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-gochujang-cex-reserve-tracker",
                "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/gochujang~cex-reserve-tracker/runs": {
            "post": {
                "operationId": "runs-sync-gochujang-cex-reserve-tracker",
                "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/gochujang~cex-reserve-tracker/run-sync": {
            "post": {
                "operationId": "run-sync-gochujang-cex-reserve-tracker",
                "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",
                "properties": {
                    "exchanges": {
                        "title": "Exchanges",
                        "type": "array",
                        "description": "Which exchanges' wallets to scan. Leave empty for all.",
                        "default": [],
                        "items": {
                            "type": "string"
                        }
                    },
                    "assets": {
                        "title": "Assets",
                        "type": "array",
                        "description": "Which on-chain assets to query. ETH = native; rest are ERC-20.",
                        "default": [],
                        "items": {
                            "type": "string"
                        }
                    },
                    "minBalanceUsd": {
                        "title": "Minimum Balance USD",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Skip wallet/asset rows below this USD value.",
                        "default": 1000000
                    },
                    "sortBy": {
                        "title": "Sort By",
                        "enum": [
                            "balance_usd_desc",
                            "exchange_asset",
                            "asset_only"
                        ],
                        "type": "string",
                        "description": "Sort order.",
                        "default": "balance_usd_desc"
                    },
                    "limit": {
                        "title": "Max Rows",
                        "minimum": 1,
                        "maximum": 2000,
                        "type": "integer",
                        "description": "Maximum number of (wallet × asset) rows to return.",
                        "default": 200
                    },
                    "alertChangePctNote": {
                        "title": "Note",
                        "type": "string",
                        "description": "This Actor reports the current snapshot. For change-over-time alerts, run on schedule and compare runs (or store snapshots in your own KV store).",
                        "default": ""
                    },
                    "etherscanApiKey": {
                        "title": "Etherscan API key (optional)",
                        "type": "string",
                        "description": "Bring your own Etherscan V2 API key for higher rate limits (recommended for scheduled/heavy use). Get a free key at etherscan.io/myapikey. Default works for occasional use."
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
