Filtering & Scam Detection
When you ask /og for a symbol, the search comes back with everything
on that chain that ever called itself by that name. For a trending
ticker that’s commonly twenty, thirty, sometimes a hundred pairs —
mostly bots, honeypots, abandoned clones, and pairs propped up by a
fake price. Without filtering the OG list would drown in noise.
The filters below cut that down to pairs that actually look real, so the rows you see have a fighting chance of being meaningful.
The qualification gate
Section titled “The qualification gate”A pair has to clear one of two bars before anything else looks at it. It qualifies if either condition holds:
| Condition | Threshold |
|---|---|
| Current liquidity | liquidity.usd >= $500 |
| 24h activity | volume.h24 > 0 AND txns.h24.buys + txns.h24.sells > 0 |
A pair that fails both — no liquidity, no volume, no buys, no sells — is dropped on the spot. These are the dead pairs that flood DexScreener results: a contract somebody minted, a pool nobody ever filled, no trades ever placed.
The activity branch exists for a specific reason: bonding-curve pairs
(see below) often report liquidity: null, but they trade. The OR
condition lets them through.
The honeypot rule
Section titled “The honeypot rule”Honeypots are contracts you can buy but not sell — every transaction out of the pool reverts. The signature is obvious if you look at the 24h transaction breakdown: lots of buys, zero sells.
The filter:
| Condition | Result |
|---|---|
txns.h24.buys >= 10 AND txns.h24.sells === 0 | Reject |
Ten or more buys and not a single sell over a full day is a tight fingerprint — legitimate pairs always have at least some sells, even if the ratio is lopsided. The threshold of 10 keeps brand-new pairs (which might genuinely have only a few buys yet) from getting flagged unfairly.
The inflated-FDV rule
Section titled “The inflated-FDV rule”The other common scam pattern is propping up a fake market cap with a thin pool — list a token at $1 per coin, supply a billion of them, post a $892 LP, and DexScreener will dutifully report a $1B “market cap.” Sort by market cap and the impostor sits at the top.
The filter catches the cap-to-liquidity ratio:
| Condition | Result |
|---|---|
liquidity.usd > 0 AND marketCap > 500 × liquidity.usd | Reject |
A real pair almost always has a market cap less than a few hundred times its liquidity. 500× is the line where the imbalance stops being plausible and starts being deliberate.
The liquidity.usd > 0 guard is critical — it’s what exempts
bonding-curve pairs (whose liquidity is null or 0) from this rule.
Otherwise every pre-migration pump.fun token would be filtered out
here.
The bonding-curve exemption
Section titled “The bonding-curve exemption”Pump.fun and similar bonding-curve launchers don’t use a traditional
liquidity pool. The price is set by a curve formula against a token
balance held by the bonding contract, and DexScreener reports
liquidity: null for these pairs because there’s no LP to read.
If /og only checked liquidity, every pre-migration pump.fun token
would be excluded — including the OG when a pump.fun coin is the
genuine first launch on the chain. That’s the worst possible failure
mode for an OG checker.
The activity branch of the qualification gate handles them: as long
as the pair shows real volume.h24 and at least one transaction in
the last 24 hours, it qualifies. The inflated-FDV rule’s
liquidity.usd > 0 guard means it can’t reject them either.
The result: bonding-curve pairs are first-class citizens in /og.
After a pump.fun token migrates to Raydium and its pair gets a real
LP, the same contract just transitions into the standard liquidity
branch. No special-casing in the row, just rules that don’t punish
the curve.
The relaxed-threshold fallback
Section titled “The relaxed-threshold fallback”If the strict $500 filter rejects everything and the activity
branch finds nothing either, /og doesn’t just give up. It retries
the same logic with the liquidity floor dropped to $100.
This matters for genuinely tiny tokens — micro-cap symbols, fresh launches that haven’t picked up volume yet, dead chains where $500 is more liquidity than anyone’s holding. Without the fallback the list would just come back empty, even when there’s a clear OG sitting right there with $200 of LP.
When the relaxed threshold kicks in, the rendered output appends an italic note under the table:
Showing $100+ liquidity (no $500+ matches)Same flag (thresholdRelaxed) drives the line in /og’s output. If
you don’t see the note, the rows you got cleared the strict $500 bar.
A real-world example: SCRIBBLI
Section titled “A real-world example: SCRIBBLI”When SCRIBBLI was trending on Solana, DexScreener returned 25+ pairs
for the symbol. The actual OG (E6uuHYY…) was a pre-migration
pump.fun pair with liquidity: null, real volume, and active
transactions — exactly the case the bonding-curve exemption was
written for.
The filters cleaned up the rest:
SCRIBBLI — rejected pairs
Pair Why rejected GKWydNyx… Honeypot — 300 buys, 0 sells in 24h Fx3XhhtJ… Inflated FDV — $38M MC / $892 LP = 42,000× …and ~20 more dead pairs (no liq, no volume, no txns)
Without the filters the OG row would have been buried under the inflated $38M impostor. With them, the row-1 contract is the real one, and you can act on it with confidence.
The top-15 cap
Section titled “The top-15 cap”After filtering, after dedup-by-token (the earliest pair per contract wins), after sorting oldest-first — only the first fifteen rows make it to the output. Anything older that survives the filters is trimmed off.
Fifteen is a balance: the OG is always at row 1, the major clones are usually within the first five rows, and the bottom of the list gives you enough context to spot coordinated launches without the output sprawling past one screen.
What this means for you
Section titled “What this means for you”The list /og shows you is already curated. Every row cleared the
liquidity-or-activity gate, survived the honeypot fingerprint check,
and has a market cap that’s at least loosely supported by its pool.
If a token you expected to see isn’t there, it’s almost certainly one of these reasons:
- Dead pair. No liquidity, no recent volume, no transactions in 24h. Real but inactive — the gate dropped it.
- Honeypot fingerprint. Buys but no sells. The token might still be tradeable on its DEX page, but the on-chain pattern says it isn’t.
- FDV / liquidity mismatch. A claimed market cap more than 500× larger than the pool backing it.
A symbol returning zero rows even after the relaxed-$100 retry usually
means the symbol genuinely has no real activity on that chain, or it’s
a chain where DexScreener has no coverage. Try /og on a different
chain, or paste the contract directly so Prysm can look up the chain
itself.