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
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
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
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
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”:
| Panel | What it tells you |
|---|---|
| Score & verdict | One number from 0 to 100 and a word for it. If a hard cap applied, the reason is listed right below. |
| Pillar bars | How each of the four areas scored on its own, so you can see what pulled the total down. |
| Share on X | Opens a preview of a post written from your scan, ready to post or copy. |
| AI read | Four plain sentences on the market, the biggest risk, what to watch and the bottom line. |
| Chart | Candles 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 forensics | Insider supply, bundles, snipers, clusters and the dev wallet, with links to each wallet on Solscan. |
| Signals | Every individual check with its value, a short note and the source it came from. |
| Top holders | The 15 largest holders. Pools, curves and other programs are tagged and left out of the concentration math. |
| Sources | Which data sources answered, how fast, and which were unavailable. |
Each signal carries a colour so you can skim:
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.
| Pillar | Weight | What it looks at |
|---|---|---|
| Contract & LP risk | 30% | 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 & distribution | 30% | Top-10 wallets (pools excluded), largest single wallet, dev balance, holder count, insider supply, launch bundle. |
| Fundamentals | 20% | 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. |
| Technicals | 20% | 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
| Score | Verdict |
|---|---|
| 75 – 100 | Strong |
| 60 – 74 | Constructive |
| 45 – 59 | Neutral |
| 30 – 44 | Weak |
| 0 – 29 | High risk |
A score is a risk signal, not a price call
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.
| Condition | Max score | Why |
|---|---|---|
| Permanent delegate or non-transferable token | 0 | Someone can take your tokens, or you can never sell them. |
| Token flagged as rugged | 0 | Liquidity has already been pulled. |
| Jupiter flags the token as not sellable | 10 | Sells are likely to fail. |
| Other dangerous Token-2022 extension | 30 | A 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 active | 35 | The deployer can print supply or freeze your wallet. |
| Insiders hold over 40% of supply | 40 | A small group can dump on everyone else. |
| Less than 50% of the LP burned or locked | 45 | Most of the liquidity can be withdrawn. |
| Under 24 hours of trading, or still on the pump.fun curve | 70 | Too 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?
| Flag | How we detect it |
|---|---|
| Bundle | Bought in the exact slot the token was created. On Solana that almost always means a coordinated bundle, often by the deployer. |
| Sniper | Bought within 10 slots (about 4 seconds) of creation. Fast bots and insiders. |
| Dev wallet | The 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. |
| Cluster | Two or more holders whose first SOL came from the same private wallet, or any holder funded by the dev. |
| Fresh wallet | A 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
| Level | Meaning |
|---|---|
| High | Dedicated RPC, the token's first transaction was reached and every funder we tried was traced. |
| Medium | Dedicated RPC, but part of the trace was skipped: the history was too long to reach launch, or some lookups hit rate limits. |
| Low | Running 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
Contract checks#
Authorities and metadata are read straight from Solana. LP status comes from RugCheck and the sell route from Jupiter.
| Check | What it means for you |
|---|---|
| Mint authority | If active, someone can create new tokens at any time and dilute every holder. |
| Freeze authority | If active, someone can freeze your token account so you can't sell. |
| Metadata | If mutable, the name, ticker or image can be changed after you buy. |
| LP burned / locked | How 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 route | Whether 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:
| Extension | Risk |
|---|---|
| Permanent delegate | Critical A third party can move or burn tokens from any wallet. |
| Non-transferable | Critical The token can never be sold or moved. |
| Transfer hook | Critical Every transfer runs custom code that can block or tax it. |
| Pausable | Critical An authority can stop all transfers. |
| Default account state | Critical When set to frozen, new holder accounts start frozen. |
| Transfer fee | Caution A cut of every transfer goes to the issuer; 5% or more is critical. |
| Mint close authority | Caution The mint account itself can be closed. |
Market & trend#
| Signal | How to read it |
|---|---|
| Liquidity | Money 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 / liquidity | Market cap divided by liquidity. Above 20× means selling will move the price hard; above 50× is a red flag. |
| Pair age | How long the main pool has existed. Under 24 hours caps the score at 70. |
| Organic activity | Jupiter's 0–100 estimate of how much trading comes from real users rather than bots. |
| EMA 9 / 21 | Short-term trend from hourly candles. Bullish when the 9-hour average is above the 21-hour. |
| RSI 14 | Momentum. 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 / liquidity | Above 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.
| Field | Meaning |
|---|---|
| Progress | Share of the curve's 793.1M tradable tokens already bought. At 100% the token graduates to PumpSwap. |
| SOL in curve | Real SOL sitting in the curve right now: what buyers put in minus what sellers took out. About 85 SOL at graduation. |
| Creator | The 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
| Data | Source | How fresh |
|---|---|---|
| Mint and freeze authority, supply, Token-2022 extensions | Solana RPC, the mint account itself | Each scan |
| Metadata mutability | Solana RPC, the Metaplex account or Token-2022 metadata | Each scan |
| Top 20 holders | Solana RPC (getTokenLargestAccounts). RugCheck only if the RPC refuses | Each scan |
| Holder count | Jupiter. RugCheck if Jupiter has none | Each scan |
| Pump.fun bonding curve | Solana RPC, decoded from the curve account | Each scan |
| Launch buyers and who funded them | Solana RPC transaction history (Helius when a key is set) | Runs after the scan, kept 10 min |
| Price, pairs, volume, market cap | Dexscreener | Each scan |
| Liquidity | Dexscreener and Jupiter. We use the higher of the two | Each scan |
| Candles for the Trend score | GeckoTerminal, hourly | Each scan |
| Chart candles | GeckoTerminal, 1m to 1D | 10s on 1m, up to 5 min on 1D |
| Verification and organic score | Jupiter token API | Each scan |
| Shield warnings | Jupiter Ultra Shield | Each scan |
| Sell route | Jupiter swap quote, token to SOL | Each scan |
| LP burned or locked, rugged flag | RugCheck | Each scan |
| AI read | Claude. A written template if no key is set | Kept 5 min per score |
On the home page
| Data | Source | How fresh |
|---|---|---|
| SOL and trending token prices | Jupiter price API | Every 3s |
| Trending list: names, liquidity, market cap | Dexscreener boosts | Every 15s, list itself every 60s |
| New pump.fun launches | Jupiter recent tokens | Every 15s |
| Bonding curve progress | Solana WebSocket | On 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.
| Endpoint | Returns | Cache | Limit |
|---|---|---|---|
/api/v1/token/:mint | The full scan: score, pillars and signals, market, top holders and which sources answered. | 45 s | 30/min |
/api/v1/token/:mint/wallets | Wallet forensics plus the snapshot re-scored with them. Slower: it traces the launch. | 10 min | 8/min |
/api/v1/token/:mint/ai | The four-sentence read. source is claude or template. | 5 min per score | 10/min |
/api/v1/token/:mint/candles | Up 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 min | 60/min |
/api/v1/market | SOL price and 24h change, plus the 20 top-boosted Solana tokens on Dexscreener. | 60 s | none |
/api/v1/pump/live | The 12 most advanced active curves among the 40 newest pump.fun launches. | 30 s | none |
/api/v1/live | A Server-Sent Events stream with sol, market and curves events, pushed as they change. | streamed | none |
/api/v1/status | Live health and response time of every data source. | 20 s | 30/min |
All endpoints are GET.
curl https://orsol.app/api/v1/token/JUPyiwrYJFskUPiHa7hkeR8VUtAeFoSYbKedZNsDvCN{
"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 }]
}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
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
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.