Binance WebSocket — market streams vs listing announcements

Searching for the Binance WebSocket lands you in one of two camps: you want live market data (trades, ticker, depth) for symbols that already trade — or you want to fire the instant Binance announces a new listing, a delisting, or a HODLer airdrop. Binance's market streams do the first. They do not do the second. This guide covers both, with runnable code.

Two kinds of socket, two jobs

FeedWhat it streamsGood for
Binance market / futures streamsLive trades, ticker & depth for existing spot and perpetual symbolsCharts, execution, market making
Announcement WebSocketAn event the moment a new listing, delisting or airdrop is publishedReacting before the pair is liquid

Binance's native market-data WebSocket

Binance spot market streams live at wss://stream.binance.com:9443. You can connect straight to a raw stream path such as /ws/btcusdt@trade, use /stream?streams= for a combined subscription, or send a SUBSCRIBE message after connecting. USD-M futures use wss://fstream.binance.com.

# pip install "websockets>=14"
import asyncio, json, websockets

async def main():
    url = "wss://stream.binance.com:9443/ws"
    sub = {"method": "SUBSCRIBE",
           "params": ["btcusdt@trade", "ethusdt@trade"],
           "id": 1}
    async with websockets.connect(url) as ws:
        await ws.send(json.dumps(sub))
        async for raw in ws:
            print(json.loads(raw))

asyncio.run(main())

Perfect for a symbol that already trades. But every stream name (btcusdt@trade) references a symbol that must already exist — which is exactly the problem for a coin that hasn't listed yet.

Why the market streams can't tell you about new listings

A new Binance symbol has no stream until it goes live, so there is nothing to subscribe to ahead of time. Binance publishes its listing, delisting, HODLer-airdrop and Monitoring Tag decisions on its announcement pages and over an announcement WebSocket of its own — a channel entirely separate from the market sockets. That native announcement feed works, but it is not built for latency: it delivers the same notice slower than a dedicated announcement feed. By the time NEWUSDT@trade starts emitting, the fastest movers have already reacted to the announcement. The market WebSocket is downstream of the news, not the news itself.

The announcement WebSocket: catch the listing at publication

CryptoListing.ws runs a dedicated announcement WebSocket that broadcasts a structured JSON event in real time the instant Binance publishes an announcement. It watches Binance's official announcement channel for you and pushes the parsed result.

PropertyValue
Endpoint — Tokyo (full feed)wss://cryptolisting.ws — Binance + Upbit + Bithumb, AWS Tokyo (ap-northeast-1a), same region as Binance
Filter to Binancewss://cryptolisting.ws?cex=binance
AuthX-API-Key header on the upgrade request
FormatBinary frames, UTF-8 JSON, microsecond-precision timestamps
Binance eventsspot_listing, futures_listing, spot_delisting, futures_delisting, hodler_airdrop, monitoring_tag_extend, monitoring_tag_remove, not_listing
# pip install "websockets>=14"  — the header param is additional_headers
# (extra_headers was removed in websockets v14+)
import asyncio, json, websockets

API_KEY = "dsk_your_key_here"
WS_URL  = "wss://cryptolisting.ws?cex=binance"

async def run():
    headers = {"X-API-Key": API_KEY}
    async with websockets.connect(WS_URL, additional_headers=headers) as ws:
        async for raw in ws:
            msg = json.loads(raw)
            if msg["type"] == "announcement":
                for ticker in msg["ticker"].split(","):
                    print(msg["listingType"], ticker, msg["title"])

asyncio.run(run())

Message format

Every announcement is a single JSON object. A single notice can list several coins, so ticker may be comma-separated — always split it.

{
  "type": "announcement",
  "title": "Binance Will List TOKEN (TOKEN)",
  "ticker": "TOKEN",
  "publisher": "binance",
  "listingType": "spot_listing",
  "detectedTimestampUs": 1710345000005000,
  "dispatchTimestampUs": 1710345000006000
}

Route by listing type

Because the feed carries the full Binance event set, your bot can branch on listingType: open a long path on spot_listing / futures_listing / hodler_airdrop, a risk path on spot_delisting / futures_delisting / monitoring_tag_extend, and ignore not_listing. See the message reference for the complete schema.

Use both feeds together

The two sockets complement each other. Subscribe to the announcement WebSocket to learn that a symbol is being listed; the moment the event arrives, open Binance's native <symbol>@trade or @ticker stream to follow the price. One feed is the trigger, the other is the telemetry.

FAQ

What is the Binance WebSocket endpoint?

Spot market streams live at wss://stream.binance.com:9443 (raw /ws/<stream>, combined /stream?streams=, or a SUBSCRIBE message); USD-M futures at wss://fstream.binance.com. They carry data for symbols that already trade.

Can the native Binance WebSocket alert me to new listings?

The market streams can't — you can only subscribe to symbols that already exist. Binance does offer an announcement WebSocket of its own that carries these notices, including listings, but it is slower than CryptoListing.ws's feed. For the fastest structured version of the same announcements, use a dedicated announcement API.

How do I filter the announcement feed to Binance only?

Append ?cex=binance to the Tokyo endpoint: wss://cryptolisting.ws?cex=binance. You can combine exchanges, e.g. ?cex=binance,upbit.

What about Upbit and Bithumb?

The same feed covers Upbit and Bithumb. Korea-based bots trading Upbit can also use the Seoul endpoint.

Get your API key

Contact us on Telegram to start streaming Binance listing announcements. See pricing & tiers, the full documentation, or the Binance listing alert overview.

Get API key on Telegram