2026-03-27
How to Track PumpFun and PumpSwap Trades and Graduations
PumpFun is Solana's largest token launch platform. Tokens start on a bonding curve and graduate to PumpSwap (or previously Raydium) once they hit the market cap threshold. The Sailfish SDK streams trades, pool initializations, and graduation events for both PumpFun and PumpSwap in real-time, with historic API access for past data.
PumpFun vs PumpSwap
There are two distinct protocols to understand:
- PumpFunAmm — bonding curve trades before graduation. Every new token launches here with a fixed supply curve.
- PumpSwapAmm — AMM trades after graduation. Once a token hits the market cap threshold, liquidity migrates to a full AMM pool.
- Graduation — the event when a token moves from the bonding curve to a full AMM liquidity pool on PumpSwap.
Stream PumpFun Bonding Curve Trades
Filter by the PumpFunAmm dex type to receive only bonding curve trades:
import { Sailfish, SailfishTier, Trade } from "sailfish-sdk";
const sailfish = new Sailfish({
tier: SailfishTier.free({ apiKey: "YOUR_API_KEY" }),
filter: {
token_addresses: [],
pool_addresses: [],
dex_types: ["PumpFunAmm"],
},
callbacks: {
onTrade: (trade: Trade) => {
console.log(`PumpFun trade: ${trade.base_amount} @ ${trade.price} SOL`);
console.log(`Pool: ${trade.pool_address} | Wallet: ${trade.from_wallet}`);
},
},
});
sailfish.swim();
Stream PumpSwap AMM Trades
Swap the dex type to PumpSwapAmm to receive only post-graduation AMM trades:
filter: {
token_addresses: [],
pool_addresses: [],
dex_types: ["PumpSwapAmm"],
},
Stream Both PumpFun + PumpSwap
Pass both dex types to get the full picture of PumpFun ecosystem trading:
dex_types: ["PumpFunAmm", "PumpSwapAmm"],
Detect Token Graduations
The onTokenGraduate callback fires when a PumpFun token hits the market cap threshold and migrates to a full AMM pool. This is the moment liquidity moves off the bonding curve.
const sailfish = new Sailfish({
tier: SailfishTier.free({ apiKey: "YOUR_API_KEY" }),
filter: {
token_addresses: [],
pool_addresses: [],
dex_types: ["PumpFunAmm"],
},
callbacks: {
onTokenGraduate: (graduation) => {
console.log(`Token graduated: ${graduation.pool_address}`);
console.log(`Type: ${graduation.pool_type}`);
console.log(`Tokens: ${graduation.token_0_mint} / ${graduation.token_1_mint}`);
console.log(`Tx: ${graduation.tx.tx_hash}`);
},
},
});
sailfish.swim();
Detect New PumpFun Token Launches
Use onPoolInit and onTokenInit to catch tokens the moment they are created on the bonding curve:
callbacks: {
onPoolInit: (poolInit) => {
if (poolInit.pool_type === "PumpFunAmm") {
console.log(`New PumpFun token launched: ${poolInit.pool_address}`);
console.log(`Token: ${poolInit.token_0_mint}`);
}
},
onTokenInit: (tokenInit) => {
console.log(`New token created: ${tokenInit.mint}`);
console.log(`Decimals: ${tokenInit.decimals}`);
},
},
Query Historic Graduations
Use the REST API to fetch past graduation events:
import { SailfishApi, SailfishTier } from "sailfish-sdk";
const api = new SailfishApi({ tier: SailfishTier.free({ apiKey: "YOUR_API_KEY" }) });
const graduations = await api.fetchRawGraduations({
limit: 50,
});
You can also browse recent graduations in real-time using the free Pool Graduations Tracker.
Track a Specific Token Across Its Lifecycle
Filter by token address to follow a single token from launch through graduation and beyond:
const sailfish = new Sailfish({
tier: SailfishTier.free({ apiKey: "YOUR_API_KEY" }),
filter: {
token_addresses: ["TOKEN_MINT_ADDRESS"],
pool_addresses: [],
dex_types: [],
},
callbacks: {
onTrade: (trade) => {
console.log(`Trade on ${trade.pool_address}: ${trade.price}`);
},
onTokenGraduate: (graduation) => {
console.log(`Token graduated to ${graduation.pool_type}!`);
},
},
});
sailfish.swim();
With an empty dex_types array, you receive trades for this token across all protocols — PumpFun bonding curve, PumpSwap AMM, and Raydium if the token migrated there. This lets you track the full lifecycle without switching filters.