Crypto Price Alert Bot Telegram: Trader's Complete Guide
Learn to build and use a crypto price alert bot on Telegram. Monitor live prices from Binance, Bybit, and OKX — and never miss a key trade setup again.
Learn to build and use a crypto price alert bot on Telegram. Monitor live prices from Binance, Bybit, and OKX — and never miss a key trade setup again.
Missing a 20% breakout because you stepped away from the screen is one of crypto's most punishing experiences. A crypto price alert bot on Telegram eliminates this problem: it monitors live market prices around the clock and sends you an instant message the moment your target is hit — no matter where you are. Telegram became the standard channel for these alerts because the Bot API is completely free, messages arrive in under a second, and the app runs on every device you own. Whether you trade on Binance, manage perpetuals on Bybit, or hunt mid-caps on OKX and KuCoin — a single Telegram bot can watch them all simultaneously, firing alerts tailored to your exact conditions.
Exchange-native alert systems — like the ones built into Binance or Bybit — are convenient but fundamentally limited. They only track assets on their own platform, deliver notifications through push alerts that can be silenced or missed, and offer almost no customization beyond basic price thresholds. A dedicated Telegram crypto price bot operates on a completely different level.
Telegram's Bot API supports real-time message delivery, rich text formatting, interactive command handling, and inline keyboards — all free of charge. You can build a bot that monitors Bitcoin on Binance, Ethereum on OKX, and a small-cap altcoin on KuCoin simultaneously, then sends a formatted alert the instant any of them crosses your target. The same bot receives commands back from you — letting you add alerts, query current prices, or cancel notifications without opening a browser or leaving Telegram. That interactivity is what separates a good alert bot from a simple notification script.
The architecture of a Telegram price alert bot has three core layers: a price feed that pulls live market data from exchange APIs, an alert engine that evaluates your conditions against that data on a regular interval, and a delivery layer that sends the Telegram message when a condition triggers. Understanding how these pieces connect matters — it is the difference between a bot that works reliably for months and one that silently fails at 3am and misses your target.
Most bots poll the exchange REST API on a fixed schedule, typically every 10 to 60 seconds. For latency-sensitive strategies — scalping entries, for example — you can subscribe to WebSocket streams instead, which push price updates the instant a trade executes. Binance and Bybit both offer robust WebSocket price feeds. The alert engine then compares the incoming price against your stored conditions and fires through the Telegram Bot API when the condition evaluates true. Triggered alerts are removed from the active list so you don't get flooded with repeat messages.
| Component | Role | Common Tools |
|---|---|---|
| Price Feed | Fetches live market data from exchanges | Binance API, CCXT, WebSockets |
| Alert Engine | Evaluates trigger conditions against live prices | Python asyncio, Node.js |
| Notification Layer | Sends messages to Telegram chats | python-telegram-bot, aiogram |
| Storage | Persists user alerts across restarts | SQLite, Redis, PostgreSQL |
Start by creating a bot through BotFather on Telegram — search for @BotFather, send /newbot, and follow the prompts. You will receive an API token that identifies your bot. Next, install the required libraries: pip install python-telegram-bot aiohttp. The example below sets up the core command handlers that let users register price alerts directly from the Telegram chat. The bot stores alert data in bot_data, which persists for the lifetime of the running process.
import asyncio
from telegram import Update
from telegram.ext import Application, CommandHandler, ContextTypes
BOT_TOKEN = "your_bot_token_here"
async def start(update: Update, context: ContextTypes.DEFAULT_TYPE):
await update.message.reply_text(
"Crypto Alert Bot ready!\n"
"Commands:\n"
"/alert BTC 65000 - alert when BTC hits $65,000\n"
"/alerts - list active alerts\n"
"/cancel BTC - remove an alert"
)
async def set_alert(update: Update, context: ContextTypes.DEFAULT_TYPE):
args = context.args
if len(args) < 2:
await update.message.reply_text("Usage: /alert ")
return
symbol = args[0].upper()
try:
target_price = float(args[1].replace(",", ""))
except ValueError:
await update.message.reply_text("Invalid price — use a plain number like 65000")
return
if "alerts" not in context.bot_data:
context.bot_data["alerts"] = {}
context.bot_data["alerts"][symbol] = {
"target": target_price,
"chat_id": update.effective_chat.id
}
await update.message.reply_text(
f"Alert set: notify me when {symbol} reaches ${target_price:,.2f}"
)
async def list_alerts(update: Update, context: ContextTypes.DEFAULT_TYPE):
alerts = context.bot_data.get("alerts", {})
if not alerts:
await update.message.reply_text("No active alerts.")
return
lines = ["Active alerts:"]
for sym, data in alerts.items():
lines.append(f" {sym}: ${data['target']:,.2f}")
await update.message.reply_text("\n".join(lines))
def main():
app = Application.builder().token(BOT_TOKEN).build()
app.add_handler(CommandHandler("start", start))
app.add_handler(CommandHandler("alert", set_alert))
app.add_handler(CommandHandler("alerts", list_alerts))
app.run_polling()
if __name__ == "__main__":
main()
Never hardcode your BOT_TOKEN in source files. Use os.environ.get('BOT_TOKEN') and load it from a .env file with python-dotenv. If you accidentally commit a token to Git, regenerate it immediately in BotFather with /revoke.
The command handlers above register alerts, but nothing is actually checking prices yet. You need an async monitoring loop that runs in the background alongside the bot, polling an exchange API on a fixed interval and triggering Telegram messages when conditions are met. The example below uses aiohttp for async HTTP requests against Binance's public price endpoint — no API key needed for basic ticker data. It checks all registered alerts every 30 seconds and cleans up triggered ones so users don't get repeat notifications.
import asyncio
import aiohttp
from telegram import Bot
BINANCE_URL = "https://api.binance.com/api/v3/ticker/price?symbol={symbol}USDT"
async def fetch_price(session: aiohttp.ClientSession, symbol: str) -> float:
url = BINANCE_URL.format(symbol=symbol)
async with session.get(url) as resp:
data = await resp.json()
return float(data["price"])
async def check_alerts(bot: Bot, alerts: dict):
triggered = []
async with aiohttp.ClientSession() as session:
for symbol, data in list(alerts.items()):
try:
price = await fetch_price(session, symbol)
target = data["target"]
if price >= target:
await bot.send_message(
chat_id=data["chat_id"],
text=(
f"ALERT: {symbol} reached ${price:,.2f}\n"
f"Your target: ${target:,.2f}\n"
f"Source: Binance spot"
)
)
triggered.append(symbol)
except Exception as e:
print(f"Error checking {symbol}: {e}")
for sym in triggered:
del alerts[sym]
async def monitoring_loop(bot: Bot, alerts: dict, interval: int = 30):
while True:
if alerts:
await check_alerts(bot, alerts)
await asyncio.sleep(interval)
To wire this into your bot, run monitoring_loop as a background asyncio task using the application's post_init hook or by passing it as a coroutine alongside run_polling. The 30-second interval is a safe default for most swing trading strategies. If you need faster response for volatile altcoins, dropping to 10 seconds still stays well within Binance's public API rate limits. For scalping-level sensitivity on Bybit or OKX, switch the price feed to a WebSocket stream rather than polling — you will get sub-100ms update latency instead of waiting for the next poll cycle.
Binance dominates liquidity for major pairs, but many altcoins only have meaningful volume on Gate.io, KuCoin, or Bitget. The CCXT library solves this with a unified Python interface covering over 100 exchanges — the same method names and response format work regardless of which exchange you are querying. Install it with pip install ccxt, then build a multi-exchange price aggregator. This turns your bot into a genuine crypto price tracker bot for Telegram, one that can compare the same asset across Binance, Bybit, OKX, and KuCoin simultaneously.
import ccxt
def build_exchange_clients() -> dict:
return {
"binance": ccxt.binance(),
"bybit": ccxt.bybit(),
"okx": ccxt.okx(),
"kucoin": ccxt.kucoin(),
}
def fetch_all_prices(symbol: str, clients: dict) -> dict:
results = {}
pair = f"{symbol}/USDT"
for name, exchange in clients.items():
try:
ticker = exchange.fetch_ticker(pair)
results[name] = {
"last": ticker["last"],
"bid": ticker["bid"],
"ask": ticker["ask"],
}
except ccxt.BaseError as e:
results[name] = {"error": str(e)}
return results
def format_price_message(symbol: str, clients: dict) -> str:
prices = fetch_all_prices(symbol, clients)
valid = {k: v for k, v in prices.items() if "error" not in v}
lines = [f"Live prices for {symbol}:"]
for name, data in valid.items():
lines.append(f" {name.capitalize()}: ${data['last']:,.4f}")
if valid:
cheapest = min(valid.items(), key=lambda x: x[1]["ask"])
lines.append(
f"\nBest ask: {cheapest[0].capitalize()} @ ${cheapest[1]['ask']:,.4f}"
)
return "\n".join(lines)
# Usage
clients = build_exchange_clients()
print(format_price_message("ETH", clients))
This aggregator handles errors gracefully — if a symbol is not listed on KuCoin or OKX returns a temporary error, the bot continues running and simply omits that exchange from the output. Replace the single Binance fetch in the monitoring loop from the previous section with a call to fetch_all_prices and you now have a cross-exchange alert engine. You can extend the condition logic to trigger when the price diverges by more than a set percentage between Binance and OKX — a useful signal for arbitrage windows or liquidity-driven moves.
For traders who want curated signals layered on top of price data, platforms like VoiceOfChain aggregate real-time trade signals across multiple exchanges. Feeding those signals into your Telegram bot alongside raw price alerts gives you both context and execution timing in one place.
A Telegram price alert bot transforms passive price watching into an active, automated trading assistant. The three code examples above cover the full stack: an interactive command interface that traders control from Telegram, an async monitoring loop that polls Binance prices every 30 seconds, and a multi-exchange aggregator built on CCXT that covers Bybit, OKX, KuCoin, and beyond with identical code. Combined with real-time signal platforms like VoiceOfChain, which layer trade context on top of raw price data, you end up with an alert system that tells you not just when a price moved but whether that move is worth acting on. Deploy to a $5 VPS, configure systemd for automatic restarts, and your crypto price tracker bot for Telegram will keep watch around the clock — no screen time required.