Documentation

How ORSOL reads a token

Everything the scanner checks, how the score is built, and where each number comes from. No jargon you have to look up elsewhere.

Score model v1.0.0

Getting started

What is ORSOL#

ORSOL is a scanner for Solana tokens. Paste a token's mint address and it tells you how risky the contract is, who really holds the supply, and how the market is behaving, all on one page within a few seconds.

Most scanners stop at “the top 10 wallets hold 40%”. That number can't tell you whether those ten wallets are ten different people or one person with ten wallets. ORSOL goes further: it replays the token's launch and follows the money that funded the biggest holders, so it can point out bundles, snipers, dev exits and wallet clusters.

Read from chain

Authorities, Token-2022 extensions and pump.fun curves come straight from Solana, not a third-party label.

Every number has a source

Each signal names the chain or API it came from, and the Sources panel shows when it was fetched.

Never rates itself

Our own token is shown with raw data and no verdict.

Quick start#

  1. 1

    Copy the mint address

    The mint (also called CA or contract address) is the token's ID on Solana, 32–44 characters long. You'll find it on Dexscreener, Jupiter, pump.fun or the project's own site.
  2. 2

    Paste it and press Scan

    Use the search box on the home page or at the top of any results page. Wallet addresses and pool addresses won't scan, only token mints.
  3. 3

    Read the results

    The score and the contract checks appear first. Wallet forensics load a few seconds later and can update the score; the AI read appears alongside.
  4. 4

    Share it

    Press Share on X under the score. A preview shows the exact post first: a short line written from your scan (the score and the findings that matter), the CA, links to the token on Dexscreener and GMGN, and the scan link /t/<mint>, which unfolds into a card with the score. Post it on X in one tap, or copy it for Telegram and Discord.

Reading a scan#

A results page is laid out from “quick answer” to “full detail”:

PanelWhat it tells you
Score & verdictOne number from 0 to 100 and a word for it. If a hard cap applied, the reason is listed right below.
Pillar barsHow each of the four areas scored on its own, so you can see what pulled the total down.
Share on XOpens a preview of a post written from your scan, ready to post or copy.
AI readFour plain sentences on the market, the biggest risk, what to watch and the bottom line.
ChartCandles for the deepest pool, from 1 minute to 1 day, in price or market cap. Tokens still on the pump.fun curve show curve progress instead.
Wallet forensicsInsider supply, bundles, snipers, clusters and the dev wallet, with links to each wallet on Solscan.
SignalsEvery individual check with its value, a short note and the source it came from.
Top holdersThe 15 largest holders. Pools, curves and other programs are tagged and left out of the concentration math.
SourcesWhich data sources answered, how fast, and which were unavailable.

Each signal carries a colour so you can skim:

GoodNeutralCautionRisk

How it works

The scan pipeline#

Every scan runs the same four stages. The first one answers in a few seconds; the second runs in the background.

01

Read

Mint, holders, pools and curve straight from Solana

02

Trace

Launch buyers, funders and dev wallet

03

Score

Four weighted pillars, then hard caps

04

Explain

A short read that quotes its numbers

Idle

1. Read

We read the mint account from Solana to get its authorities and Token-2022 extensions, resolve the 20 largest holders and work out which of them are pools or programs, and decode the pump.fun bonding curve if the token has one. In parallel we fetch market data, Jupiter's token info and the LP lock status, then the hourly candles for the main pool.

2. Trace

We pull the token's first few dozen transactions and record who bought, in which slot, and how much. Then, for the dev, the largest holders and the launch buyers, we look up where each wallet's first SOL came from. Details in Wallet forensics.

3. Score

The checks are grouped into four pillars, each scored 0–100, weighted into one total, then limited by any hard cap that applies.

4. Explain

A four-sentence summary is written from the finished numbers. It can only quote numbers that are already on the page.

The score#

The score is a weighted average of four pillars, each scored 0–100. Contract, Wallets and Fundamentals start at 100 and lose points for every risk they find. Technicals starts at 50 and moves up or down with the trend. Either way, every point lost shows up as a signal on the results page.

