Solana & Pump.fun Token Autopsy: Bundle & Rug Risk Scanner
Pricing
$2.50 / 1,000 token autopsies
Solana & Pump.fun Token Autopsy: Bundle & Rug Risk Scanner
Read-only Solana & Pump.fun rug-risk scanner: mint/freeze authority, liquidity depth, buy/sell flow, dump simulation and a SKIP/WATCH verdict per token. Holder & bundle data with your RPC.
Pricing
$2.50 / 1,000 token autopsies
Rating
0.0
(0)
Developer
Almandine Data
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
5 days ago
Last modified
Categories
Security
Limited permissionsShare
Paste a contract address, get a structured post-mortem before you even open a chart. This Actor pulls live
DexScreener market data and Solana on-chain account state for every token you give it (or for whatever is
trending and boosted right now), runs a fixed set of deterministic risk rules, and returns one clean row per
token with a 0-10 autopsyScore, ranked red flags, and a SKIP / WATCH / VALID_SETUP label.
Without your own RPC the best possible verdict is WATCH (score capped at 7.0, confidence: limited),
because holder concentration has not been checked. A default run full of WATCH and SKIP rows is working as
designed; add rpcUrl to unlock VALID_SETUP.
It is built for people who already ask Claude, ChatGPT, or a Telegram bot "is this token a rug?" and are tired
of copy-pasting numbers out of five browser tabs. Every row carries a claudePromptContext string so an AI
agent can reason over facts instead of vibes.
Read-only. No wallets, no private keys, no trading, no signing. Output is analytical research data from public sources. It is not financial advice and never tells you to buy anything.
Holder analysis is an optional add-on (off by default)
Holder concentration needs getTokenLargestAccounts, and the free public Solana RPC rate-limits that call so
hard that results from it are unreliable. Rather than hand you half-filled numbers, the Actor skips the holder
lookup entirely unless you bring your own RPC URL (a free Helius, QuickNode, or Triton key is enough).
- Without
rpcUrl(default): market, flow, liquidity, mint/freeze authority, dump simulation, and verdict are all computed.bundleSuspectScoreisnullwithbundleDataStatus: partial_no_rpc, because the bundle signal depends on holder shape and a0would wrongly read as clean.top10HoldersPctandtop1HolderPctarenull,holderDataStatusisskipped_no_rpc, and the two holder rules reportpass: nulland do not count againstautopsyScore. Because concentration is unverified,autopsyScoreis capped at 7.0,confidenceislimited,verdictis capped atWATCH, and aholder check skipped, verify concentration before actingnote is added toredFlags. - With
rpcUrl: holder %,largestHolders(pool vault excluded), and the holder rules switch on.holderDataStatusisok, orrate_limitedif your RPC refuses the call (then theWATCHcap still applies). Onlyokrows can reachVALID_SETUP. - Price is the same either way: $2.50 per 1,000 autopsy rows. Holder data is never charged extra.
What you get per token
- Market:
priceUsd,marketCapUsd,liquidityUsd,liquidityToMcapPct,ageHours,dexId(pumpfun,pumpswap,raydium,meteora,orca...),pairAddress,pairUrl. - Flow:
volume5mUsd/volume1hUsd/volume24hUsd, buys and sells for 5m / 1h / 24h,buySellRatio1h,priceChange5mPct/1hPct/24hPct. - On-chain safety:
mintAuthorityRevokedandfreezeAuthorityRevokedread straight from the mint account (getMultipleAccounts,jsonParsed). - Holders:
top10HoldersPctandtop1HolderPctwith the liquidity-pool vault excluded, plus alargestHolderstable (getTokenLargestAccounts). Optional, needs your ownrpcUrl. - Bundle heuristic (with your RPC):
bundleSuspectScore0-100, raised by clusters of equally sized top wallets, heavy top-10 concentration, very young thin pools, and lopsided buy pressure.nullplusbundleDataStatusexplaining why when holders are not checked. - Rules:
ruleChecksobject, one entry per rule withpass,value, andlimit. - Verdict:
autopsyScore(capped at 7.0 without holder data),rawScore(same formula, uncapped, so you can rank tokens inside a default run),confidence(highwith holder data,limitedwithout),verdict,redFlags(most dangerous first),greenFlags. - Dump simulation:
graduationDumpSimulationestimates price impact if the top 5 holders, or 1% / 5% / 10% of supply, are market-sold into the current pool (constant-product approximation). - AI context:
claudePromptContext, a one-paragraph factual summary ready to paste into any LLM.
Why not just use DexScreener and Solscan?
| Task | Manual tab-juggling | This Actor |
|---|---|---|
| Check 60 trending tokens | 60 x (DexScreener + Solscan holders (with your RPC) + authority check) = an afternoon | One run, about 15-60 seconds |
| Exclude the pool vault from holder % (with your RPC) | Eyeball which wallet is the LP | Matched automatically against pooled base |
| Mint / freeze authority | Open the token account, read raw fields | Boolean columns |
| Apply your thresholds | Mental math every time | ruleChecks with your limits |
| Feed an AI agent | Copy-paste screenshots | Structured JSON + claudePromptContext |
| Repeat every 15 minutes | Not realistic | Apify Schedules + webhooks |
Input
| Parameter | Type | Default | Description |
|---|---|---|---|
mode | string | "autopsy_and_trending" | 'autopsy_and_trending' autopsies your mints plus trending/boosted Solana tokens; 'mints_only' only your list; 'trending_discovery' only DexScreener boosts, profiles and search results. |
mintAddresses | array | ["pumpCmXqMfrsAkQ5r49WcJnRayYRqmXz6ae8H7 | Solana token mint addresses (CAs), DexScreener pair/token URLs, or pump.fun/coin URLs. |
searchQueries | array | ["pump", "pumpswap", "raydium", "solana | Free-text DexScreener searches used to discover more Solana pairs (non-Solana results are dropped). |
dexFilter | array | [] | Keep only these DexScreener dexIds (e.g. pumpfun, pumpswap, raydium, meteora, orca). Empty = all. |
maxTop10HoldersPct | number | 25 | Rule: top 10 wallets (excluding the pool vault) may hold at most this % of supply. |
maxTop1HolderPct | number | 8 | Rule: the largest non-pool wallet may hold at most this % of supply. |
minLiquidityUsd | number | 5000 | Rule: minimum pooled liquidity in USD. |
minVolume1hUsd | number | 2500 | Rule: minimum 1-hour trading volume in USD. |
rpcUrl | string | "" | Holder analysis (bring your own RPC: Helius/QuickNode/Triton). Optional add-on. Paste your own read-only Solana RPC URL to enable top-10/top-1 holder analysis, pool-vault exclusion and the holder rules. Empty = holder lookup skipped (holderDataStatus: skipped_no_rpc). No extra charge. |
maxItems | integer | 65 | Maximum tokens to autopsy (each is one billed token-autopsy event). |
Run with {} and you get roughly 60+ live autopsies: the PUMP token plus everything currently boosted,
profiled, or matched by the default searches on DexScreener.
Holder data and rpcUrl
See Holder analysis is an optional add-on above. Only read methods are ever called on your RPC.
Use it from Claude Desktop or Cursor (MCP)
Add the official Apify MCP server and expose just this Actor as a tool:
{"mcpServers": {"apify": {"command": "npx","args": ["-y", "@apify/actors-mcp-server", "--actors", "informed_almandine_vzb/solana-pumpfun-token-autopsy-scanner"],"env": { "APIFY_TOKEN": "YOUR_APIFY_TOKEN" }}}}
In Cursor, put the same block in .cursor/mcp.json. Then ask: "Run the token autopsy on these three CAs and
tell me which fail my rules."
A 7-step AI research workflow
This is a discipline, not a signal service. Each step maps to fields the Actor already returns.
- Pre-filter. Run
trending_discoverywith yourminLiquidityUsdandminVolume1hUsd. Drop every row whoseverdictisSKIP. Most of the noise dies here. - Autopsy. For what remains, read
ruleChecksandredFlagstop-down. Any mint or freeze authority still live is disqualifying on its own. - Narrative. Ask the model to summarise
socials,name, and age: is there a real community, or a ticker launched an hour ago with no links? - Bundle check (with your RPC). Look at
bundleSuspectScoreandlargestHolders. Four wallets holding nearly identical percentages is the classic bundled-launch fingerprint. - Dump simulation. Read
graduationDumpSimulation. If the top five holders selling would erase 80%+ of the price, that is your realistic exit, whatever the chart says. - Sizing discipline. Decide your own maximum loss before anything else. Nothing here sizes a position for you and nothing here should.
- Review. Re-run the same mints later (Apify Schedules) and compare
verdictand flags over time. Keep a log; the dataset already is one.
Example prompt: "Here are 20 token autopsies as JSON. Group them by verdict, list the top red flag for each SKIP, and for each WATCH tell me which single rule would need to change for it to pass. Do not give buy advice."
Reliability
Three consecutive clean cloud runs with empty {} input (build 0.1.5, Apify Cloud, no RPC):
| Run ID | Started (UTC) | Rows | Errors | Charged events | Runtime |
|---|---|---|---|---|---|
fOzy2gI8mzDx7jpWi | 2026-10-29 16:53:16 | 65 | 0 | 65 token-autopsy | 14.5s |
PSPm9MEsBig4OEnu2 | 2026-10-29 16:53:52 | 65 | 0 | 65 token-autopsy | 14.3s |
eXHjFfwbfmK7dez95 | 2026-10-29 16:54:11 | 65 | 0 | 65 token-autopsy | 14.8s |
Every run returned the same row count with zero entries in the ERRORS record. Example 1 below is the first row of run eXHjFfwbfmK7dez95.
Real sample from a live run
First rows of an actual cloud {} run eXHjFfwbfmK7dez95 (2026-10-29T16:54:14+00:00 UTC):
Verdicts in that run: 0 VALID_SETUP, 53 WATCH, 12 SKIP out of 65 tokens (no RPC, so nothing can exceed WATCH or a 7.0 score).
| Symbol | DEX | Market cap | Liquidity | Age (h) | Confidence | Score | Raw | Verdict |
|---|---|---|---|---|---|---|---|---|
| PUMP | pumpswap | $2,114,531,163 | $24,010,740 | 11327.97 | limited | 7 | 9.8 | WATCH |
| AgenC | pumpswap | $981,156 | $84,744 | 0.53 | limited | 7 | 10 | WATCH |
| CBUCKS | pumpswap | $916,833 | $102,769 | 550.41 | limited | 7 | 10 | WATCH |
| SENSE | raydium | $1,174,289 | $136,357 | 2.28 | limited | 7 | 10 | WATCH |
| WDG | pumpfun | $3,831 | $0 | 144.11 | limited | 6.5 | 6.5 | SKIP |
| VI | pumpswap | $288,592 | $45,022 | 2.7 | limited | 7 | 10 | WATCH |
| STOMP | pumpfun | $12,355 | $0 | 6718.91 | limited | 6.5 | 6.5 | SKIP |
| STANK | raydium | $84,505 | $25,699 | 2.96 | limited | 7 | 10 | WATCH |
Example 1: real row from cloud run eXHjFfwbfmK7dez95, default {} input, no RPC
{"mint": "pumpCmXqMfrsAkQ5r49WcJnRayYRqmXz6ae8H7H9Dfn","symbol": "PUMP","name": "Pump","dexId": "pumpswap","pairAddress": "2uF4Xh61rDwxnG9woyxsVQP7zuA6kLFpb3NvnRQeoiSd","pairUrl": "https://dexscreener.com/solana/2uf4xh61rdwxng9woyxsvqp7zua6klfpb3nvnrqeoisd","discoverySource": "input","priceUsd": 0.004592,"ageHours": 11327.97,"marketCapUsd": 2114531163,"liquidityUsd": 24010739.72,"liquidityToMcapPct": 1.14,"holderDataStatus": "skipped_no_rpc","top10HoldersPct": null,"top1HolderPct": null,"largestHolders": [],"mintAuthorityRevoked": true,"freezeAuthorityRevoked": true,"bundleSuspectScore": null,"bundleDataStatus": "partial_no_rpc","volume5mUsd": 13117.76,"volume1hUsd": 436949.66,"volume24hUsd": 5549009.31,"txns5mBuys": 52,"txns5mSells": 13,"txns1hBuys": 605,"txns1hSells": 302,"txns24hBuys": 15968,"txns24hSells": 8728,"buySellRatio1h": 2,"priceChange5mPct": 0.23,"priceChange1hPct": 1.62,"priceChange24hPct": 9.39,"socials": {"twitter": "https://x.com/pumpfun","website": "https://pump.fun"},"ruleChecks": {"maxTop10HoldersPct": {"pass": null,"value": null,"limit": 25},"maxTop1HolderPct": {"pass": null,"value": null,"limit": 8},"minLiquidityUsd": {"pass": true,"value": 24010739.72,"limit": 5000},"minVolume1hUsd": {"pass": true,"value": 436949.66,"limit": 2500},"mintAuthorityRevoked": {"pass": true,"value": true,"limit": true},"freezeAuthorityRevoked": {"pass": true,"value": true,"limit": true},"minLiquidityToMcapPct": {"pass": false,"value": 1.14,"limit": 5},"maxBundleSuspectScore": {"pass": null,"value": null,"limit": 50}},"autopsyScore": 7,"rawScore": 9.8,"confidence": "limited","verdict": "WATCH","redFlags": ["Liquidity only 1.14% of market cap: thin exit","holder check skipped, verify concentration before acting"],"greenFlags": ["Mint authority revoked","Freeze authority revoked","Deep liquidity $24,010,740","Net buying: 605 buys vs 302 sells (1h)","Multiple socials listed","Survived 472.0 days"],"graduationDumpSimulation": {"model": "constant-product x*y=k on DexScreener pooled base (approximation)","poolBaseTokens": 2617867765,"top5SellPriceImpactPct": null,"sell1PctSupply": 94.2,"sell5PctSupply": 99.64,"sell10PctSupply": 99.91},"claudePromptContext": "PUMP (pumpCmXqMfrsAkQ5r49WcJnRayYRqmXz6ae8H7H9Dfn) on pumpswap: age 11327.97h, mcap $2,114,531,163, liq $24,010,740 (1.14% of mcap), 1h vol $436,950, 1h buys/sells 605/302, top10 holders not analysed (skipped_no_rpc), mint revoked True, freeze revoked True, bundle score not computed (partial_no_rpc), autopsy 7.0/10 (raw 9.8, limited confidence) -> WATCH. Red flags: Liquidity only 1.14% of market cap: thin exit; holder check skipped, verify concentration before acting. Analytical only, not financial advice.","scrapedAt": "2026-10-29T16:54:14+00:00"}
Example 2: holder-enabled row (ILLUSTRATIVE SHAPE ONLY)
Not real output. This shows the field shape when
rpcUrlis set. Holder numbers and account placeholders below are made up for illustration; only holder-related fields are shown; every other field matches Example 1.
{"mint": "pumpCmXqMfrsAkQ5r49WcJnRayYRqmXz6ae8H7H9Dfn","symbol": "PUMP","holderDataStatus": "ok","bundleSuspectScore": 22,"bundleDataStatus": "ok","confidence": "high","top10HoldersPct": 18.42,"top1HolderPct": 4.1,"largestHolders": [{"rank": 1,"tokenAccount": "<pool vault token account>","pct": 0.26,"isPoolVault": true},{"rank": 2,"tokenAccount": "<token account>","pct": 4.1,"isPoolVault": false},{"rank": 3,"tokenAccount": "<token account>","pct": 3.65,"isPoolVault": false}],"ruleChecks": {"maxTop10HoldersPct": {"pass": true,"value": 18.42,"limit": 25.0},"maxTop1HolderPct": {"pass": true,"value": 4.1,"limit": 8.0},"minLiquidityUsd": {"pass": true,"value": 23982026.9,"limit": 5000.0},"minVolume1hUsd": {"pass": true,"value": 440982.3,"limit": 2500.0},"mintAuthorityRevoked": {"pass": true,"value": true,"limit": true},"freezeAuthorityRevoked": {"pass": true,"value": true,"limit": true},"minLiquidityToMcapPct": {"pass": false,"value": 1.14,"limit": 5},"maxBundleSuspectScore": {"pass": true,"value": 0,"limit": 50}},"graduationDumpSimulation": {"model": "constant-product x*y=k on DexScreener pooled base (approximation)","poolBaseTokens": 2620674002.0,"top5SellPriceImpactPct": "<computed from top-5 balances>","sell1PctSupply": 94.19,"sell5PctSupply": 99.64,"sell10PctSupply": 99.91},"claudePromptContext": "<same summary, with 'top10 holders 18.42%'>"}
A typical SKIP from the same real run: WDG: Near-zero liquidity ($0); Liquidity only 0.0% of market cap: thin exit; holder check skipped, verify concentration before acting.
API examples
Python
from apify_client import ApifyClientclient = ApifyClient("YOUR_APIFY_TOKEN")run = client.actor("informed_almandine_vzb/solana-pumpfun-token-autopsy-scanner").call(run_input={"mode": "mints_only","mintAddresses": ["pumpCmXqMfrsAkQ5r49WcJnRayYRqmXz6ae8H7H9Dfn"],"maxTop10HoldersPct": 20,})for t in client.dataset(run["defaultDatasetId"]).iterate_items():print(t["symbol"], t["verdict"], t["autopsyScore"], t["redFlags"][:2])
Node.js
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: process.env.APIFY_TOKEN });const run = await client.actor('informed_almandine_vzb/solana-pumpfun-token-autopsy-scanner').call({ mode: 'trending_discovery', dexFilter: ['pumpswap', 'pumpfun'] });const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items.filter((t) => t.verdict !== 'SKIP').map((t) => t.claudePromptContext));
cURL / JSON input
curl -X POST "https://api.apify.com/v2/acts/informed_almandine_vzb~solana-pumpfun-token-autopsy-scanner/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \-H "Content-Type: application/json" \-d '{"mode":"mints_only","mintAddresses":["https://pump.fun/coin/pumpCmXqMfrsAkQ5r49WcJnRayYRqmXz6ae8H7H9Dfn"]}'
Pricing
Pay per event, $0.00 start fee.
| Event | Price |
|---|---|
token-autopsy (one token analysed and saved) | $0.0025 ($2.50 per 1,000) |
- A default
{}run of ~65 tokens costs about $0.16. - Scanning 60 trending tokens every hour for a day: 1,440 autopsies = $3.60.
- Apify's $5 monthly free credit covers about 2,000 autopsies.
- Tokens with no Solana pair on DexScreener are logged in the
ERRORSrecord and not charged.
Limits and honest caveats
- DexScreener and RPC data are snapshots; meme-token markets move in seconds.
bundleSuspectScoreis only computed with your RPC; it is a heuristic from holder shape and flow, not a forensic trace of funding wallets.- The dump simulation assumes a single constant-product pool and ignores other pools, fees, and arbitrage.
- Holder % uses the 20 largest token accounts; exchange or program accounts other than the pool vault are not labelled.
Data, safety, and disclaimer
All data comes from public sources: the DexScreener public API and public Solana JSON-RPC read methods
(getMultipleAccounts, getTokenLargestAccounts). The Actor never asks for a seed phrase or private key,
never connects a wallet, and never sends a transaction. VALID_SETUP, WATCH, and SKIP describe how a token
scores against the rules you set; they are not recommendations to buy, sell, or hold. Crypto tokens,
especially new Pump.fun launches, can and do go to zero. Do your own research.