CRIUS Docs
API status Get API key
Safety & risk

Detect bundled launches, snipers and insiders

Find out who bought a Robinhood Chain token's launch, how much of the supply snipers and bundles took and whether they still hold it, with a real insider launch that fell 97%.

Updated 2 min read
Short answer

Call GET /v1/robinhood/token/{address}/bundles (Starter plan, 10 credits). It analyses the first 300 blocks of trading: snipers (wallets that bought in the first 10 blocks, their supply_pct and still_holding_pct), bundles (launch-transaction buys, multi-recipient transactions, same-block buys from one funder), funding clusters, the developer's buys and insider_launch. Without a key, /security returns the launch summary: sniper_supply_pct, sniper_top_wallet_pct and flags.

Snipers are wallets that buy a token in its first seconds of trading, before most people can see it. Bundles are coordinated buys that spread one buyer’s purchase over several wallets. When insiders take most of the supply this way, the token can have a clean contract and locked liquidity and still be a pump and dump: they sell into everyone who buys after them. Crius analyses the first 300 blocks of every Robinhood Chain token’s trading to show who bought, how they were funded, and whether they still hold.

See who bought the launch

An insider launch: Rebot (61% sniped, all of it sold)

Rebot (0x192b126efea71ca5e7767bc6fc53038d869fbbba) fell 97% within hours of launching. Who bought it first?

GET/v1/robinhood/token/0x192b126efea71ca5e7767bc6fc53038d869fbbba/bundles
curl "https://api.crius.sh/v1/robinhood/token/0x192b126efea71ca5e7767bc6fc53038d869fbbba/bundles" \
-H "x-api-key: $CRIUS_API_KEY"
Real response 200 Captured Oct 28, 2026 · 99 lines (arrays trimmed)
{
"data": {
"bundle_supply_pct": 1,
"bundle_supply_pct_now": 0,
"bundled": true,
"bundles": [
{
"block": 100238938,
"bought": 10000000.000000000905969664,
"cost_eth": 0.0174316,
"funder": null,
"id": "b_1",
"still_holding_pct": 0,
"supply_pct": 1,
"type": "launch_tx_buy",
"wallets": [
"0xa6aeefb9c26ec96eb5fbde3ade8632ab2a8ac864"
]
}
],
"clusters": [],
"dev": {
"address": "0xa6aeefb9c26ec96eb5fbde3ade8632ab2a8ac864",
"bought_in_launch_tx": true,
"first_buy_pct": 1,
"funded_by": null,
"holding_pct": 0
},
"early_buyers_analyzed": 54,
"insider_launch": true,
"launch": {
"flags": [
"insider_launch"
],
"lp_top_wallet": {
"address": "0x6e8244ba97cbb7d136aafc667e8da302140dbc5b",
"liquidity_usd": 5.70259,
"pct": 0.0996139
},
"sniper_supply_pct": 60.9726,
"sniper_top_wallet_pct": 53.1794,
"sniper_wallets": 4,
"sniper_window_blocks": 10,
"uniform_holders": null,
"wallet_farm": null
},
"snipers": {
"count": 4,
"still_holding_pct": 0,
"supply_pct": 60.9726,
"wallets": [
{
"address": "0xa6aeefb9c26ec96eb5fbde3ade8632ab2a8ac864",
"tags": [
"dev",
"sniper"
]
},
{
"address": "0x0f0bb85fddc70f04344bc7704bb940e387ae7762",
"tags": [
"sniper"
]
},
{
"address": "0x5051e45b2dbecf1b2041af3937bd85fc0dc43cd4",
"tags": [
"sniper"
]
},
{
"address": "0x217be8970fa83b0864ca06d3c18ea6d9ac04e3a5",
"tags": [
"sniper"
]
}
],
"window_blocks": 10
},
"trader_funding": {
"bridge": 18,
"dev_linked": 1,
"other_wallets": 21,
"protocol": 3,
"unknown": 6,
"unlabeled_hub": 5
}
},
"meta": {
"block": 100406882,
"block_age_ms": 1103,
"block_ts": 1793225086000,
"chain": "robinhood",
"finalized_block": 100397649,
"lag_ms": 134,
"safe_block": 100401329,
"scope": "first 300 blocks of trading"
}
}

