DexScreener Realtime Monitor avatar

DexScreener Realtime Monitor

Pricing

Pay per event + usage

Go to Apify Store
DexScreener Realtime Monitor

DexScreener Realtime Monitor

DexScreener Real-time API via SSE. Stream live data for trending pairs, prices, volume & liquidity on Solana, Base, ETH & 60+ chains. Ultra-fast updates perfect for trading bots, sniper algorithms & DeFi analytics dashboards. Detect new token launches instantly with zero polling latency

Pricing

Pay per event + usage

Rating

5.0

(2)

Developer

Muhammet Akkurt

Muhammet Akkurt

Maintained by Community

Actor stats

3

Bookmarked

22

Total users

5

Monthly active users

5.1 hours

Issues response

4 days ago

Last modified

Share

Dexscreener Realtime Monitor - Real-Time DEX Pair Data Streaming API

Dexscreener Realtime Monitor

Real-time cryptocurrency DEX pair data streaming API powered by Dexscreener. Stream live token prices, trading volume, liquidity, buy/sell transactions, and market cap data for Solana, Ethereum, BSC, Base, Arbitrum, and 50+ blockchains.

πŸš€ Overview

This Standby-only Actor provides real-time access to Dexscreener's trending pairs data. It works by mirroring any Dexscreener page you want to monitor. Simply provide the URL of the page you are viewing in your browser (with any filters applied), and this Actor will stream real-time updates for the pairs on that page.

The service operates as a lightweight, always-on web server delivering instant price updates, volume changes, and liquidity movements via WebSocket (WSS).

✨ Key Features

  • πŸ”„ Apify Standby Mode: Always-on, fast-responding web server
  • πŸ”΄ Real-Time Event Streaming: Instant delivery via high-performance WebSocket (WSS)
  • πŸ“‹ Mirror Any Page: Copy any Dexscreener URL β†’ Get live data from that exact view
  • 🌐 Multi-Chain Support: Monitor 50+ blockchains (Solana, Ethereum, BSC, Base, etc.)
  • πŸ“Š Comprehensive Data:
    • Live price updates (USD and native)
    • Trading volume (5m, 1h, 6h, 24h)
    • Buy/sell transaction counts
    • Liquidity depth
    • Market cap and FDV
  • 🎯 Flexible Filtering: Apply filters on Dexscreener website -> Copy URL -> Stream filtered data
  • ⚑ High Performance: Sub-second event delivery optimized for Standby mode
  • πŸ’ͺ Multi-Client Scalable: Connection pooling for same URLs, each client receives only their subscribed data
  • πŸ”Œ Smart Connection Pooling: Multiple clients watching the same URL share a single upstream connection

🌐 Available Endpoints

EndpointTypeDescriptionUse Case
/events/dex/pairsWebSocketTrending pair updatesReal-time price and volume monitoring
/healthHTTP GETService health checkMonitor service status

πŸ”§ Quick Start

Standby Mode Only

This Actor only works in Standby mode. It cannot be run in normal mode.

⚑ Performance & Scaling

This Actor runs on 256 MB RAM by default, which is efficient for most standard use cases. However, if you plan to monitor a large number of different URLs simultaneously or require maximum performance for high-frequency trading, you may want to increase the memory.

How to Increase Memory (Standby Mode)

Since Standby mode uses pre-configured instances, you cannot change memory via API parameters directly. Instead, you must create a Task:

  1. Go to the Apify Console -> Actors -> dexscreener-realtime-monitor.
  2. Click "Create Task" (buttons top right).
  3. Name your Task (e.g., fast-monitor-1gb).
  4. In the Task configuration, go to the "Standby" tab.
  5. Set Memory to a higher value (e.g., 512 MB or 1024 MB).
  6. Enable Standby and Copy the Task Standby URL.
  7. Use this new URL in your application.

Tip: Increasing memory allocates more CPU power, which helps reduce latency when tracking many pairs.

Connecting via WebSocket

Connect to the Actor's Standby URL using the wss:// protocol. Authentication is required using your Apify API Token.

