New tokens on Raydium LaunchLab, streamed
Raydium LaunchLab is the bonding-curve program that launchpads such as bonk.fun and StonkFun run on. Our feed decodes every LaunchLab launch, trade and migration, whichever launchpad it came through, and tells you which platform configuration it used.
Market data only. New tokens are high risk; this data says what happened on chain, not what to buy.
Subscribe
import asyncio, json, os, websockets # pip install websockets
URL = "wss://feed.lunarshadowlabs.com/ws?venues=launchlab&kinds=launch,migration"
HEADERS = {"Authorization": f"Bearer {os.environ['LSL_KEY']}"}
async def main():
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"] == "launch":
x = m["x"]
print("launch", m["symbol"], m["mint"], "platform", x["platform"] or x["platform_config"])
elif m["kind"] == "migration":
print("migrated", m["mint"], "->", m["to_venue"], m["to_pool"])
asyncio.run(main())
Add swap to kinds for every trade on the curves. For production use, add the resume
and reconnect loop from the docs.
A launch
{
"v": 1,
"seq": 3022,
"kind": "launch",
"venue": "launchlab",
"keys": [
"Hqk8M9Bgg8sLYxkEagXpmUE76sSRU2uUAWTD5tLCTzuh",
"So11111111111111111111111111111111111111112",
"9xhQXEe6td4XXNhu7NnzG8mJU6zCHch9kFjM2tHZhvYV",
"8wssXh42VWSfULRHmxB3Z7aEbsHvDmMYLSAsBjyFmb38"
],
"stage": "executed",
"source": "replay",
"commitment": "processed",
"slot": 453819945,
"sig": "mzoZD2s9jzYFdq2n96Gh9wa7CKVk3jZkaRBH16jg6uYQZFsV4rRY1Lr32KeTfvYtDAcodfPDa879wTbTwERME9W",
"ix": 2,
"inner": 7,
"t_ingest_us": 1791394380730128,
"t_emit_us": 1791394380730150,
"via": null,
"mint": "Hqk8M9Bgg8sLYxkEagXpmUE76sSRU2uUAWTD5tLCTzuh",
"curve": "9xhQXEe6td4XXNhu7NnzG8mJU6zCHch9kFjM2tHZhvYV",
"creator": "8wssXh42VWSfULRHmxB3Z7aEbsHvDmMYLSAsBjyFmb38",
"user": "8wssXh42VWSfULRHmxB3Z7aEbsHvDmMYLSAsBjyFmb38",
"name": "Higgspad",
"symbol": "HIGGS",
"uri": "https://files.catbox.moe/nzjeta.json",
"quote_mint": "So11111111111111111111111111111111111111112",
"token_program": null,
"base_flags": null,
"quote_flags": null,
"x": {
"decimals": "6",
"platform_config": "CF4FZ21wdRZ1tnK2Tef3ddq65CEm6ehUWAamzdtTVuUP",
"platform": "higgspad"
}
}
Decoded by our feed from a recorded mainnet transaction (replayed, so source reads replay; live events say geyser).
mintis the new token;curveits LaunchLab pool;creatorthe wallet that launched it.name,symbolanduricome from the launch itself.x.platform_configis the launchpad's platform configuration account.x.platformnames it where we have mapped that configuration (for examplestonkfun,higgspad); otherwise it is an empty string andplatform_configis the identifier to use.base_flagsmay benullon a brand-new mint while we read it; later events carry it (see Token-2022 risk flags).
A trade on the curve
{
"v": 1,
"seq": 13647,
"kind": "swap",
"venue": "launchlab",
"keys": [
"AZNW9Lgv9xAgYoRJVYiFXJAAsj3Gk8gJEnW4P1siWiwW",
"6GmAFSYs4gk3FDao5FzzySQpPZaWsa4rUJHacpMpUNgx",
"3zQoY91mfz9cDKUEWN876Rndedh5GGfgggt2vSSFqCJD",
"5jmdAzA9kGrkVjppTh1ye2goFGUtF9Gpi2CbfrdkB5pY"
],
"stage": "executed",
"source": "geyser",
"commitment": "processed",
"slot": 454291681,
"sig": "4pXstqFZ8S6Z5hC2u5PEMmfxgfy6WZzjrWa3VrK9STFz15NQneM5Fx9RV6pfZPhfGa9GY5nY1kFPyodx4WzJ4PcZ",
"ix": 1,
"inner": 1,
"t_ingest_us": 1791394580295474,
"t_emit_us": 1791394580295506,
"via": "FLASHX8DrLbgeR8FcfNV1F5krxYcYMUdBkrP1EPBtxB9",
"pool": "3zQoY91mfz9cDKUEWN876Rndedh5GGfgggt2vSSFqCJD",
"user": "5jmdAzA9kGrkVjppTh1ye2goFGUtF9Gpi2CbfrdkB5pY",
"base_mint": "AZNW9Lgv9xAgYoRJVYiFXJAAsj3Gk8gJEnW4P1siWiwW",
"quote_mint": "6GmAFSYs4gk3FDao5FzzySQpPZaWsa4rUJHacpMpUNgx",
"is_buy": false,
"base_amount": "4076863737044",
"quote_amount": "140776131430",
"base_decimals": 6,
"quote_decimals": 9,
"price": 3.453049709531674e-05,
"fees": {
"protocol": "356395270",
"platform": "1425581078",
"creator": "0",
"share": "0"
},
"partial": false,
"derived": false,
"base_flags": {
"program": "token2022",
"decimals": 6,
"supply": "1000000000000000",
"mint_authority": null,
"freeze_authority": null,
"transfer_fee": {
"older": {
"bps": 100,
"max": "1000000000000000",
"epoch": 1051
},
"newer": {
"bps": 100,
"max": "1000000000000000",
"epoch": 1051
},
"authority": "WLHv2UAZm6z4KyaaELi5pjdbJh6RESMva1Rnn8pJVVh"
},
"metadata_pointer": "AZNW9Lgv9xAgYoRJVYiFXJAAsj3Gk8gJEnW4P1siWiwW",
"extensions": [
18,
1,
19
]
},
"quote_flags": null,
"x": {
"pool_status": "fund",
"exact_in": true,
"virtual_base": "1073025605595363",
"virtual_quote": "20467833611843",
"real_base_after": "278468406615805",
"real_quote_after": "7173360231466",
"platform_config": "6BwHHDg3u1854jC8PDLXvR4spTcLNaoBxLJNGC4nTESt",
"platform": "stonkfun"
}
}
Captured from our live feed on 2026-10-07.
is_buy: the user received the launched token. Amounts are what the user paid and received, as strings of raw units.feessplits protocol, platform, creator and share fees.xcarries the curve state after the trade:virtual_base/virtual_quote,real_base_after/real_quote_after, andpool_status.viais the outer program when the trade came through a router.- The quote is whatever the platform configured, not always SOL; this one's base mint also carries a Token-2022
transfer fee, shown in
base_flags.transfer_fee.
Graduation
When a LaunchLab curve fills, the token migrates to raydium_cpmm or raydium_v4, and you
receive a migration message with the new pool. See
migration events for its fields.
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.