Contract & LP0%Wallets0%Fundamentals0%Technicals0%
PillarWeightWhat it looks at
Contract & LP risk30%Mint and freeze authority, risky Token-2022 extensions, mutable metadata, LP burned or locked, Jupiter Shield warnings, whether a sell route exists, RugCheck's rugged flag.
Wallets & distribution30%Top-10 wallets (pools excluded), largest single wallet, dev balance, holder count, insider supply, launch bundle.
Fundamentals20%Liquidity, market cap versus liquidity, pair age, web presence and Jupiter's organic score. Tokens still on pump.fun are judged on curve progress instead. Jupiter verification is shown but not scored.
Technicals20%EMA 9/21 trend, price versus EMA 21, RSI 14, share of buys in the last hour, volume-to-liquidity churn.

Technicals needs at least 30 hourly candles. With fewer, that pillar is left out and the other three are re-weighted to make up 100%.

Verdicts

ScoreVerdict
75 – 100Strong
60 – 74Constructive
45 – 59Neutral
30 – 44Weak
0 – 29High risk

A score is a risk signal, not a price call

A Strong score means the checks we can run found few problems. It does not mean the price will go up.

Hard caps#

Some problems are serious enough that no chart or volume should hide them. When one of these applies, the final score can't go above the cap, no matter how well the other pillars did. The lowest applicable cap wins.

ConditionMax scoreWhy
Permanent delegate or non-transferable token0Someone can take your tokens, or you can never sell them.
Token flagged as rugged0Liquidity has already been pulled.
Jupiter flags the token as not sellable10Sells are likely to fail.
Other dangerous Token-2022 extension30A transfer hook, pause authority, frozen-by-default accounts or a transfer fee of 5% or more can block or tax your trades.
Mint or freeze authority still active35The deployer can print supply or freeze your wallet.
Insiders hold over 40% of supply40A small group can dump on everyone else.
Less than 50% of the LP burned or locked45Most of the liquidity can be withdrawn.
Under 24 hours of trading, or still on the pump.fun curve70Too new to judge with confidence.

Wallet forensics#

This is the part that sets ORSOL apart. It answers a simple question: of the wallets holding this token, how many are really connected to the launch or to each other?

FlagHow we detect it
BundleBought in the exact slot the token was created. On Solana that almost always means a coordinated bundle, often by the deployer.
SniperBought within 10 slots (about 4 seconds) of creation. Fast bots and insiders.
Dev walletThe token creator, from Jupiter, the pump.fun curve, or the signer of the token's first transaction. We compare what it bought at launch with what it holds now; holding under 10% of its buy is shown as exited.
ClusterTwo or more holders whose first SOL came from the same private wallet, or any holder funded by the dev.
Fresh walletA traced wallet whose first transaction was less than 48 hours ago and that holds at least 0.3% of supply.

Insider supply

The headline number adds up what the dev, bundle wallets, snipers and cluster wallets still hold today. Wallets that bought early and already sold don't count. Fresh wallets are shown separately and are not counted as insiders.

Exchanges are excluded

Thousands of unrelated people withdraw from Binance, Coinbase, OKX, Bybit or Kraken. Wallets funded from known exchange hot wallets are never grouped into a cluster.

Confidence

LevelMeaning
HighDedicated RPC, the token's first transaction was reached and every funder we tried was traced.
MediumDedicated RPC, but part of the trace was skipped: the history was too long to reach launch, or some lookups hit rate limits.
LowRunning on the public Solana RPC, so fewer wallets are checked and long histories can't reach launch. Treat insider supply as a lower bound.

These are heuristics

A shared funder can be a coincidence, and a new exchange wallet can look like a private one. Every flagged wallet links to Solscan so you can check it yourself.

Contract checks#

Authorities and metadata are read straight from Solana. LP status comes from RugCheck and the sell route from Jupiter.

CheckWhat it means for you
Mint authorityIf active, someone can create new tokens at any time and dilute every holder.
Freeze authorityIf active, someone can freeze your token account so you can't sell.
MetadataIf mutable, the name, ticker or image can be changed after you buy.
LP burned / lockedHow much of the main pool's LP tokens are burned or locked. Unlocked LP can be pulled. Concentrated-liquidity pools (Orca Whirlpools, Raydium CLMM, Meteora DLMM) have no LP token, so this check doesn't apply to them.
Sell routeWhether Jupiter can quote a sell of the token into SOL right now.

Token-2022 extensions

Newer Solana tokens can carry extensions. Most are harmless; these are the ones we flag:

