Skip to main content

Advanced Data Stream

The per-pool streams answer "what happened to this token". This one answers "what happened in this transaction", for every transaction on every launchpad we index. Server emits stream. Free, keyless, one socket.

Use it for copy-trading, scam filtering and anything that needs the whole market rather than one pool. If you only care about a few tokens, subscribe_trades is cheaper for you and for us.

ChannelSocket.IO event
Authnone - no API key needed
Emitsstream
CostFree
Filteroptional protocols and actions lists

Example

import { io } from "socket.io-client";

const socket = io("https://sol.shrine.trade");

// Everything, or narrow it: protocols and/or actions.
socket.emit("subscribe_stream", {
protocols: ["PUMPFUN", "PUMPSWAP", "STONKFUN"],
actions: ["buy", "sell", "create"],
});

socket.on("stream", (e) => {
if (e.action === "create" && (e.mintAuthority || e.freezeAuthority)) return; // not a clean launch
if (e.action === "buy") console.log(e.mint, e.tradersInvolved, e.quoteAmount, e.price);
});

// later, to stop (free): socket.emit("unsubscribe_stream");

Actions

actionWhenProtocols
buy / sellAny swap. One event per pool per transaction; several swaps in one transaction are aggregated with a per-swap breakdown.every launchpad
createA launchpad mint.PUMPFUN, PUMPFUN_MAYHEM, BONK, METEORA_DBC
createPoolAn AMM pool opened on an existing token.PUMPSWAP, RAYDIUM, RAYDIUM_CLMM, METEORA, METEORA_DLMM, ORCA
migrateA curve graduating into its AMM.PUMPFUN→PumpSwap, BONK→Raydium, METEORA_DBC→DAMM v2
curveCompleteA DBC curve filled, before migration.METEORA_DBC
add / removeLiquidity provided or withdrawn.PumpSwap, Raydium CPMM and AMM v4, DAMM v2, DLMM, Orca
claimCreatorFeesA creator collecting fees.PUMPFUN, PUMPSWAP

Payload

Every event carries signature, block, timestamp, action, protocol and txSigner, the fee payer. txSigner is not always the trader: bots route through relayers. For copy-trading use tradersInvolved.

Trades

{
"signature": "…", "block": 445627693, "timestamp": 1788976012,
"action": "buy", "protocol": "PUMPFUN", "txSigner": "…",
"pool": "…", "mint": "…", "quoteMint": "So111…",
"tokenAmount": 31952.74, "quoteAmount": 0.0161, "price": 0.000000504,
"marketCapQuote": 504.1, "tokensInPool": 1041000000, "quoteInPool": 30.5,
"tradersInvolved": ["…"],
"breakdown": [
{ "trader": "…", "action": "buy", "tokenAmount": 31952.74, "quoteAmount": 0.0161, "price": 0.000000504 }
]
}

price and the pool reserves are the post-trade state where the launchpad reports it. marketCapQuote is price times supply, in the quote asset. Amounts are in UI units.

Creates

{
"action": "create", "protocol": "PUMPFUN",
"mint": "…", "pool": "…", "quoteMint": "So111…", "creator": "…",
"name": "…", "symbol": "…", "uri": "…", "decimals": 6, "supply": 1000000000,
"tokensInPool": 1073000000, "quoteInPool": 30,
"initialBuy": { "quoteAmount": 0.5, "tokenAmount": 17000000 },
"mintAuthority": null, "freezeAuthority": null, "tokenExtensions": []
}

mintAuthority and freezeAuthority should both be null on an honest launch; a value means supply can be minted or wallets frozen. tokenExtensions lists Token-2022 extensions by name; transferFeeConfig and permanentDelegate deserve a look outside trusted launchpads. initialBuy is the creator's own buy in the launch transaction, null if there was none. Authorities and extensions are read from the mint account as it was created; if the mint predates the stream they may be absent.

Migrations and pools

Migrations carry fromPool, toPool and toProtocol. Pool creates carry pool, creator and, when known, mint and quoteMint. Liquidity events carry pool, owner and the raw amounts of both sides (amountARaw, amountBRaw); the side-to-mint mapping follows the launchpad's own ordering.

Try it

Notes

  • One connection per client, please. Everything is filtered per socket, so open one socket and subscribe once.
  • Events for a transaction are emitted in a fixed order: trades, then creates and pool creates, then migrations and liquidity, then fee claims.
  • Every event on this stream is also archived by the hour for backtesting: see Historical replay.