Pump.fun bundle checker: how to detect bundled launches on-chain

· 9 min read

bundlesrug checklaunch analysissniperstrust score

A token launches on pump.fun. Within one slot it has forty holders and a green candle. Distribution looks healthy — until you notice the forty wallets bought in the same block as the creation, in consecutive positions, funded from the same wallet two hops back. That is a bundled launch, and it is the single most reliable early predictor of a dump. This guide is a practical pump.fun bundle checker: how bundling works, how to detect it from raw chain data with the Raiden API, and how to read the numbers honestly.

What a bundled launch is

Bundling is supply capture disguised as distribution. The operator prepares a set of wallets, then submits the token creation and a series of buys from those wallets as one atomic package, so everything executes in the same slot as the creation — often literally adjacent in the block, before any outside buyer can react. Two goals:

  • Capture supply at the floor. The bonding curve is cheapest at slot zero. Buying 30–60% of supply in the creation block costs a fraction of what accumulating it later would.
  • Fake the distribution. One wallet holding 40% screams exit scam. Forty wallets holding 1% each looks like a community — until you check how they landed and who funded them.

Why it predicts dumps: the wallets act as one hand. When the operator exits, they exit together — the same coordination that packed the buys into one block packs the sells into one candle. A launch where a coordinated cluster holds 40%+ of supply is not asking whether it will dump, only when.

Bundle vs sniper: independent snipers also land in the creation block — that is a latency race, not coordination (measured in the wallet-landing comparison). The difference is adjacency and funding: a bundle is consecutive block positions from wallets with a common origin. The detection below separates the two.

The bundle flag: /tokens/{mint}/launch

The launch endpoint replays the first swaps of a token and groups them into bundles by slot and adjacent block index — consecutive positions in the same block are one package. Every swap row that belongs to one carries "bundled": true:

curl -H "X-API-Key: $RAIDEN_KEY" \
  "https://terminal.raiden.wtf/api/tokens/9xQm…pump/launch?limit=150"
{
  "mint": "9xQm…pump",
  "creator": "5Q5q…Funr",
  "bundled_pct_supply": 4.88888889,
  "dev_bundle_pct_supply": 4.88888889,
  "bundle_count": 1,
  "bundles": [
    {
      "slot": 339481577,
      "start_index": 412,
      "size": 2,
      "is_bundle": true,
      "has_dev": true,
      "wallets": ["5Q5q…Funr", "8psN…VRtf"],
      "sol_total": "488888889",
      "tokens_bought": "48888888900000",
      "pct_supply": 4.88888889,
      "swaps": [
        { "trader": "5Q5q…Funr", "is_buy": true, "sol_amount": "300000000",
          "slot": 339481577, "block_index": 412, "bundled": true,
          "tip": "1000000", "priority_fee": "30000000", "sig": "4Fr4…ULFK", … },
        { "trader": "8psN…VRtf", "is_buy": true, "sol_amount": "188888889",
          "slot": 339481577, "block_index": 413, "bundled": true, … }
      ]
    }
  ]
}

The headline numbers: bundled_pct_supply — total supply captured by all detected bundles; dev_bundle_pct_supply — the share taken by the bundle that contains the creator (has_dev: true); bundle_count — how many distinct packages landed. Inside each bundle, slot, start_index and size place it exactly in the block: here two buys at block positions 412–413 of the creation slot, dev included. Amounts are strings in lamports (1 SOL = 1e9), so a sol_total of "488888889" is ~0.49 SOL. Each swap also carries its tip and priority_fee — bundled buys paying identical tips to the same tip wallet are another coordination fingerprint.

Reading the numbers: what is normal, what is a red flag

Bundled supplyTypical reading
< 5%Background noise — dev buy plus a few snipers. Endemic on pump.fun, not a signal by itself.
5–20%Elevated. Check has_dev and bundle sizes: one big coordinated package is worse than several small independent ones.
20–50%Coordinated launch. Cross-check funding clusters and holder concentration before touching it.
≥ 50%The Trust score starts capping the token (see below). The launch was built to be exited.
≥ 70%Pinned in likely_rug territory. Empirically, these dump almost without exception.

Honest caveat: bundling percentage is a heuristic built on adjacency, and some teams bundle defensively to keep snipers from front-running their own community. That is why the next two checks exist — concentration and funding tell you whether the bundled supply is still one hand.

Concentration: /tokens/{mint}/holder-stats

