New Meteora DLMM pools in real time
Meteora DLMM pools are created by the program's LbPairCreate event. Our feed decodes it
into a pool_create message as soon as we receive the transaction, then streams the pool's liquidity
changes and swaps in the same JSON shape.
Market data only. Nothing here is a recommendation to trade any pool or token.
Subscribe
Ask for DLMM pool creations, liquidity and swaps, and keep track of the pools you have seen created:
import asyncio, json, os, websockets # pip install websockets
URL = "wss://feed.lunarshadowlabs.com/ws?venues=meteora_dlmm&kinds=pool_create,liquidity,swap"
HEADERS = {"Authorization": f"Bearer {os.environ['LSL_KEY']}"}
async def main():
new_pools = set()
async with websockets.connect(URL, additional_headers=HEADERS, max_size=None) as ws:
async for raw in ws:
m = json.loads(raw)
if m["kind"] == "pool_create":
new_pools.add(m["pool"])
print("new DLMM pool", m["pool"], m["base_mint"], m["quote_mint"], "bin_step", m["x"]["bin_step"])
elif m["kind"] in ("liquidity", "swap") and m["pool"] in new_pools:
print(m["kind"], m["pool"], m["base_amount"], m["quote_amount"])
asyncio.run(main())
Filters combine: kind and venue and (if given) a watchlist. For production use, add the resume and reconnect loop from the docs.
What a new pool looks like
{
"v": 1,
"seq": 184395,
"kind": "pool_create",
"venue": "meteora_dlmm",
"keys": [
"GenT72DYvcRMYPa56xparbTpE9FCxUwP2vxzENBpM1PF",
"So11111111111111111111111111111111111111112",
"4GCoQtVggsLcK39N9G6tBZZW6qFVRzT9DbYecRWwDG31",
null
],
"stage": "executed",
"source": "geyser",
"commitment": "processed",
"slot": 454292856,
"sig": "2vuHTGLxqosqAEs9bVDE3m3WcyGNhmvVYB7rFhMcFWnFGe8VCpptWsrv97sDzccNR9JxZf4c7tuehPY7mY4xQM3R",
"ix": 0,
"inner": 6,
"t_ingest_us": 1791394899628833,
"t_emit_us": 1791394899628882,
"via": null,
"pool": "4GCoQtVggsLcK39N9G6tBZZW6qFVRzT9DbYecRWwDG31",
"creator": null,
"base_mint": "GenT72DYvcRMYPa56xparbTpE9FCxUwP2vxzENBpM1PF",
"quote_mint": "So11111111111111111111111111111111111111112",
"base_decimals": 6,
"quote_decimals": 9,
"base_amount": null,
"quote_amount": null,
"lp_mint": null,
"base_flags": null,
"quote_flags": null,
"x": {
"bin_step": "2",
"quote_rule": "priority"
}
}
Captured from our live feed on 2026-10-07.
poolis the DLMM pair (lb pair) address;base_mint/quote_mintfollow our quote rule: the first of USDC, USDT, SOL in the pool is the quote, otherwise the pair's second token (x.quote_rule).base_amountandquote_amountarenull: DLMM pools are created empty, and liquidity arrives in laterliquidityevents.creatorisnull(the creation event does not carry it), so the event's actor key isnulltoo.x.bin_stepis the pool's bin step in basis points.base_flags/quote_flagscarry Token-2022 data for each mint when known (see Token-2022 risk flags).
Liquidity and swaps on DLMM
{
"v": 1,
"seq": 13611,
"kind": "liquidity",
"venue": "meteora_dlmm",
"keys": [
"BPxxfRCXkUVhig4HS1Lh7kZqV6SPJhzfEk4x6fVBjPCy",
"So11111111111111111111111111111111111111112",
"7o3bfXjeDL6Wzuwk1VR8nvEwSJTA2hHJhBgUA95nFDDa",
"AH57PudrXHPu19fz5B6YHknCLdqJzG3vZMz4FRWE7WHT"
],
"stage": "executed",
"source": "geyser",
"commitment": "processed",
"slot": 454291681,
"sig": "36UnK8kB4T7jHCUKuEamfbVmkStEbt4sfXLRb66juqYkczBqFSJK8YCxFa4Smi6PC4goikaqY8jB1TmdsiYNSZMc",
"ix": 3,
"inner": 5,
"t_ingest_us": 1791394580169741,
"t_emit_us": 1791394580169783,
"via": "FqGg2Y1FNxMiGd51Q6UETixQWkF5fB92MysbYogRJb3P",
"pool": "7o3bfXjeDL6Wzuwk1VR8nvEwSJTA2hHJhBgUA95nFDDa",
"user": "AH57PudrXHPu19fz5B6YHknCLdqJzG3vZMz4FRWE7WHT",
"add": true,
"base_mint": "BPxxfRCXkUVhig4HS1Lh7kZqV6SPJhzfEk4x6fVBjPCy",
"quote_mint": "So11111111111111111111111111111111111111112",
"base_amount": "106585339858",
"quote_amount": "1352205381",
"lp_amount": null
}
Captured from our live feed on 2026-10-07.
add:truefor a deposit,falsefor a withdrawal. A position rebalance arrives as a withdrawal and a deposit.lp_amountis alwaysnullon DLMM: positions are bins, not LP tokens.
{
"v": 1,
"seq": 13665,
"kind": "swap",
"venue": "meteora_dlmm",
"keys": [
"DEW9dSN6QpWyNthphCpMmAbZP1Q4cEKR9xQXAri98WDP",
"So11111111111111111111111111111111111111112",
"Eb7Z4ZxMTRcuYZCjd218hYJR1FSaeTWQddqHanfPF8B7",
"CkcQZB7bqFmT346jyeYHoP4jjWSwuW5DC8th7b4ufTwX"
],
"stage": "executed",
"source": "geyser",
"commitment": "processed",
"slot": 454291681,
"sig": "3wJD1GoaMiTSEt5234es8AfWEsCrf3n8fFgNZGo6kqkeUxFh3HEJGnNuhz7W532JDqYQRCQGM3GhtRDxFgLopjhw",
"ix": 2,
"inner": 9,
"t_ingest_us": 1791394580305780,
"t_emit_us": 1791394580305860,
"via": "JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4",
"pool": "Eb7Z4ZxMTRcuYZCjd218hYJR1FSaeTWQddqHanfPF8B7",
"user": "CkcQZB7bqFmT346jyeYHoP4jjWSwuW5DC8th7b4ufTwX",
"base_mint": "DEW9dSN6QpWyNthphCpMmAbZP1Q4cEKR9xQXAri98WDP",
"quote_mint": "So11111111111111111111111111111111111111112",
"is_buy": false,
"base_amount": "410132594",
"quote_amount": "88300638",
"base_decimals": 6,
"quote_decimals": 9,
"price": 0.00021529778245325218,
"fees": {
"lp": "1634024",
"protocol": "181558",
"host": "0",
"limit_order": "0"
},
"partial": false,
"derived": false,
"base_flags": {
"program": "token2022",
"decimals": 6,
"supply": "996403064303570",
"mint_authority": null,
"freeze_authority": null,
"transfer_fee": {
"older": {
"bps": 100,
"max": "1000000000000000",
"epoch": 1039
},
"newer": {
"bps": 100,
"max": "1000000000000000",
"epoch": 1039
},
"authority": "5KXDF6QnqhBj72hDtJNkkpFaQVUfbFXNybMsp3DiK6tD"
},
"metadata_pointer": "DEW9dSN6QpWyNthphCpMmAbZP1Q4cEKR9xQXAri98WDP",
"extensions": [
18,
1,
19
]
},
"quote_flags": null,
"x": {
"fee_bps": "4713612",
"start_bin": "-305",
"end_bin": "-306",
"amount_left": "0",
"fees_on_input": true,
"quote_rule": "priority"
}
}
Captured from our live feed on 2026-10-07.
- DLMM emits two events per swap (a current one and a legacy twin); we publish exactly one.
xcarries the DLMM specifics:start_bin/end_bin,fee_bps,fees_on_input,amount_left.partial: truemeans the order did not fill completely.- Amounts are strings of raw integer units; divide by
10^decimals.priceis quote per whole base token.
Other Meteora pools
The same pool_create, liquidity and swap messages come from Meteora's
Dynamic AMM (meteora_damm_v1) and DAMM v2 (meteora_damm_v2); add them to
venues. Tokens graduating from Meteora's Dynamic Bonding Curve arrive as
migration events into DAMM pools (see
migrations).
Try the feed
One WebSocket, 12 Solana venues, one flat price.
Start free trial Read the docs
3-day free trial, then $49/month per license plus applicable tax, charged automatically every month until you cancel. Cancel online any time before the trial ends and you pay nothing. Starting a trial means you agree to the Terms. Market data only, no signals or advice.