Most airdrop tools are dishonest by design. They sell hype — "you're 92% eligible!" — and route you to bridges they get affiliate commissions on, with no signal at all about whether the bridging is actually worth your gas.
I spent the last few weeks building a different kind of scanner. The headline number on the overview tab isn't your eligibility score. It's the dollar amount you've already spent on gas across all your wallets and chains.
Try it (free, no signup, your keys never leave the browser): protodex.io/airdrop.html
The reality check most tools don't show you
I asked 12 friends running multi-wallet airdrop farms to scan their setups. Every single one was net negative on lifetime gas spent versus airdrop USD received. Including the people who got into Hyperliquid early.
The era when bridging once to Arbitrum got you UNI-tier money is over. Sybil filters have gotten aggressive (Berachain wiped 30–60% of farmed wallets, ZK was similar), per-wallet allocations are smaller, and mainnet ETH gas is brutal. So I built the tool I wanted, not the tool that sells better.
Three things this scanner does that I don't think others do:
1. Pairwise Sybil clustering detection
Protocols increasingly cluster wallets by day-overlap. If your 5 wallets all show activity on the same days — even if you tried to vary the transaction types — they look like one farmer to the allocator. The Berachain TGE filter explicitly used this signal.
I implemented a pairwise comparison: for each pair of wallets, count shared active days as a fraction of the smaller wallet's total activity. If overlap > 65%, surface a warning with the actual day count and a recommendation to stagger.
function detectSybilClusters(metrics, allAddrs) {
const clusters = [];
for (let i = 0; i < allAddrs.length; i++) {
for (let j = i + 1; j < allAddrs.length; j++) {
const daysA = new Set();
const daysB = new Set();
Object.values(metrics[allAddrs[i]] || {})
.forEach(m => (m.daysList || []).forEach(d => daysA.add(d)));
Object.values(metrics[allAddrs[j]] || {})
.forEach(m => (m.daysList || []).forEach(d => daysB.add(d)));
if (daysA.size < 5 || daysB.size < 5) continue;
const overlap = [...daysA].filter(d => daysB.has(d)).length;
const pct = overlap / Math.min(daysA.size, daysB.size);
if (pct > 0.65) clusters.push({ /* ... */ });
}
}
return clusters;
}
Not a perfect proxy for protocol-side clustering (they also use IP, transfer graph, behavioral fingerprints), but day-overlap is the easiest leak to detect locally and the easiest to fix.
2. Pattern-aware scoring, not volume-only
Volume-only scoring is exactly what Sybil farmers optimize for, and exactly what protocols penalize. So I added two multipliers on top of the base score:
- Diversity multiplier: unique counterparties / 50, capped at 1.2x
- Consistency multiplier: if activity spread > 30 days, +10%
function scoreProto(metrics, proto) {
let total = 0;
const breakdown = [];
proto.criteria.forEach(c => {
const v = metrics[proto.chain]?.[c.key] ?? 0;
const pts = v >= c.t[3] ? c.pts
: v >= c.t[2] ? Math.round(c.pts * 0.75)
: v >= c.t[1] ? Math.round(c.pts * 0.5)
: v >= c.t[0] ? Math.round(c.pts * 0.25)
: 0;
total += pts;
breakdown.push({ label: c.label, val: v, pts, max: c.pts });
});
const cps = metrics[proto.chain]?.counterpartiesCount || 0;
const spread = metrics[proto.chain]?.spread || 0;
const diversityMult = Math.min(1.2, 1 + cps / 50);
const consistencyMult = spread > 30 ? 1.1 : 1.0;
return { score: Math.min(100, Math.round(total * diversityMult * consistencyMult)) };
}
So 500 transactions to one contract score worse than 200 transactions across 20 contracts. Which matches how actual allocations work.
3. Gas cost reality, in USD, headlined
Every outgoing transaction has gasUsed * gasPrice. Sum that across chains, multiply by live native-token prices from CoinGecko, surface in USD. That's the headline number.
Most users see a number they're not happy about. That's the point.
The tech stack
Whole thing is a single HTML file:
- React 18 + Babel standalone via unpkg CDN — no build step, no bundler, no Vercel deployment dance
- 1,500 lines, ~83KB on the wire
- Deploys to GitHub Pages on
git push - localStorage for API keys + wallets (nothing touches my server)
- CSP locked to explorer endpoints + CoinGecko + the email-capture form
- Parallel batched scan (5 in-flight with Promise.allSettled and 429/503 backoff) → 3-wallet × 13-chain scan in ~30 seconds
Etherscan V2 unified API now covers most major EVM chains with one key. Sonicscan, Routescan (for Berachain), and Monad's testnet explorer get special-cased fallbacks.
I deliberately picked the single-HTML-file path over a full Next.js app because:
- The trust signal of "this fits in one tab and I can audit it in 10 minutes" matters for a tool that handles your wallet history.
- The protocol list will go stale fast — I'd rather edit a single file than rebuild a deploy.
- No backend means I literally cannot collect your keys even if I wanted to.
What's curated for May 2026
Most of the "famous" airdrops have already happened. Listing them as "active opportunities" would be dishonest. So:
- HYPE (Hyperliquid), BERA (Berachain), ZK (zkSync), SCR (Scroll), MODE, S (Sonic), INIT (Initia), ES (Eclipse), MON (Monad) — all dropped. Demoted to S2/S3 farming with realistic likelihood %.
- Symbiotic, Mira Network, Etherealize, Monad testnet — actually pre-token, surfaced as S-tier.
- HyperEVM, Berachain S2, Sonic S2, Linea LXP-L still farmable.
The list goes stale within weeks of any new TGE. Building a daily-cron registry update is the next thing on the list.
Honest about monetization
The bridge action items use affiliate-tracked URLs (deBridge, Orbiter, CoinDCX for the India onramp). They're labelled in the code; the source is public. The scanner stays free forever. There's no premium tier, no subscription, no "pro features coming soon."
The closest thing to a paywall is the email signup at the bottom for a weekly "airdrop reality check" newsletter. Optional.
What I'd love feedback on
- The Sybil overlap threshold (65%) — too aggressive? too lax? I picked it from intuition + a couple of public TGE post-mortems. Empirical calibration would be better.
- The scoring weights per protocol — heuristic. If you've actually been allocated by one of these protocols, your input on what mattered would improve the calibration.
- Missing protocols — there are several pre-token plays I almost certainly missed. Drop names in comments.
- Failure modes — if the scanner shows wrong data for your wallet, I want to know. Privacy is preserved (your data never reaches me) but I'd love a screenshot or paste of the per-criterion breakdown.
Source + live tool: protodex.io/airdrop.html
If you scan and find your gas number is depressing — you're not alone. Most farmers are net negative. That's the honest reality. Decide eyes-open from here.
Top comments (0)