A bundle that already distributed or sold is history; a bundle that still holds is a loaded gun. One call gives the live concentration:

curl -H "X-API-Key: $RAIDEN_KEY" \
  "https://terminal.raiden.wtf/api/tokens/9xQm…pump/holder-stats"

{
  "holders": 1342,
  "held": "873421889999",
  "top10": "412889123456",
  "top25": "588123987654"
}

top10 / held here is ~47%: ten wallets control nearly half of the held supply. Read together with the launch data, the question becomes precise — are the top holders the bundle wallets? If bundled_pct_supply is 40% and the top-10 share is 45%, the bundle never left.

Insider detection: /tokens/{mint}/funding-clusters

This is where a solana bundle checker earns its keep, because sophisticated bundlers randomize everything visible — buy sizes, timing offsets, even skipping adjacency by spreading buys over a few slots. What they cannot randomize cheaply is where the SOL came from. The funding-clusters endpoint takes the token's early buyers and groups them by shared origin funder — the wallet that originally funded them, resolved through the transfer chain:

curl -H "X-API-Key: $RAIDEN_KEY" \
  "https://terminal.raiden.wtf/api/tokens/9xQm…pump/funding-clusters"

{
  "early_buyers": 500,
  "clustered": 14,
  "clusters": [
    {
      "funder": "5Q5q…Funr",
      "funder_label": "Dev wallet",
      "count": 6,
      "is_dev": true,
      "wallets": ["8psN…VRtf", "Cb3f…g9rE", "Gm4w…9xZ2"]
    }
  ]
}

Fourteen of five hundred early buyers share an origin — and six of them trace straight back to the dev wallet (is_dev: true). Those six are the creator's supply wearing masks, whatever the holder list says. A large cluster with a non-dev funder is an insider ring or a professional bundling operation; either way, the wallets will sell as one.

How the Trust score treats bundled supply

You do not have to run this pipeline by hand on every token — /tokens/{mint}/trust compresses it into a live 0–100 score (higher = safer), and bundled supply is one of its five weighted signals (bundled_pct, alongside dev reputation, known rug-dumpers inside the token, dev exit and wash trading). Crucially, heavy bundling does not just lower the score — it caps it, in tiers: from 50% bundled the score cannot exceed 45 (caution at best), from 55% the ceiling drops to 35, and from 70% to 25 — deep inside the likely_rug band (verdicts: clean ≥65, caution 40–64, likely_rug <40). No amount of good behavior elsewhere can buy the verdict back:

{
  "mint": "9xQm…pump",
  "score": 45,
  "verdict": "caution",
  "capped": true,
  "cap_reason": "bundled",
  "signals": {
    "bundled_pct": { "value": 52.0, "comp": 0.0, "known": true },
    "dev_exit":    { "value": 100.0, "comp": 6.1, "known": true }, …
  },
  "weights": { "dev": 0.35, "offenders": 0.25, "bundle": 0.15, "exit": 0.10, "wash": 0.15 }
}

capped: true with cap_reason: "bundled" is the tell: the token scored higher on raw signals, and the bundle ceiling pulled it down. The tiering reflects what the data shows — heavy bundling correlates so strongly with a coordinated exit that treating a 62%-bundled token as merely "caution" would be lying to you. The full scoring model, including the other four signals, is covered in the pump.fun rug-check guide.

A complete bundle checker in Python

import requests

BASE = "https://terminal.raiden.wtf/api"
H = {"X-API-Key": "YOUR_KEY"}
MINT = "9xQm…pump"

launch = requests.get(f"{BASE}/tokens/{MINT}/launch", params={"limit": 150}, headers=H).json()
hs     = requests.get(f"{BASE}/tokens/{MINT}/holder-stats", headers=H).json()
fc     = requests.get(f"{BASE}/tokens/{MINT}/funding-clusters", headers=H).json()
trust  = requests.get(f"{BASE}/tokens/{MINT}/trust", headers=H).json()

bundled = launch["bundled_pct_supply"]
dev_b   = launch["dev_bundle_pct_supply"]
top10   = 100 * int(hs["top10"]) / int(hs["held"]) if int(hs["held"]) else 0
dev_cluster = sum(c["count"] for c in fc["clusters"] if c["is_dev"])

print(f"bundled {bundled:.1f}% (dev bundle {dev_b:.1f}%) in {launch['bundle_count']} bundle(s)")
print(f"top-10 hold {top10:.1f}% | {fc['clustered']}/{fc['early_buyers']} early buyers clustered"
      f" ({dev_cluster} funded by the dev)")
