AI-powered rug pull detection system for Solana tokens. Aggregates on-chain data from multiple sources, scores risk using AI (Claude or DeepSeek), and delivers results through a real-time dashboard.
- Multi-LLM Scoring β Choose between Anthropic Claude or DeepSeek for AI risk analysis
- Multi-Platform Feeds β Monitor tokens from Bags.fm, pump.fun, LetsBonk, Moonshot
- Real-Time Dashboard β WebSocket-powered live scoring with search, filter, and pagination
- Tiered API Access β Free/Builder/Pro tiers with rate limiting and daily call caps
- Score History & Re-Scoring β 24-hour automatic re-scoring with visual score timeline
- Creator Leaderboard β Reputation ranking of token creators by average risk score
- Pro Watchlist β Custom token watchlists for Pro-tier API key users
- Batch Scanning β Scan up to 50 tokens in a single API call (Builder+ tier)
- Embeddable Widget β Drop-in risk badge for external sites
- External Verification Links β Quick links to Solscan, Birdeye, DexScreener, BubbleMaps
- Twitter Alerts β Automated high-risk token alerts (when auto-scan enabled)
- Python 3.10+
- API keys: Helius, Birdeye, and one LLM provider (Anthropic or DeepSeek)
git clone https://github.com/RunTimeAdmin/ScamHound.git
cd ScamHound/scamhound
python -m venv venv
source venv/bin/activate # Linux/Mac
# or: venv\Scripts\activate # Windows
pip install -r ../requirements.txt
cp .env.example .env
# Edit .env with your API keys
python main.pyDashboard available at http://localhost:8000
Configuration is read from .env and optionally overridden by scamhound/config.json (written from the settings page). See .env.example for the complete reference.
| Variable | Default | Description |
|---|---|---|
LLM_PROVIDER |
anthropic |
AI provider: "anthropic" or "deepseek" |
ANTHROPIC_MODEL |
claude-sonnet-4-20250514 |
Anthropic model name override |
DEEPSEEK_MODEL |
deepseek-chat |
DeepSeek model name override |
LLM_MAX_RETRIES |
2 |
Retries before fallback UNSCORED |
LLM_RETRY_BACKOFF_SECONDS |
1.0 |
Base backoff between LLM retry attempts |
AUTO_SCAN_ENABLED |
false |
Enable background auto-polling for new tokens |
POLL_INTERVAL_SECONDS |
60 |
Seconds between auto-scan cycles |
PUMPFUN_ENABLED |
false |
Enable pump.fun token feed (ENABLE_PUMPFUN also accepted) |
RISK_ALERT_THRESHOLD |
65 |
Minimum risk score to trigger alerts |
SCAMHOUND_SOAK_MODE |
false |
Disable API usage charging during score soak period |
PORT |
8000 |
Dashboard server port |
Use SCAMHOUND_SOAK_MODE=true during score validation windows to avoid billing
while observing model quality. Monitor summary metrics with:
GET /api/soak/auditGET /api/_legacy/soak/auditGET /api/soak/audit/samples(manual spot-check sample set)
Generate a local soak report from SQLite:
python scamhound/soak_report.py --summary-limit 200 --sample-limit 50βββββββββββββββββββββββββββββββββββββββββββββββββββ
β Platform Router β
β (Bags.fm β pump.fun β LetsBonk β Moonshot) β
βββββββββββββββββββ¬ββββββββββββββββββββββββββββββββ
β new tokens
βΌ
βββββββββββββββββββββββββββββββββββββββββββββββββββ
β Enrichment Layer β
β Helius (on-chain) β Birdeye (market) β BMaps β
βββββββββββββββββββ¬ββββββββββββββββββββββββββββββββ
β enriched data
βΌ
βββββββββββββββββββββββββββββββββββββββββββββββββββ
β AI Scoring Engine β
β Claude / DeepSeek β Risk Score 0-100 β
βββββββββββββββββββ¬ββββββββββββββββββββββββββββββββ
β scored tokens
βΌ
βββββββββββββββββββββββββββββββββββββββββββββββββββ
β Delivery Layer β
β Dashboard β API β WebSocket β Twitter β Widget β
βββββββββββββββββββββββββββββββββββββββββββββββββββ
| Tier | Daily Calls | Features |
|---|---|---|
| Free | 50 | Manual scan, dashboard access |
| Builder | 500 | + Batch scan, search/filter API |
| Pro | 5000 | + Watchlist, score history, priority support |
See deploy/README.md for full instructions. Quick summary:
# On VPS (Ubuntu 22.04)
cd /opt/scamhound
git pull
systemctl restart scamhound
journalctl -u scamhound --no-pager -n 10Why isn't auto-scanning running?
Set AUTO_SCAN_ENABLED=true in your .env. It defaults to false to prevent accidental API credit usage.
How do I switch to DeepSeek (cheaper)?
Set LLM_PROVIDER=deepseek and DEEPSEEK_API_KEY=your_key in .env.
Why did a token's score change? ScamHound re-scores tokens every 24 hours. Check the score history chart on the token detail page.
MIT