DexScreener Realtime Monitor
Pricing
Pay per event + usage
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
Actor stats
3
Bookmarked
22
Total users
5
Monthly active users
5.1 hours
Issues response
4 days ago
Last modified
Categories
Share

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
| Endpoint | Type | Description | Use Case |
|---|---|---|---|
/events/dex/pairs | WebSocket | Trending pair updates | Real-time price and volume monitoring |
/health | HTTP GET | Service health check | Monitor 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:
- Go to the Apify Console -> Actors ->
dexscreener-realtime-monitor. - Click "Create Task" (buttons top right).
- Name your Task (e.g.,
fast-monitor-1gb). - In the Task configuration, go to the "Standby" tab.
- Set Memory to a higher value (e.g.,
512 MBor1024 MB). - Enable Standby and Copy the Task Standby URL.
- 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:
- Passing it in the header:
Authorization: Bearer YOUR_APIFY_TOKEN(Recommended for server-side clients) - 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';// Configurationconst CONFIG = {APIFY_TOKEN: process.env.APIFY_TOKEN || 'YOUR_APIFY_TOKEN', // π Add your token hereDEXSCREENER_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 connectionreconnectDelay = 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 eventsif (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 DelayreconnectDelay = 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 Shutdownprocess.on('SIGINT', () => {console.log('π Shutting down client...');clearInterval(healthCheckInterval);if (ws) ws.close();process.exit(0);});// Initializationconsole.log('π Starting Dexscreener Realtime Client...');connect();startHealthCheck();
Example Client (Python)
1. Install dependencies:
$pip install websockets aiohttp
2. Create client.py and run:
import asyncioimport websocketsimport jsonimport urllib.parseimport osimport aiohttpimport loggingimport sys# ConfigurationAPIFY_TOKEN = os.getenv("APIFY_TOKEN", "YOUR_APIFY_TOKEN") # π Add your token hereDEXSCREENER_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.0RECONNECT_MAX_DELAY = 30.0HEALTH_CHECK_INTERVAL = 240 # 4 minutes# Setup Logginglogging.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_DELAYwhile 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 successasync 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 Backofflogger.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 concurrentlytry: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 tokenexport APIFY_TOKEN="YOUR_APIFY_TOKEN"# Check service health and connection statscurl -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):
| Parameter | Description |
|---|---|
rankBy | Sort by metric (trendingScoreH6, volume24h, liquidity, etc.) |
minLiq | Minimum liquidity (e.g., 1000, 100000) |
maxLiq | Maximum liquidity |
minMarketCap | Minimum market cap |
dexIds | Filter by DEX (e.g., raydium, uniswap, pumpswap) |
boosted | Only 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_urlparameters - 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