What this tells you

  • insider_launch: true. snipers.count: 4 wallets bought snipers.supply_pct: 60.9726 of the supply in the first 10 blocks (window_blocks: 10), and launch.sniper_top_wallet_pct: 53.1794 shows one of them took more than half on its own.
  • snipers.still_holding_pct: 0: every sniper has sold everything. That is the dump.
  • The developer 0xa6aeefb9c26ec96eb5fbde3ade8632ab2a8ac864 is one of the snipers (tags: ["dev", "sniper"]). dev.bought_in_launch_tx: true, first_buy_pct: 1, holding_pct: 0.
  • bundles has one entry, type: "launch_tx_buy": the developer’s buy of 10,000,000 tokens (1% of supply) for 0.0174316 ETH inside the launch transaction, at block 100238938. still_holding_pct: 0.
  • bundle_supply_pct: 1 and bundle_supply_pct_now: 0: bundles were a small part of this launch. The insiders bought as separate wallets in the first blocks instead.
  • clusters: []: no early buyers share a funder that links them. trader_funding shows the 54 analysed buyers (early_buyers_analyzed) were funded through bridges (18), other wallets (21), protocols (3), hub funders (5), the developer (1) or unknown sources (6).

A busy launch that isn't an insider launch: sockets

sockets (0xddccd4690cc99cf19d2e0bdbcb390d17e913958a) had snipers too. Is that a problem?