ExtensionRisk
Permanent delegateCritical A third party can move or burn tokens from any wallet.
Non-transferableCritical The token can never be sold or moved.
Transfer hookCritical Every transfer runs custom code that can block or tax it.
PausableCritical An authority can stop all transfers.
Default account stateCritical When set to frozen, new holder accounts start frozen.
Transfer feeCaution A cut of every transfer goes to the issuer; 5% or more is critical.
Mint close authorityCaution The mint account itself can be closed.

Market & trend#

SignalHow to read it
LiquidityMoney in the pools. Under $10K is very thin; above $250K is deep. We use the larger of the deepest pair and Jupiter's total.
Mcap / liquidityMarket cap divided by liquidity. Above 20× means selling will move the price hard; above 50× is a red flag.
Pair ageHow long the main pool has existed. Under 24 hours caps the score at 70.
Organic activityJupiter's 0–100 estimate of how much trading comes from real users rather than bots.
EMA 9 / 21Short-term trend from hourly candles. Bullish when the 9-hour average is above the 21-hour.
RSI 14Momentum. Above 75 is stretched, below 25 is washed out, 45–65 is healthy.
Buys (1h)Share of transactions in the last hour that were buys.
Volume / liquidityAbove 10× in a day usually means wash trading.

Pump.fun curves#

Tokens launched on pump.fun start on a bonding curve instead of a normal pool. We read the curve account directly from Solana and show how far it is to graduation.

FieldMeaning
ProgressShare of the curve's 793.1M tradable tokens already bought. At 100% the token graduates to PumpSwap.
SOL in curveReal SOL sitting in the curve right now: what buyers put in minus what sellers took out. About 85 SOL at graduation.
CreatorThe deployer wallet, used as the dev in forensics.

The live list on the home page tracks the 40 newest pump.fun launches over a Solana WebSocket subscription, so progress moves the moment a trade lands on-chain. It shows the 12 most advanced active curves; drained curves (tokens sold but almost no SOL left) are left out.

AI read#

Below the score is a four-sentence summary: what the market is doing, the biggest risk with its number, one thing to watch next, and a bottom line that matches the verdict.

It is written by Claude from the finished snapshot, not from raw data, and it is told to only use numbers that are already on the page and never to give buy or sell advice. If the model is unavailable, a rule-based summary is shown instead, so this panel is never empty. The label above it says which one you're reading.

Reference

Data sources#

Anything that decides whether a token is safe (authorities, holders, the curve, the launch) is read straight from Solana. Third-party APIs supply market data, and we only lean on them where the chain can't answer.

Live status

A real request to each provider, made by our server right now. Nothing on this panel is hard-coded.

Checking sources…

live

What comes from where

DataSourceHow fresh
Mint and freeze authority, supply, Token-2022 extensionsSolana RPC, the mint account itselfEach scan
Metadata mutabilitySolana RPC, the Metaplex account or Token-2022 metadataEach scan
Top 20 holdersSolana RPC (getTokenLargestAccounts). RugCheck only if the RPC refusesEach scan
Holder countJupiter. RugCheck if Jupiter has noneEach scan
Pump.fun bonding curveSolana RPC, decoded from the curve accountEach scan
Launch buyers and who funded themSolana RPC transaction history (Helius when a key is set)Runs after the scan, kept 10 min
Price, pairs, volume, market capDexscreenerEach scan
LiquidityDexscreener and Jupiter. We use the higher of the twoEach scan
Candles for the Trend scoreGeckoTerminal, hourlyEach scan
Chart candlesGeckoTerminal, 1m to 1D10s on 1m, up to 5 min on 1D
Verification and organic scoreJupiter token APIEach scan
Shield warningsJupiter Ultra ShieldEach scan
Sell routeJupiter swap quote, token to SOLEach scan
LP burned or locked, rugged flagRugCheckEach scan
AI readClaude. A written template if no key is setKept 5 min per score

On the home page

DataSourceHow fresh
SOL and trending token pricesJupiter price APIEvery 3s
Trending list: names, liquidity, market capDexscreener boostsEvery 15s, list itself every 60s
New pump.fun launchesJupiter recent tokensEvery 15s
Bonding curve progressSolana WebSocketOn every trade

“Each scan” means fetched when you scan, then reused for 45 seconds so a token everyone is scanning doesn't hammer the upstream APIs. If a source fails, the scan carries on without it and the Sources panel on the result marks it unavailable.

API#

The same data that powers the site is available as JSON. No API key is needed; each endpoint is rate-limited per IP address, and responses are cached for the time shown, so calling again sooner returns the same data.

