DEV Community

Bryan MARTIN
Bryan MARTIN

Posted on • Originally published at rektradar.io

Build an Ethereum rug-pull alert bot in 20 lines

A rug is a race, and dashboards lose it. By the time you alt-tab to a scanner, paste the address, and read the verdict, the liquidity is already in the deployer's wallet. The only thing that keeps up with a rug is another process - something that watches the chain for you and pings the instant a pool dies or a fresh high-risk contract deploys.

That is what the RektRadar API is for. It is live now: the same pipeline behind the web app - honeypot simulation, bytecode signatures, deployer graphs, liquidity and mempool analysis - exposed as a REST endpoint, a WebSocket stream, and signed webhooks, with an official TypeScript SDK on npm.

This post builds a working rug-pull alert bot in about 20 lines. First the one-call check, then the live stream, then how to wire it to Discord, Telegram, or your own trading bot.

The shape of the API

Three surfaces, one mental model:

  • REST - ask about one token, get a verdict. GET /v1/token/<address> returns a 0-100 risk score and the on-chain flags behind it. Targeted lookups are real-time for everyone.
  • Stream - subscribe to the firehose. A WebSocket pushes every new deploy, every completed analysis, every rug, as it happens.
  • Webhooks - same events, delivered to an HTTPS endpoint you own, HMAC-signed so you can trust them.

There is one rule that shapes the whole thing: real-time is the paywall. Everything is free, but the live flow (the stream and the rug feed) arrives on a ~10 minute delay on a free key and in real time on a paid one. A rug alert that is 10 minutes late is worthless to a trader, so that is exactly where the value - and the price - sits. Targeted /v1/token lookups are real-time for everybody. Every flow response carries an X-Data-Delay-Seconds header so you always know what you are looking at.

Get a key

Grab one from your account - no credit card for the free tier: app.rektradar.io/account#api-keys. Pass it as a Bearer token (or the X-API-Key header). No key at all still works - you just get anonymous, delayed access.

The one-call check

Before the bot, the simplest thing the API does: score a single contract. Here is a real honeypot, live on mainnet:

curl -H "Authorization: Bearer rr_live_xxx" \
  https://app.rektradar.io/v1/token/0x682d9d317a077305d36c1fcc9821734046d4de2b
Enter fullscreen mode Exit fullscreen mode
{
  "address": "0x682d9d317a077305d36c1fcc9821734046d4de2b",
  "score": 80,
  "flags": ["honeypot", "hidden_owner", "low_liquidity", "buy_failed", "sell_failed", "scam_factory_name"],
  "name": "BABY ASTEROID",
  "symbol": "BASTEROID",
  "analyzed_at": "2026-05-27T16:31:46.062Z"
}
Enter fullscreen mode Exit fullscreen mode

Same call through the SDK:

npm install @mik3fly-lab/rektradar-sdk
Enter fullscreen mode Exit fullscreen mode
import { RektRadar } from "@mik3fly-lab/rektradar-sdk";

const rr = new RektRadar({ apiKey: process.env.REKTRADAR_KEY });

const v = await rr.token("0x682d9d317a077305d36c1fcc9821734046d4de2b");
if (v.score >= 70) console.warn("high risk", v.flags);
Enter fullscreen mode Exit fullscreen mode

That is the on-demand half: you have an address, you want a verdict. The interesting half is not asking - it is being told.

The bot

Here is the whole thing. It opens the live stream, listens for two kinds of event - a token that just scored high-risk, and a pool that just got rugged - and fires an alert. About 20 lines:

import { connectStream } from "@mik3fly-lab/rektradar-sdk";
import WebSocket from "ws";

connectStream({
  apiKey: process.env.REKTRADAR_KEY,   // paid key = live; omit it and events arrive ~10 min late
  events: ["token_scored", "rug"],
  WebSocket,                            // Node needs the 'ws' package; browsers use the built-in
  onOpen: () => console.log("watching Ethereum for rugs and high-risk deploys..."),
  onMessage: (e) => {
    if (e.type === "rug") {
      alert(`RUG: ${e.data.symbol ?? e.data.address} - liquidity pulled`);
    } else if (e.type === "token_scored" && e.data.score >= 70) {
      alert(`HIGH RISK (${e.data.score}/100): ${e.data.symbol} - ${e.data.flags?.join(", ")}`);
    }
  },
});

function alert(line) {
  console.log(new Date().toISOString(), line);
  // swap this for a Discord/Telegram webhook, a phone push, or a halt on your trading bot
}
Enter fullscreen mode Exit fullscreen mode

Run it with a paid key and the alerts land in real time - roughly 10-12 events a minute across the whole chain, the moment they happen. Run it with no key, or a free one, and the exact same alerts arrive on a ~10 minute delay, which is fine for a research log and useless for front-running a rug. That difference is the entire pricing model in one apiKey field.

The alert() function is the part you make yours. A fetch to a Discord webhook. A Telegram sendMessage. A push notification. Or, if you run an auto-trading bot, a hard stop that refuses to buy anything the stream just flagged.

No always-on process? Use webhooks

If you would rather not babysit a long-lived WebSocket, register an HTTPS endpoint and RektRadar will POST the same events to it. Every delivery is HMAC-SHA256 signed, and the SDK verifies it for you:

import { verifyWebhook } from "@mik3fly-lab/rektradar-sdk";

app.post("/rektradar", express.raw({ type: "application/json" }), (req, res) => {
  const sig = req.header("X-RektRadar-Signature") ?? "";
  if (!verifyWebhook(req.body.toString(), sig, process.env.HOOK_SECRET)) {
    return res.sendStatus(401); // reject anything we did not sign
  }
  const { event, data } = JSON.parse(req.body.toString());
  if (event === "rug.detected" || event === "token.high_risk") notify(data);
  res.sendStatus(200);
});
Enter fullscreen mode Exit fullscreen mode

Same events, no open socket - perfect for a serverless function.

Plans and limits

API access is included in every plan. The free tier is genuinely useful for research, dashboards, and backtesting; the paid tiers buy you real time and headroom.

Plan Price /mo Data Quota Rate WS conns Webhooks
Free 0 ~10 min delayed 10k 10/min 1 1
Basic 19.99 real-time 50k 30/min 3 5
Premium 49.99 real-time + forensics 250k 120/min 10 20
Pro 99 real-time + SLA 1M 300/min 30 100

Full endpoint reference, the event catalogue, and the SDK source are on the docs: rektradar.io/developers.

The data was always there - 100+ flags across seven analyzers, scoring thousands of Ethereum tokens a day. Now you can build on it. Ship the bot, point alert() at your channel, and let the chain wake you up instead of the other way around.

Top comments (0)