How Vetto scores a token.
Every number comes from on-chain data and public APIs, run through a fixed formula. This page is generated from the same code that scores your token.
The whole formula
Kept between 0 and 100.
- Any critical flag: at least 50
- Impostor or live mint or freeze authority: at least 75
- Under 60% data: partial data, never a guess
Flip a flag, watch the score move
Every token starts at 10. These are real signals with their real points. The first selection is only an example, not a real token. Tiered signals show their maximum.
Result
Moderate- Base score
- 10
- Red flags
- +35
- Green flags
- −10
Kept between 0 and 100.
Four levels, and no “safe”
We never call a token safe. The best result is no major red flags found. Below 60% data completeness the level is partial data.
No major red flags found. It can still go to zero.
Some flags worth reading before you decide.
Serious flags, or at least one critical one.
Many flags, an impostor, or live mint or freeze authority.
Forced to extreme (75+): IMPOSTOR · MINT_AUTHORITY_ACTIVE · FREEZE_AUTHORITY_ACTIVE
From a link to a verdict in five steps
The AI only words the reply. It never sees bios or websites and never writes a number.
- 01Find the token
CA, links, bio, website, pinned post, our reverse index.
- 02Collect
Every source in parallel, each with its own timeout.
- 03Freeze
One immutable snapshot with a SHA-256 hash.
- 04Score
A fixed, published formula. Same input, same score.
- 05Reply
Card, bot reply and report, all from that snapshot.
Always the right token
Tag the bot under any post. It works out which token the post is about, in this order, and stops at the first exact hit.
- 1CA in the post
A contract address, or a pump.fun, DexScreener, Birdeye, GMGN, Axiom, Photon or Solscan link, in the post that tagged us.
- 2Parent or quoted post
Same search in the post you replied to or quoted.
- 3The author's token
Cached verified link, then bio, website, pinned post, our reverse index of token socials, DexScreener search and latest posts.
- 4$TICKER
Solana only, real liquidity. One clear match is used; otherwise the bot asks “A or B?”.
- 5Not found
We say so and ask for the CA. We never guess a token.
Then we check the link both ways
Token metadata, DexScreener socials, the website and the X bio must point at each other.
- Official
Two independent sources agree. For example, token metadata links the X account and the website shows the same CA.
- Unverified link
Only the account claims the CA. The token doesn't point back.
- Conflict
Website or bio lists a different CA than the token. Possible impostor.
A check for every trick
Each source has its own timeout. A source that fails lowers completeness, and the signals that need it are skipped, never guessed.
Authorities, supply, Token-2022 extensions
Name, image, socials, update authority
Creator, create tx, bonding curve, graduation
Price, market cap, liquidity, volume, main pool
Paid profile, ads, community takeover
Top 20 owners, with pools, burn, locks and CEX excluded
Dev balance, sells, transfers to other wallets
Every token the creator launched and how it ended
Bundles in the creation slot, snipers right after
Who funded the top holders. Shared funders link wallets
Streamflow locks and the unlock schedule
Account age, handle changes, domain age, CA on site
Name, ticker and logo against verified tokens
Every token's socials, so a post without a CA still finds its token
Measures every check again at +1 h, +24 h and +7 d
One snapshot, everywhere
All data is normalised into one immutable snapshot with a SHA-256 hash. The card, the bot reply and the report are rendered from that same object, so the numbers can't disagree. Asking again within a few minutes returns the same snapshot.
same sha256 everywhere · scoring v1.1.0