print(f"trust {trust['score']} → {trust['verdict']}"
      + (f"  [capped: {trust['cap_reason']}]" if trust["capped"] else ""))

# bundled 52.0% (dev bundle 12.3%) in 3 bundle(s)
# top-10 hold 47.3% | 14/500 early buyers clustered (6 funded by the dev)
# trust 45 → caution  [capped: bundled]
One call instead of four: GET /tokens/{mint}/pack returns the whole dossier — launch, holder_stats, trust, funding_clusters and more — as one response, each key matching the standalone endpoint's exact shape.

Market-wide: who is bundling right now

To scan for bundled supply on pump.fun at market scale instead of one token at a time, GET /ecosystem?window=24h includes a bundled_launches list — recent launches ranked by bundled share, with the wallet count and SOL deployed — plus bundlers, the wallets running bundle operations across the most tokens:

"bundled_launches": [
  { "mint": "9xQm…pump", "symbol": "WAGMI", "created_at": "2026-06-27T08:14:02Z",
    "pct_supply": 42.7, "wallets": 14, "lamports": "65500000000", "status": "bonding" }
],
"bundlers": [
  { "wallet": "Gm4w…9xZ2", "tokens": 37, "lamports": "182000000000" }
]

A wallet that has bundled 37 launches is not a trader — it is a factory, and every new token it touches inherits the history.

Checklist

  • /tokens/{mint}/launch — bundled %, dev bundle %, per-swap bundled flag, exact block positions.
  • /tokens/{mint}/holder-stats — is the bundled supply still concentrated in the top holders?
  • /tokens/{mint}/funding-clusters — do the "independent" early buyers share an origin funder? Is it the dev?
  • /tokens/{mint}/trust — the compressed verdict; capped + cap_reason: "bundled" means the bundle alone disqualifies the token.

Bundle detection is one third of a full pre-buy screen — the other two are the dev's track record and who else is inside the token, both covered in the complete pump.fun rug check. And since bundles and snipers share the creation block, the wallet landing comparison shows how to tell a fast independent sniper from a coordinated package. Full endpoint reference: API docs.

FAQ

Frequently asked questions

What is a bundled launch on pump.fun?

A launch where multiple wallets buy in the same slot as the token creation, packed as consecutive transactions in the block — usually submitted together as one atomic package. The operator captures a large share of supply at the floor price while making the holder list look organically distributed. Detection groups the first swaps by slot and adjacent block index: consecutive positions from different wallets in the creation block are one bundle.

What percentage of bundled supply is a red flag?

Some same-block buying is normal on pump.fun because sniping is endemic — a few percent captured by independent snipers means nothing. Coordination is the signal: one bundle of many wallets holding 20-40% of supply is a launch built for an exit. From 50% bundled the Raiden Trust score starts capping the token, and from 70% it is pinned deep in likely_rug territory — empirically those launches almost always end in a coordinated dump.

Can bundlers hide by spreading buys across many wallets?

They can spread the buys, but the wallets have to be funded from somewhere. Funding-cluster analysis walks each early buyer back to its origin funder: fifteen 'independent' wallets that all trace to the same origin wallet are one actor. When the shared funder is the dev wallet itself (is_dev: true), supply concentration is provably in the creator's hands regardless of how the holder list looks.

Is every bundled launch a rug?

No — some teams bundle to defend the launch from snipers, and same-block buys also include genuinely independent bots racing the creation. That is why the bundle percentage should be read together with the dev bundle share, holder concentration and funding clusters. But the correlation is strong and one-directional: heavily bundled tokens dump far more often than they graduate, which is why the Trust score refuses to rate them clean.

How is a bundle different from ordinary sniping?

A sniper races the creation independently and pays for landing position; its buy lands in the creation block but is not packed adjacent to other coordinated buys. A bundle is one package: several wallets occupying consecutive block-index positions in the same slot, typically funded from a common source. The launch endpoint separates the two — is_bundle marks coordinated groups, and has_dev marks the bundle that contains the creator.

Does the bundle checker work on older tokens?

Yes — launch analysis replays the recorded first swaps of the token, so it works on any indexed token, not just live ones. The dataset keeps 6 months of rolling retention with full history since May 1, 2026.

Build on the same data

Private beta — free invite-only keys, full REST + WebSocket access, and the same firehose that powers the Terminal.