All tutorials

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.

Resources