GET/v1/robinhood/token/0xddccd4690cc99cf19d2e0bdbcb390d17e913958a/security
curl "https://api.crius.sh/v1/robinhood/token/0xddccd4690cc99cf19d2e0bdbcb390d17e913958a/security"
Real response 200 Captured Oct 28, 2026 · 187 lines (arrays trimmed)
{
"data": {
"contract": {
"blacklist": false,
"can_change_limits": false,
"can_change_tax": false,
"cooldown": false,
"implementation": null,
"is_proxy": false,
"mintable": false,
"owner": null,
"ownership": "none",
"pausable": false,
"proxy_kind": null,
"self_destruct": false,
"trading_switch": false,
"upgradeable": false,
"verified": null
},
"flags": [
"unverified"
],
"honeypot": {
"is_honeypot": false,
"reason": null,
"selective": false
},
"hook": {
"address": "0xe5e702641ea86f4ae6cc3cdaed2b886f976be044",
"capabilities": {
"can_block_swaps": false,
"can_gate_liquidity": false,
"can_modify_liquidity_amounts": false,
"can_modify_swap_amounts": true
},
"code": {
"admin_functions": [],
"checked_ts": 1793207140434,
"code_hash": "0xc21b1e6c1b45403e81a581f22ed6d9c747997af1cfdac1b1dc9f4b1d346a10db",
"family": "0xabda3266e50c",
"kind": "contract",
"logic": null,
"owner": "0x263ed295dafae1d9aadd6e56c4b6f9f38ee019dd",
"ownership": "active",
"size": 15167
},
"family": {
"honeypot_pct": 0,
"hooks": 22,
"id": "0xabda3266e50c",
"liquidity_pulled_pct": 0.684086,
"pools_traded": 10525,
"taxed_pct": 51.9715,
"verified_hooks": 1
},
"flags": [],
"name": "PonsV2MemeHook",
"observed": {
"dynamic_tax_pools": 13,
"first_trade_ts": 1785866942000,
"honeypot_pools": 0,
"last_trade_ts": 1793223683000,
"liquidity_pulled_pct": 0.66813,
"liquidity_pulled_pools": 70,
"max_buy_tax_pct": 10.99,
"max_sell_tax_pct": 0.7,
"median_pool_life_min": 53423.5,
"pools": 10478,
"pools_traded": 10477,
"tax_measured_pools": 10392,
"taxed_10pct_pools": 35,
"taxed_pools": 5463,
"volume_usd": 5384607135
},
"pattern": {
"description": "hooks that change swap amounts only",
"honeypot_pct": 0.0696347,
"id": "swap_delta_only",
"liquidity_pulled_pct": 7.93603,
"pools_traded": 43082,
"taxed_pct": 15.7537
},
"permissions": [
"beforeInitialize",
"afterSwap",
"afterSwapReturnDelta"
],
"risk": [
"can_modify_swap_amounts"
],
"risk_level": "low"
},
"known_asset": false,
"launch": {
"flags": [],
"lp_top_wallet": {
"address": "0x34062c5519d27d399b1deb897b6c769683ec7fa3",
"liquidity_usd": 106.386,
"pct": 0.549474
},
"sniper_supply_pct": 30.1177,
"sniper_top_wallet_pct": 24.0035,
"sniper_wallets": 6,
"sniper_window_blocks": 10,
"uniform_holders": null,
"wallet_farm": null
},
"limits": {},
"liquidity": {
"status": "partially_locked",
"summary": {
"burned_pct": 0,
"locked_pct": 98.9946,
"next_unlock_ts": null,
"protocol_fee_pct": 0,
"unlocked_in_wallets_pct": 1.00542,
"weighting": "by pool liquidity_usd"
}
},
"primary_dex": "uniswap_v4",
"risk": "low",
"score": 95,
"tax": {
"buy_pct": 2.69,
"confidence": "high",
"realized": {
"buy_pct": 2.69,
"by_wallet_class": {
"dev_sell_pct": null,
"others_sell_pct": 0
},
"last_sample_ts": 1793225076000,
"max_sell_pct_seen": 65.93,
"samples": {
"buys": 4144,
"sells": 3423
},
"sell_pct": 0,
"window": "30d"
},
"sell_pct": 0,
"simulated": null,
"source": "realized",
"transfer_pct": null
},
"tax_history": [
{
"from_block": 100193859,
"pct": 0,
"side": "buy"
},
{
"from_block": 100193869,
"pct": 0,
"side": "sell"
},
{
"from_block": 100213206,
"pct": 3,
"side": "buy"
},
{
"from_block": 100342818,
"pct": 0,
"side": "buy"
},
{
"from_block": 100344806,
"pct": 3,
"side": "buy"
}
],
"tax_history_total": 7,
"tax_mode": "dynamic",
"token": "0xddccd4690cc99cf19d2e0bdbcb390d17e913958a"
},
"meta": {
"block": 100406831,
"block_age_ms": 624,
"block_ts": 1793225081000,
"chain": "robinhood",
"finalized_block": 100397649,
"lag_ms": 32,
"safe_block": 100401329,
"simulation": "no V2 WETH pair: realized tax only"
}
}

What this tells you

  • launch.sniper_wallets: 6 bought launch.sniper_supply_pct: 30.1177 in the first 10 blocks; the largest took sniper_top_wallet_pct: 24.0035.
  • That is under both thresholds (50% for one wallet, 80% for all snipers), so launch.flags is empty and the token keeps score: 95.
  • launch.lp_top_wallet shows the largest unlocked liquidity holder has 0.55% of the liquidity, and uniform_holders and wallet_farm are null: no other insider pattern either.
Security checks reference Runs from your browser on the anonymous plan Data looks wrong? Report it

What the fields mean