Every point, explained
Generated from the scoring config. Change a rule and the version number changes with it.
Red flags
Points added to the risk score, highest first.| Signal | Severity | Points |
|---|---|---|
| Name, symbol or logo copies an older verified token with a different mint.IMPOSTORCritical | Critical | +45 |
| Mint authority is not revoked, so more supply can be printed.MINT_AUTHORITY_ACTIVECritical | Critical | +30 |
| Freeze authority is not revoked, so holders' tokens can be frozen.FREEZE_AUTHORITY_ACTIVECritical | Critical | +30 |
| The project's website or X bio lists a different contract address than this token.SOCIAL_CA_MISMATCHCritical | Critical | +30 |
| Token-2022 with a permanent delegate, a transfer hook or a non-zero transfer fee.TOKEN2022_DANGEROUS_EXTCritical | Critical | +25 |
| Wallets buying in the creation slot (bundle) took more than 30 % (at least HIGH), 10 % or 3 % of supply.BUNDLED_LAUNCHCritical | Critical | +25 (> 30 %)+15 (> 10 %)+7 (> 3 %) |
| Dev created ≥ 3 earlier tokens and ≥ 70 % of them are rugged or dead.DEV_SERIAL_RUGGERMajor | Major | +20 |
| Main pool is a classic AMM with LP tokens and the LP is neither burned nor locked.LP_UNLOCKEDCritical | Critical | +20 |
| Dev wallet holds an unlocked share of supply above 10 % (or above 5 %).DEV_HOLDS_HIGHMajor | Major | +15 (> 10 %)+8 (> 5 %) |
| Top 10 holders (excluding pools, burn, locks, CEX) own more than 40 % (or 25 %).TOP10_CONCENTRATEDMajor | Major | +15 (> 40 %)+8 (> 25 %) |
| Holder groups funded by the same wallet (≥ 2 wallets each) together own more than 15 % (or 8 %).LINKED_CLUSTERSMajor | Major | +15 (> 15 %)+8 (> 8 %) |
| Dev created ≥ 10 tokens in the last 30 days.DEV_MASS_DEPLOYERMajor | Major | +12 |
| Dev sent ≥ 3 % of supply to other wallets (possible hidden dev wallets).DEV_HIDDEN_WALLETSMajor | Major | +12 |
| Early buyers (first launch slots, bundle included) still hold more than 10 %.SNIPERS_HOLDINGMajor | Major | +10 |
| Graduated to a DEX but liquidity is below $5,000.LOW_LIQUIDITYMajor | Major | +10 |
| The project's X account is younger than 7 days.X_ACCOUNT_NEWMinor | Minor | +8 |
| We have seen this X account under a different username before.X_HANDLE_CHANGEDMinor | Minor | +8 |
| More than 5 % of supply unlocks within 72 hours.UNLOCK_SOONMinor | Minor | +8 |
| Website domain was registered less than 7 days ago.DOMAIN_NEWMinor | Minor | +5 |
| The project website does not respond.WEBSITE_DOWNMinor | Minor | +5 |
| No X, website or Telegram anywhere in metadata or DexScreener.NO_SOCIALSMinor | Minor | +5 |
| An X account claims this CA but the token does not link back to it.UNVERIFIED_BINDINGMinor | Minor | +5 |
Green flags
Points subtracted. The score never goes below 0.| Signal | Severity | Points |
|---|---|---|
| At least 80 % of the dev allocation is locked on Streamflow.DEV_LOCKEDMajor | Major | −10 |
| Dev has ≥ 2 earlier tokens, none rugged, at least one success.DEV_CLEAN_HISTORYMajor | Major | −10 |
| Top 10 hold less than 15 % and there are more than 500 holders.HEALTHY_DISTRIBUTIONMajor | Major | −8 |
| Both mint and freeze authority are revoked.AUTHORITIES_REVOKEDMinor | Minor | −5 |
| X account ↔ token link verified by ≥ 2 independent sources and the website is live.VERIFIED_SOCIALSMinor | Minor | −5 |
| Liquidity above $50,000.LIQUIDITY_OKMinor | Minor | −5 |
| Dev has not sold anything, has not moved tokens to other wallets, and holds less than 5 %.DEV_SOLD_NOTHINGMinor | Minor | −3 |
| Approved DexScreener token profile (paid).DEX_PAIDMinor | Minor | −2 |
Info
Context only, no points.| Signal | Severity | Points |
|---|---|---|
| DexScreener paid orders (profile, ads, trending), shown for context.DEX_ORDERSInfo | Info | 0 |
| Community takeover registered on DexScreener.CTOInfo | Info | 0 |
| Token is less than 1 hour old, so everything can change fast.AGE_UNDER_1HInfo | Info | 0 |
| Still on the pump.fun bonding curve.BONDING_CURVEInfo | Info | 0 |
| Graduated from the pump.fun bonding curve to a DEX pool.GRADUATEDInfo | Info | 0 |
| Launched on a known launchpad (PUBLIC_LAUNCHPADS).LAUNCHED_ONInfo | Info | 0 |
Not financial advice
Vetto is an automated research tool. Data can be delayed, incomplete or wrong, and a low risk token can still go to zero. Projects can answer flags with evidence on their report page; responses are reviewed but never change the score. Only data does.