# CEX Spot Arbitrage Scanner — Binance, Bybit, OKX, Kraken, Gate (`gochujang/cex-spot-arb-scanner`) Actor

Scans spot bid/ask prices across 5 major CEXes (Binance, Bybit, OKX, Kraken, Gate.io) and identifies raw cross-exchange spread opportunities. Best buy/sell exchange highlighted per coin. No API key. $0.003/coin.

- **URL**: https://apify.com/gochujang/cex-spot-arb-scanner.md
- **Developed by:** [Hojun Lee](https://apify.com/gochujang) (community)
- **Categories:** Business
- **Stats:** 4 total users, 0 monthly users, 97.3% runs succeeded, 0 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/actors/running/actors-in-store.md#pay-per-usage

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — 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

### What does CEX Spot Arb Scanner do?

**CEX Spot Arb Scanner** pulls real-time bid/ask quotes from five major centralized exchanges — **Binance, Bybit, OKX, Kraken, and Gate.io** — and calculates cross-exchange **spot price arbitrage opportunities** for any list of cryptocurrency pairs. For each coin it computes the gross spread, fee-adjusted net yield, minimum capital requirement, execution feasibility, exchange counterparty risk, liquidity symmetry, and a sustainability score that indicates whether the spread is structural or likely to close within seconds.

### Why use CEX Spot Arb Scanner?

- **All five major CEXs in a single call.** Instead of polling Binance, Bybit, OKX, Kraken, and Gate.io separately and reconciling the results yourself, one actor run gives you a unified, comparable dataset with per-exchange bid/ask prices.
- **Fee-aware profitability, not just raw spread.** The **arb\_net\_yield\_pct** field deducts taker fees, estimated slippage, and withdrawal costs from both legs so you see the actual pocket-able profit — not the headline spread that evaporates after fees.
- **Know before you trade: execution window and capital floor.** The **execution\_window** field (seconds / minutes / hours / persistent) and **capital\_requirement\_usd** tell you whether an opportunity requires sub-millisecond algo execution or is wide enough to capture manually.
- **Counterparty risk baked in.** Each result carries an **exchange\_risk\_score** (0–100) and **sustainability\_score** so you can weigh exchange reliability against the apparent yield.
- **No API key required.** All five exchange APIs used are public, unauthenticated endpoints — no credentials to manage.

### How to use CEX Spot Arb Scanner

1. Go to the [Apify Store](https://apify.com/store) and find **CEX Spot Arb Scanner**.
2. Click **Try for free** to open the input configuration page.
3. In the **Coins** field, enter the list of token symbols you want to scan (e.g. `["BTC", "ETH", "SOL", "DOGE"]`). The default is the top 10 by market cap.
4. Click **Run**. The actor fetches live prices from all five exchanges in parallel.
5. Download the structured JSON dataset. Filter by `signal = "arbitrage_opportunity"` or sort by `arb_net_yield_pct` descending to find the best opportunities.

### Input

| Field | Type | Default | Description |
|---|---|---|---|
| `coins` | array of strings | `["BTC","ETH","SOL","BNB","XRP","DOGE","ADA","AVAX","LINK","MATIC"]` | Coin ticker symbols to scan across all five exchanges. |

### Output

```json
[
  {
    "type": "summary",
    "coins_analyzed": 10,
    "arbitrage_opportunities": 3,
    "profitable_after_fees_count": 2,
    "triangular_arb_opportunity_pct": -0.0023,
    "exchanges": ["binance","bybit","okx","kraken","gateio"],
    "fetched_at": "2026-09-02T10:31:00Z",
    "total_opportunities_found": 2,
    "avg_net_yield_pct": 0.0041,
    "arb_market_state": "normal",
    "most_active_arb_pairs": ["XRP","DOGE","AVAX"],
    "best_opportunity": {
      "symbol": "XRP",
      "arb_net_yield_pct": 0.0089,
      "arb_type": "geographic",
      "execution_window": "minutes",
      "capital_requirement_usd": 4120.5,
      "smart_money_competition": "moderate",
      "best_buy_exchange": "gateio",
      "best_sell_exchange": "kraken"
    }
  },
  {
    "symbol": "XRP",
    "best_buy_exchange": "gateio",
    "best_sell_exchange": "kraken",
    "best_bid_usd": 0.6341,
    "best_ask_usd": 0.6315,
    "raw_spread_pct": 0.4119,
    "raw_spread_bps": 41.19,
    "signal": "arbitrage_opportunity",
    "fee_adjusted_spread_bps": 23.19,
    "net_profit_estimate_pct": 0.2319,
    "arb_net_yield_pct": 0.0089,
    "execution_feasibility": "slow",
    "execution_window": "minutes",
    "capital_requirement_usd": 4120.5,
    "exchange_risk_score": 30,
    "arb_type": "geographic",
    "liquidity_symmetry": "asymmetric",
    "sustainability_score": 62,
    "smart_money_competition": "moderate",
    "risk_category": "timing_risk",
    "arb_quality_score": 58,
    "capital_efficiency": 0.73,
    "volume_ceiling_usd": 18400.0,
    "geographic_pattern": "regional_premium",
    "price_binance_bid": 0.6329,
    "price_binance_ask": 0.633,
    "price_kraken_bid": 0.6341,
    "price_kraken_ask": 0.6343,
    "price_gateio_bid": 0.6312,
    "price_gateio_ask": 0.6315,
    "fetched_at": "2026-09-02T10:31:00Z"
  }
]
```

### Data fields

| Field | Description |
|---|---|
| `symbol` | Coin ticker (e.g. `BTC`, `ETH`) |
| `best_buy_exchange` | Exchange with the lowest ask price (cheapest to buy) |
| `best_sell_exchange` | Exchange with the highest bid price (best to sell) |
| `best_bid_usd` | Highest bid across all exchanges |
| `best_ask_usd` | Lowest ask across all exchanges |
| `raw_spread_pct` | Gross price spread as a percentage |
| `raw_spread_bps` | Gross spread in basis points |
| `signal` | `arbitrage_opportunity` (>0.1% spread) / `minor_spread` / `no_arb` |
| `fee_adjusted_spread_bps` | Spread minus round-trip taker fees from both legs |
| `net_profit_estimate_pct` | Fee-adjusted spread converted to percentage |
| `arb_net_yield_pct` | Gross spread minus all costs: taker fees + slippage + withdrawal |
| `execution_window` | `seconds` / `minutes` / `hours` / `persistent` |
| `capital_requirement_usd` | Minimum USD capital to profit after all fixed and variable costs |
| `exchange_risk_score` | 0–100 combined counterparty risk of both exchanges (higher = riskier) |
| `arb_type` | `pure_spot` / `stablecoin_peg` / `geographic` / `listing_arb` |
| `liquidity_symmetry` | `symmetric` / `asymmetric` / `one_sided_thin` |
| `sustainability_score` | 0–100 estimate of how structurally persistent the spread is |
| `smart_money_competition` | `uncrowded` / `moderate` / `crowded` / `ultra_competitive` |
| `execution_feasibility` | `instant` / `fast` / `slow` / `impractical` |
| `risk_category` | `no_risk` / `low_risk` / `timing_risk` / `theoretical` |
| `arb_quality_score` | 0–100 composite: spread + liquidity + execution speed + net profit |
| `capital_efficiency` | Estimated annual return per $1,000 deployed |
| `volume_ceiling_usd` | Max trade size before market impact erodes profitability |
| `geographic_pattern` | `regional_premium` / `liquidity_fragmentation` / `exchange_specific` / `news_driven` |
| `price_{exchange}_bid` | Per-exchange bid price (one field per exchange) |
| `price_{exchange}_ask` | Per-exchange ask price (one field per exchange) |
| `fetched_at` | ISO 8601 timestamp |

### Cost estimation

Pricing model: **$0.003 per coin analyzed**.

| Scenario | Coins | Estimated cost |
|---|---|---|
| Default 10-coin scan | 10 coins | $0.03 |
| Top 50 coins scan | 50 coins | $0.15 |
| Full 100-coin scan | 100 coins | $0.30 |

### FAQ

**Q: Does the actor actually execute trades or move funds?**
A: No. The actor is read-only. It fetches public order-book quotes and computes analytics only. No accounts, API keys, or wallets are connected.

**Q: Why might `arb_net_yield_pct` be negative even when `raw_spread_pct` is positive?**
A: After subtracting taker fees from both exchange legs, estimated slippage, and withdrawal costs (which are fixed regardless of trade size), many spreads become unprofitable for small trade sizes. The `capital_requirement_usd` field shows the minimum size needed to break even.

**Q: How accurate are the fee and withdrawal cost estimates?**
A: The actor uses typical published taker fee tiers for each exchange and median withdrawal fee estimates. Actual costs vary by VIP tier, withdrawal method, and network congestion. Treat the outputs as screening signals, not guaranteed profit calculations.

**Disclaimer:** This actor provides price-spread data for informational and research purposes only. Cryptocurrency arbitrage involves significant execution risk, counterparty risk, and regulatory considerations. This is not financial advice. Always verify live conditions before committing capital.

Keywords: crypto arbitrage scanner, CEX spot price difference, cross-exchange price gap, Binance Bybit OKX spread, crypto arbitrage tool, exchange price discrepancy, fee-adjusted arb yield, crypto trading signals, arbitrage opportunity finder, spot market inefficiency

***

### Related actors

- [Cross-Chain Bridge Arb Scanner](https://apify.com/gochujang/cross-chain-bridge-arb) — DEX-to-DEX cross-chain arb to complement this actor's CEX-to-CEX spot spread analysis
- [Kimchi Premium Tracker](https://apify.com/gochujang/kimchi-premium-tracker) — Korea exchange premium as a structural CEX arb signal
- [CEX Funding Aggregator](https://apify.com/gochujang/cex-funding-aggregator) — Funding rates across the same exchanges to combine with spot arb for full carry strategy

### Feedback

If this actor powers your arbitrage research, a review helps others find it: [Leave a review on Apify Store](https://apify.com/gochujang/cex-spot-arb-scanner#reviews)

# Actor input Schema

## `coins` (type: `array`):

Coin symbols to scan for price differences across exchanges (e.g., BTC, ETH, SOL).

## Actor input object example

```json
{
  "coins": [
    "BTC",
    "ETH",
    "SOL",
    "BNB",
    "XRP",
    "DOGE",
    "ADA",
    "AVAX",
    "LINK",
    "MATIC"
  ]
}
```

# Actor output Schema

## `results` (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 = {};

// Run the Actor and wait for it to finish
const run = await client.actor("gochujang/cex-spot-arb-scanner").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 = {}

# Run the Actor and wait for it to finish
run = client.actor("gochujang/cex-spot-arb-scanner").call(run_input=run_input)

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

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

```

## CLI example

```bash
echo '{}' |
apify call gochujang/cex-spot-arb-scanner --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,gochujang/cex-spot-arb-scanner"
        }
    }
}

```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/MO3FAbX5xykgbkhCQ/builds/aaPjaam0VIDX0ahcg/openapi.json