FieldMeaning
insider_launchtrue when the launch is flagged insider_launch, wallet_farm or uniform_holders (see launch.flags).
sniperscount, supply_pct bought, still_holding_pct now, window_blocks, and wallets with their tags (dev, sniper, …).
bundles[]id, type (launch_tx_buy, multi_recipient_tx, same_block_shared_funder), block, wallets, funder, bought, supply_pct, cost_eth, still_holding_pct.
bundled, bundle_supply_pct, bundle_supply_pct_nowWhether any bundle was found, and the share of supply bundled wallets bought and still hold.
clusters[]Early buyers linked by a shared funder, funding between them or token transfers between them.
devThe developer's address, bought_in_launch_tx, first_buy_pct, holding_pct and funded_by.
trader_fundingHow the early buyers got their first ETH, by funder type (bridge, protocol, the developer, hub funders, other wallets, unknown).
launchThe same launch summary as /security: sniper_supply_pct, sniper_top_wallet_pct, sniper_wallets, wallet_farm, uniform_holders, lp_top_wallet, flags.

What each insider pattern means and the exact thresholds are in Launch risk.

Use it in your app

  1. Screen every token with /security. launch.flags and flags include insider_launch, wallet_farm and uniform_holders, each of which makes the token high risk or costs points. No key needed.

  2. Call /bundles for the tokens you show in detail. It costs 10 credits on the Starter plan, so fetch it when a user opens a token, not for every new launch.

  3. Show who still holds. snipers.still_holding_pct and bundle_supply_pct_now matter more than what was bought: supply that’s already sold can’t be dumped again.

  4. Follow the developer. If dev.holding_pct is high, or the developer is a sniper, check their past launches with /dev/{address}.

// Summarize a token's launch for a token page.
const token = "0x192b126efea71ca5e7767bc6fc53038d869fbbba"; // Rebot
const res = await fetch(`https://api.crius.sh/v1/robinhood/token/${token}/bundles`, {
headers: { "x-api-key": process.env.CRIUS_API_KEY },
});
const { data } = await res.json();
const { snipers, dev } = data;
console.log(`${snipers.count} snipers bought ${snipers.supply_pct}%, still hold ${snipers.still_holding_pct}%`);
console.log(`${data.bundles.length} bundles, ${data.bundle_supply_pct_now}% of supply still in them`);
if (dev) console.log(`developer holds ${dev.holding_pct}%${snipers.wallets.some((w) => w.tags?.includes("dev")) ? " and sniped" : ""}`);
if (data.insider_launch) console.warn("insider launch:", data.launch.flags.join(", "));

Frequently asked questions

How do I detect snipers on a Robinhood Chain token?

Call /v1/robinhood/token/{address}/bundles with a Starter key. snipers.wallets lists every wallet that bought in the first window_blocks blocks of trading (10 by default), snipers.supply_pct how much they bought and snipers.still_holding_pct how much they hold now. For a quick check without a key, /security returns launch.sniper_supply_pct and launch.sniper_top_wallet_pct.

What's the difference between a sniper and a bundle?

A sniper is any wallet that bought in the first blocks of trading, often a bot. A bundle is a set of buys that were coordinated: one transaction buying for several wallets, a buy inside the launch transaction itself, or two or more wallets buying in the same block with ETH from the same funder. Bundles hide one buyer behind many wallets.

Is every heavily sniped launch an insider launch?

No. Crius flags insider_launch when one sniping wallet bought 50% or more of the supply, or all snipers together 80% or more. Six wallets sniping 30% of sockets (score 95) is a busy launch, not an insider one; four wallets taking 61% of Rebot, one of them 53%, is.

Can I change the sniper window?

Yes: window_blocks sets it for /bundles (default 10, up to 1,000). The launch summary and the insider_launch flag always use 10 blocks, so they stay comparable across tokens.

Why are some early buyers not linked even though they were funded by the same address?

Exchanges, bridges, app relayers and other funders that pay hundreds of wallets never link wallets, or every exchange user would be one cluster. Funding is counted only from sends of at least 0.00001 ETH, and links between lookalike addresses (address poisoning) are dropped. trader_funding shows how the early buyers were funded.

Get your free Crius API key

Every example on this page works with a free key: higher rate limits than the anonymous plan, holders, wallets and the WebSocket stream. No card needed.

  • Robinhood Chain (4663) only, from our own archive nodes
  • REST + WebSocket
  • Pay on-chain or by card