You can authenticate by either:

  1. Passing it in the header: Authorization: Bearer YOUR_APIFY_TOKEN (Recommended for server-side clients)
  2. Appending it as a query parameter: ?token=YOUR_APIFY_TOKEN (For browser websockets where custom headers aren't supported)

Endpoint: wss://muhammetakkurtt--dexscreener-realtime-monitor.apify.actor/events/dex/pairs

Subscribing to a Data Stream

Use the page_url query parameter when connecting to subscribe to a specific Dexscreener view. The API establishes a direct real-time data stream matching your URL's exact view.

Example Endpoint with filter: wss://muhammetakkurtt--dexscreener-realtime-monitor.apify.actor/events/dex/pairs?page_url=https://dexscreener.com/solana

Example Client (Node.js)

1. Install dependencies:

$npm install ws

2. Create client.js and run:

import WebSocket from 'ws';
import https from 'https';
import fs from 'fs';
// Configuration
const CONFIG = {
APIFY_TOKEN: process.env.APIFY_TOKEN || 'YOUR_APIFY_TOKEN', // πŸ‘ˆ Add your token here
DEXSCREENER_URL: 'https://dexscreener.com/solana',
ACTOR_URL: `wss://muhammetakkurtt--dexscreener-realtime-monitor.apify.actor/events/dex/pairs?page_url=${encodeURIComponent('https://dexscreener.com/solana')}`,
HEALTH_URL: 'https://muhammetakkurtt--dexscreener-realtime-monitor.apify.actor/health',
RECONNECT_BASE_DELAY: 1000,
RECONNECT_MAX_DELAY: 30000,
HEALTH_CHECK_INTERVAL: 4 * 60 * 1000 // 4 minutes
};
let reconnectDelay = CONFIG.RECONNECT_BASE_DELAY;
let ws;
let healthCheckInterval;
function connect() {
ws = new WebSocket(CONFIG.ACTOR_URL, {
headers: {
'Authorization': `Bearer ${CONFIG.APIFY_TOKEN}`
}
});
ws.on('open', () => {
console.log('βœ… Connected to Dexscreener Monitor stream');
// Reset reconnection delay on successful connection
reconnectDelay = CONFIG.RECONNECT_BASE_DELAY;
});
ws.on('message', (data) => {
try {
const event = JSON.parse(data);
console.log('πŸ“© Received:', event.event_type || 'Unknown Event');
// Handle the different types of events
if (event.event_type === 'pairs' && event.data.pairs) {
console.log(`Updated ${event.data.pairs.length} pairs!`);
fs.appendFileSync('events.jsonl', JSON.stringify(event) + '\n');
}
} catch (e) {
console.error('⚠️ Failed to parse message:', e.message);
}
});
ws.on('close', (code, reason) => {
console.log(`⚠️ Disconnected (Code: ${code}). Reconnecting in ${reconnectDelay}ms...`);
scheduleReconnect();
});
ws.on('error', (err) => {
console.error('❌ WebSocket error:', err.message);
});
}
function scheduleReconnect() {
setTimeout(() => {
connect();
// Exponential Backoff with Max Delay
reconnectDelay = Math.min(reconnectDelay * 2, CONFIG.RECONNECT_MAX_DELAY);
}, reconnectDelay);
}
// Start Keep-Alive (Health Check)
function startHealthCheck() {
healthCheckInterval = setInterval(() => {
const req = https.get(CONFIG.HEALTH_URL, {
headers: { 'Authorization': `Bearer ${CONFIG.APIFY_TOKEN}` }
}, (res) => {
console.log(`πŸ’“ Health Check: ${res.statusCode}`);
res.resume();
});
req.on('error', (e) => {
console.error(`πŸ’“ Health Check Failed: ${e.message}`);
});
req.setTimeout(10000, () => {
req.destroy();
console.error('πŸ’“ Health Check Timeout');
});
}, HEALTH_CHECK_INTERVAL);
}
// Graceful Shutdown
process.on('SIGINT', () => {
console.log('πŸ›‘ Shutting down client...');
clearInterval(healthCheckInterval);
if (ws) ws.close();
process.exit(0);
});
// Initialization
console.log('πŸš€ Starting Dexscreener Realtime Client...');
connect();
startHealthCheck();

Example Client (Python)

1. Install dependencies:

$pip install websockets aiohttp

2. Create client.py and run:

import asyncio
import websockets
import json
import urllib.parse
import os
import aiohttp
import logging
import sys
# Configuration
APIFY_TOKEN = os.getenv("APIFY_TOKEN", "YOUR_APIFY_TOKEN") # πŸ‘ˆ Add your token here
DEXSCREENER_URL = "https://dexscreener.com/solana"
ENCODED_URL = urllib.parse.quote(DEXSCREENER_URL, safe='')
ACTOR_WSS_URL = f"wss://muhammetakkurtt--dexscreener-realtime-monitor.apify.actor/events/dex/pairs?page_url={ENCODED_URL}"
HEALTH_URL = "https://muhammetakkurtt--dexscreener-realtime-monitor.apify.actor/health"
RECONNECT_BASE_DELAY = 1.0
RECONNECT_MAX_DELAY = 30.0
HEALTH_CHECK_INTERVAL = 240 # 4 minutes
# Setup Logging
logging.basicConfig(
level=logging.INFO,
format='%(asctime)s - %(levelname)s - %(message)s',
datefmt='%H:%M:%S'
)
logger = logging.getLogger("DexscreenerTracker")
async def monitor_health():
"""Pings the health endpoint to prevent Actor from sleeping."""
async with aiohttp.ClientSession() as session:
while True:
try:
await asyncio.sleep(HEALTH_CHECK_INTERVAL)
headers = {"Authorization": f"Bearer {APIFY_TOKEN}"}
async with session.get(HEALTH_URL, headers=headers, timeout=10) as response:
logger.info(f"πŸ’“ Health Check: {response.status}")
except Exception as e:
logger.error(f"πŸ’“ Health Check Failed: {e}")
async def listen():
reconnect_delay = RECONNECT_BASE_DELAY
while True:
try:
logger.info(f"πŸ”Œ Connecting to {ACTOR_WSS_URL}...")
headers = {"Authorization": f"Bearer {APIFY_TOKEN}"}
async with websockets.connect(ACTOR_WSS_URL, additional_headers=headers) as websocket:
logger.info("βœ… Connected!")
reconnect_delay = RECONNECT_BASE_DELAY # Reset delay on success
async for message in websocket:
try:
event = json.loads(message)
event_type = event.get('event_type')
logger.info(f"πŸ“© Received: {event_type}")
if event_type == 'pairs':
pairs = event.get('data', {}).get('pairs', [])
logger.info(f"Updated {len(pairs)} pairs!")
with open('events.jsonl', 'a', encoding='utf-8') as f:
json.dump(event, f, ensure_ascii=False)
f.write('\n')
except json.JSONDecodeError:
logger.warning("Received invalid JSON message")
except (websockets.ConnectionClosed, OSError) as e:
logger.warning(f"⚠️ Connection lost: {e}")
except Exception as e:
logger.error(f"❌ Unexpected error: {e}")
# Exponential Backoff
logger.info(f"⏳ Reconnecting in {reconnect_delay}s...")
await asyncio.sleep(reconnect_delay)
reconnect_delay = min(reconnect_delay * 2, RECONNECT_MAX_DELAY)
async def main():
# Run Listener and Health Monitor concurrently
try:
await asyncio.gather(
listen(),
monitor_health()
)
except asyncio.CancelledError:
logger.info("πŸ›‘ Task cancelled, exiting...")
if __name__ == "__main__":
try:
asyncio.run(main())
except KeyboardInterrupt:
logger.info("πŸ›‘ Exiting due to user interrupt...")
sys.exit(0)

HTTP Endpoints Usage

# Set your Apify API token
export APIFY_TOKEN="YOUR_APIFY_TOKEN"
# Check service health and connection stats
curl -H "Authorization: Bearer $APIFY_TOKEN" https://muhammetakkurtt--dexscreener-realtime-monitor.apify.actor/health

URL Parameters

You can use any Dexscreener URL as the page_url parameter.

It supports ALL Dexscreener filters and sorting options.

Simply apply filters on the Dexscreener website, copy the URL from your browser, and pass it as the page_url. The Actor will mirror the exact data stream for that page.

Some common parameters you might encounter include (but are not limited to):

ParameterDescription
rankBySort by metric (trendingScoreH6, volume24h, liquidity, etc.)
minLiqMinimum liquidity (e.g., 1000, 100000)
maxLiqMaximum liquidity
minMarketCapMinimum market cap
dexIdsFilter by DEX (e.g., raydium, uniswap, pumpswap)
boostedOnly boosted pairs (1)

Node.js/TypeScript Client SDK

For easier integration, use the DexScreener Realtime Client - a Node.js/TypeScript SDK and CLI that handles WebSocket connections, reconnection logic, and data parsing for you.

πŸ”— dexscreener-realtime-client

Features:

  • πŸ› οΈ SDK: Programmatic access with TypeScript types
  • πŸ’» CLI: Stream data directly to stdout, JSONL files, or webhooks
  • πŸ”„ Auto-reconnect: Built-in connection management
  • πŸ“‘ Multi-stream: Monitor multiple URLs simultaneously

πŸ” Health Monitoring

Health Endpoint Response

{
"status": "ok",
"timestamp": "2025-12-07T00:00:00.000Z",
"connections": {
"total": 5,
"unique_urls": 2,
"by_url": {
"https://dexscreener.com/solana?rankBy=trendingScoreH6&order=desc&min5MBuys=450": 3,
"https://dexscreener.com/bsc": 2
}
},
"messages_processed": 12500
}

πŸ“Š Event Data Structure

Each WebSocket message contains a JSON object with the real-time data:

{
"event_type": "pairs",
"timestamp": "2025-12-06T23:28:36.113Z",
"data": {
"stats": {
"m5": {
"txns": 54923,
"volumeUsd": 9045447.559999997
},
"h1": {
"txns": 756730,
"volumeUsd": 134179114.12000006
},
"h6": {
"txns": 4880021,
"volumeUsd": 1151490222.8600044
},
"h24": {
"txns": 19323940,
"volumeUsd": 4377335189.870019
}
},
"pairs": [
{
"chainId": "solana",
"dexId": "raydium",
"labels": [
"CPMM"
],
"pairAddress": "EAf2Qn1kNix6gdiaEviWqzKwKtJUJTXTRT3nZLYcV9QY",
"baseToken": {
"address": "FT6ZnLbmaQbUmxbpe69qwRgPi9tU8QGY8S7gqt4Wbonk",
"name": "BIG",
"symbol": "BIG",
"decimals": 6
},
"quoteToken": {
"address": "USD1ttGY1N17NEEHLmELoaybftRBUSErhqYiQzvEmuB",
"name": "World Liberty Financial USD",
"symbol": "USD1",
"decimals": 6
},
"quoteTokenSymbol": "USD1",
"price": "0.001820",
"priceUsd": "0.001820",
"txns": {
"m5": {
"buys": 68,
"sells": 28
},
"h1": {
"buys": 1333,
"sells": 1064
},
"h6": {
"buys": 32404,
"sells": 29022
},
"h24": {
"buys": 35242,
"sells": 32222
}
},
"buyers": {
"m5": 51,
"h1": 622,
"h6": 7600,
"h24": 8290
},
"sellers": {
"m5": 27,
"h1": 565,
"h6": 6549,
"h24": 6859
},
"makers": {
"m5": 76,
"h1": 996,
"h6": 8906,
"h24": 9249
},
"volume": {
"m5": 9933.02,
"h1": 296433.65,
"h6": 9458621.98,
"h24": 9981693.42
},
"volumeBuy": {
"m5": 4850,
"h1": 144929.23,
"h6": 4722534.19,
"h24": 4996787.53
},
"volumeSell": {
"m5": 5083.01,
"h1": 151504.42,
"h6": 4736087.78,
"h24": 4984905.89
},
"priceChange": {
"m5": -0.65,
"h1": -8.89,
"h6": 239,
"h24": 2582
},
"liquidity": {
"usd": 151707.33,
"base": 41663892,
"quote": 75853
},
"marketCap": 1820609,
"fdv": 1820609,
"pairCreatedAt": 1765041438000,
"profile": {
"eti": true,
"header": true,
"website": true,
"twitter": true,
"linkCount": 2,
"imgKey": "2da648"
},
"cmsProfile": {
"headerId": "4a2b4e6e0640ededdd9b3dab20d9f6900bddcc6878fe732d38c9f9cc80d98efc",
"iconId": "82678f55db554c1d61b069daf596aeef6f1d665ee3a12f261b144c0326c9c17f",
"description": "This is going to be $BIG",
"links": [
{
"label": "Website",
"url": "https://truthsocial.com/@unknown/posts/115673738803217830"
},
{
"type": "twitter",
"url": "https://x.com/i/communities/1997366922938126733"
}
],
"nsfw": false
},
"isBoostable": true,
"c": "a",
"a": "solamm"
},
{
"chainId": "solana",
"dexId": "pumpswap",
"pairAddress": "8wXzwpLjk6QJMYYC1VHueNnxRVW2nFGvQjgEnV4Mv8sY",
"baseToken": {
"address": "CSrwNk6B1DwWCHRMsaoDVUfD5bBMQCJPY72ZG3Nnpump",
"name": "Franklin The Turtle",
"symbol": "Franklin",
"decimals": 6
},
"quoteToken": {
"address": "So11111111111111111111111111111111111111112",
"name": "Wrapped SOL",
"symbol": "SOL",
"decimals": 9
},
"quoteTokenSymbol": "SOL",
"price": "0.00007098",
"priceUsd": "0.009336",
"txns": {
"m5": {
"buys": 57,
"sells": 54
},
"h1": {
"buys": 7924,
"sells": 799
},
"h6": {
"buys": 13090,
"sells": 5776
},
"h24": {
"buys": 37491,
"sells": 28148
}
},
"buyers": {
"m5": 49,
"h1": 7196,
"h6": 8713,
"h24": 13450
},
"sellers": {
"m5": 46,
"h1": 465,
"h6": 2077,
"h24": 6558
},
"makers": {
"m5": 94,
"h1": 7543,
"h6": 9818,
"h24": 15675
},
"volume": {
"m5": 17675.25,
"h1": 334508.48,
"h6": 2505119.75,
"h24": 12825807.97
},
"volumeBuy": {
"m5": 8714.96,
"h1": 156717.8,
"h6": 1242301.69,
"h24": 6470078.63
},
"volumeSell": {
"m5": 8960.28,
"h1": 177790.68,
"h6": 1262818.06,
"h24": 6355729.34
},
"priceChange": {
"m5": -0.34,
"h1": -19.48,
"h6": -22.12,
"h24": 223
},
"liquidity": {
"usd": 403605.74,
"base": 21566984,
"quote": 1537.8354
},
"marketCap": 9335780,
"fdv": 9335780,
"pairCreatedAt": 1764588851000,
"profile": {
"eti": true,
"header": true,
"website": true,
"twitter": true,
"linkCount": 2,
"imgKey": "731b40"
},
"cmsProfile": {
"headerId": "11b8384e600e78ea2464ec985f00bf3f02aee6b54dba65950ed1e9f38d0101e4",
"iconId": "83199cf43529903f4b00b760f45efd6362b6c3dc9f9552184112dd835a9c7b4f",
"description": "Franklin’s resurgence started when a combat-styled meme of the classic 90s turtle suddenly went viral on X. The internet ran with itβ€”remixing it, evolving it, and turning Franklin into a symbol of humor, rebellion, and nostalgia.\nWhat began as a single image quickly became a full-blown movement, with thousands of users creating their own versions and pushing Franklin back into the spotlight.\nNow the community has brought Franklin into Web3, transforming an iconic childhood character into a modern memecoin on Solanaβ€”driven by creativity, culture, and the chaotic fun of the internet.",
"links": [
{
"label": "Website",
"url": "https://theturtlefranklin.fun/"
},
{
"type": "twitter",
"url": "https://x.com/FranklineOnSol"
}
],
"nsfw": false
},
"isBoostable": true,
"c": "a",
"a": "pumpfundex",
"launchpad": {
"progress": 100,
"creator": "6EF8rrecthR5Dkzon8Nwu78hRvfCKubJ14M5uBEwF6P",
"migrationDex": "pumpswap",
"meta": {
"id": "pumpfun"
}
}
},
{
"chainId": "solana",
"dexId": "pumpswap",
"pairAddress": "GdFCD7L8x1GiudFz1wthNHEb352k3Ni37rSwtJgMgLpT",
"baseToken": {
"address": "5TfqNKZbn9AnNtzq8bbkyhKgcPGTfNDc9wNzFrTBpump",
"name": "Pumpfun Pepe",
"symbol": "PFP",
"decimals": 6
},
"quoteToken": {
"address": "So11111111111111111111111111111111111111112",
"name": "Wrapped SOL",
"symbol": "SOL",
"decimals": 9
},
"quoteTokenSymbol": "SOL",
"price": "0.00002236",
"priceUsd": "0.002941",
"txns": {
"m5": {
"buys": 4,
"sells": 1
},
"h1": {
"buys": 3039,
"sells": 33
},
"h6": {
"buys": 3518,
"sells": 394
},
"h24": {
"buys": 6963,
"sells": 1271
}
},
"buyers": {
"m5": 3,
"h1": 3032,
"h6": 3293,
"h24": 6169
},
"sellers": {
"m5": 1,
"h1": 31,
"h6": 284,
"h24": 618
},
"makers": {
"m5": 4,
"h1": 3053,
"h6": 3432,
"h24": 6426
},
"volume": {
"m5": 692.49,
"h1": 9705.33,
"h6": 149580.03,
"h24": 418743.93
},
"volumeBuy": {
"m5": 676.73,
"h1": 5262.34,
"h6": 73637.49,
"h24": 216838.98
},
"volumeSell": {
"m5": 15.76,
"h1": 4442.98,
"h6": 75942.54,
"h24": 201904.95
},
"priceChange": {
"m5": 1.47,
"h1": 0.9,
"h6": -5.73,
"h24": 21.91
},
"liquidity": {
"usd": 272463.13,
"base": 46256584,
"quote": 1037.4329
},
"marketCap": 2940100,
"fdv": 2940100,
"pairCreatedAt": 1759428427000,
"profile": {
"eti": true,
"header": true,
"website": true,
"twitter": true,
"linkCount": 5,
"imgKey": "6c3f2d"
},
"cmsProfile": {
"headerId": "91b533fbec1009033ea15d4116b736a76013b984e7facd14f8dce41076bcf476",
"iconId": "fe04186d2f7a5752b8e27e35cabdbfb7e7c44c7360adac9934f008fe163c6609",
"description": "Every normie who makes a Pumpfun account starts here. It's the default mask, the blank slate, the face of every beginning - Pumpfun Pepe",
"links": [
{
"label": "Website",
"url": "https://www.pfpepe.fun/"
},
{
"label": "Whitepaper",
"url": "https://www.pfpepe.fun/Pfp%20Whitepaper.pdf"
},
{
"label": "Magic Eden",
"url": "https://magiceden.io/marketplace/pumpfun_pepe"
},
{
"label": "Meme-Depot",
"url": "https://memedepot.com/d/pumpfun-pepe"
},
{
"type": "twitter",
"url": "https://x.com/pumpfun_pepe?s=21"
}
],
"nsfw": false
},
"isBoostable": true,
"boosts": {
"active": 60
},
"c": "a",
"a": "pumpfundex",
"launchpad": {
"progress": 100,
"creator": "6EF8rrecthR5Dkzon8Nwu78hRvfCKubJ14M5uBEwF6P",
"migrationDex": "pumpswap",
"meta": {
"id": "pumpfun"
}
}
}
]
}
}

Error Event

Sent when an error occurs (e.g., trying to access without page_url parameter or invalid URL).

{
"event_type": "error",
"timestamp": "2025-12-06T23:28:36.113Z",
"data": {
"code": "BAD_REQUEST",
"message": "page_url must be a valid Dexscreener URL..."
}
}

🚨 Connection Management

Connection Features

  • Auto-reconnection: Automatic recovery from disconnects
  • Connection cleanup: Removal of inactive clients
  • Graceful shutdown: Clean disconnect notifications
  • Connection Pooling: Clients watching the same URL share a single upstream connection
  • URL-Based Routing: Each client only receives data for their subscribed page_url

Multi-Client Architecture

  • Multiple clients can connect simultaneously with different page_url parameters
  • Clients watching the same URL share an upstream connection

Connection Event Types & Behaviors

Successful Connection Event: Sent immediately upon a successful connection.

{
"event_type": "connected",
"timestamp": "2025-12-06T23:28:36.113Z",
"data": {
"message": "Connected to websocket stream",
"connection_id": "ws_123456789_abc",
"endpoint": "pairs",
"page_url": "https://dexscreener.com/solana"
}
}

Keep-Alive & Ping/Pong: The server uses standard WebSocket ping/pong frames at regular intervals to ensure the connection is alive. Clients using typical WebSocket libraries (ws in Node, websockets in Python) handle these automatically without needing extra user code.

Server Shutdown: When the Actor is shutting down or restarting, it safely closes WebSocket connections using the close code 1001 (Going Away) with the reason "Server shutting down". Clients should listen for this code to trigger reconnection logic nicely.

🎯 Use Cases

πŸ’Ή Trading & Investment

  • Real-Time Price Monitoring: Track live price movements across any DEX
  • Volume Spike Detection: Identify sudden trading activity
  • Liquidity Analysis: Monitor liquidity depth changes
  • New Pair Discovery: Catch trending pairs early

πŸ“Š Analytics & Research

  • Market Data Collection: Build historical price databases
  • DEX Comparison: Compare activity across different DEXes
  • Chain Analysis: Study trading patterns per blockchain

πŸ”” Monitoring & Alerts

  • Price Alerts: Trigger notifications on price movements
  • Volume Alerts: Get notified on unusual trading activity
  • Dashboard Integration: Feed real-time data to monitoring dashboards

πŸ› οΈ Development & Integration

  • Trading Bots: Integrate live market data into trading algorithms
  • DeFi Applications: Power DeFi apps with real-time pair data
  • Portfolio Trackers: Build live portfolio monitoring tools