EndpointReturnsCacheLimit
/api/v1/token/:mintThe full scan: score, pillars and signals, market, top holders and which sources answered.45 s30/min
/api/v1/token/:mint/walletsWallet forensics plus the snapshot re-scored with them. Slower: it traces the launch.10 min8/min
/api/v1/token/:mint/aiThe four-sentence read. source is claude or template.5 min per score10/min
/api/v1/token/:mint/candlesUp to 300 OHLCV candles. Needs pool (the market.pairAddress from the scan); tf is 1m, 5m, 15m, 1h (default), 4h or 1d.10 s – 5 min60/min
/api/v1/marketSOL price and 24h change, plus the 20 top-boosted Solana tokens on Dexscreener.60 snone
/api/v1/pump/liveThe 12 most advanced active curves among the 40 newest pump.fun launches.30 snone
/api/v1/liveA Server-Sent Events stream with sol, market and curves events, pushed as they change.streamednone
/api/v1/statusLive health and response time of every data source.20 s30/min

All endpoints are GET.

Request
curl https://orsol.app/api/v1/token/JUPyiwrYJFskUPiHa7hkeR8VUtAeFoSYbKedZNsDvCN
Response (shortened, example values)
{
  "mint": "JUPyiwrYJFskUPiHa7hkeR8VUtAeFoSYbKedZNsDvCN",
  "scoreVersion": "1.0.0",
  "token": { "name": "Jupiter", "symbol": "JUP", "program": "spl-token" },
  "market": { "dex": "orca", "liquidityUsd": 619012, "marketCap": 809230000 },
  "pillars": [
    { "key": "risk", "weight": 30, "score": 90, "signals": [
      { "label": "Mint authority", "value": "Revoked", "tone": "good", "source": "Solana RPC" }
    ] },
    { "key": "distribution", "weight": 30, "score": 25 },
    { "key": "fundamental", "weight": 20, "score": 75 },
    { "key": "technical", "weight": 20, "score": 15 }
  ],
  "overall": { "score": 53, "verdict": "Neutral", "caps": [] },
  "sources": [{ "name": "Solana RPC · mint", "ok": true, "ms": 114 }]
}
Live stream (browser)
const live = new EventSource("https://orsol.app/api/v1/live");
live.addEventListener("curves", (e) => console.log(JSON.parse(e.data).rows));
live.addEventListener("market", (e) => console.log(JSON.parse(e.data).rows));
live.addEventListener("sol", (e) => console.log(JSON.parse(e.data).usd));

Errors return JSON with an error message: 400 for an invalid address (or, on candles, a bad pool or tf), 404 for a valid address that isn't a token mint, such as a wallet, 429 when rate-limited (wait the seconds in the retry-after header) and 502 when an upstream source is down.

Our token#

A scanner that rates its own token has a conflict of interest. ORSOL never gives its own token a score or verdict. Its page shows the raw checks with a clear “team token” label instead.

Contract address

The official address will be published here and in the site footer. Only trust the address shown on this domain.

Limits & disclaimer#

  • Wallet forensics are heuristics and can be wrong in both directions. Treat them as leads to check, not proof.
  • Tokens with a very long history can't always be traced back to launch. Bundle and sniper checks are then skipped and confidence drops.
  • Home page prices update every 3 seconds and curves on every trade. A token's results page is a snapshot that can be up to 45 seconds old.
  • A clean scan doesn't make a token safe. New risks can appear after you scan.

Not financial advice

ORSOL shows risk signals from public data. Nothing on this site is a recommendation to buy, sell or hold any token. Always do your own research.

FAQ#

Is it free?+

Yes. Scanning any token is free.

Which chains are supported?+

Solana only: SPL and Token-2022 tokens, including coins still on the pump.fun curve.

Why did the score change after a few seconds?+

The first number comes from contract and market checks. When wallet forensics finish, the Wallets pillar is updated and the total is recalculated.

Why does a well-known token score lower than I expected?+

Big tokens often have team or treasury wallets holding a large share, and a slow trend. The score reflects those signals, not reputation.

Can a project pay for a better score?+

No. The rules are the same for every token and are published on this page.

Do you need my wallet?+

No. Scanning is read-only and never asks you to connect or sign anything.

Ready to try it?

Paste any Solana mint and see the full breakdown.

Scan a token