Build guide

Build a crypto whale alert bot for X
big transfers, posted as they land

Watch the chain for transfers above your threshold, name the wallets you know, and post each one to X within a minute. Free on-chain data, a 40-line script, and no X developer account.

Card required, cancel any time.

The short answer

Poll Etherscan's free V2 tokentx endpoint (or mempool.space for Bitcoin) every 30 seconds, keep transfers above your threshold, swap known addresses for names like "Binance", and send each one to POST https://opentweet.io/api/v1/posts with publish_now. Do not repost Whale Alert's feed: its terms forbid publishing its data without permission. On-chain data is public.

Whale accounts are some of the biggest on crypto X: @whale_alert has 2.8M followers and @lookonchain 711K. Their posts become the news: on October 27-28, 2026, whales moving about $500M of BTC to Coinbase Prime was reported straight from Lookonchain and Arkham alerts. A niche whale account (one chain, one token, one set of wallets) is still open. Accounts posting on-chain moves already run on OpenTweet.

Six alerts a whale account posts

Pick one or two. The accounts people follow are predictable: same format, same threshold, every time.

Big transfer

Live

Amount, token, from and to. The classic whale alert. One post per transfer above the threshold.

Exchange flow

Live

Coins moving into an exchange (possible selling) or out of one (possible holding). Label the side you know.

Dormant wallet wakes up

Live

A wallet untouched for years moves coins. On October 13, 2026 one moved 4,582 BTC after six years.

Stablecoin mints and burns

Live

New USDT or USDC printed or burned at the issuer. Traders watch these as liquidity signals.

Daily flow recap

Daily

Net exchange inflow and the five largest moves of the day, posted at a fixed time. Fits Pro even on busy days.

Wallet watchlist

Live

A fund, a treasury company or a known trader. Every move they make, nothing else.

Where the data comes from

Prices and limits checked October 29, 2026 on each provider's pricing page. Start with a free one; pay only when you add chains.

SourceChainsFree tier and priceBest for
Etherscan API V260+ EVM chains, one key3 calls/s, 100K/day; BNB, Base, OP, Avalanche paid (from $49/mo)Big token transfers on Ethereum, Arbitrum, Polygon
mempool.spaceBitcoinFree REST and WebSocket, no key; limits not publishedBTC moves to and from exchange wallets
Alchemy Address Activity30+ EVM chains and SolanaFree tier with 5 webhooks; up to 100,000 addresses per webhookWatching a fixed list of whale or exchange wallets
Helius webhooksSolana1M credits a month free; 1 credit per webhook eventSolana whales and large token swaps
Arkham APIMulti-chain, with entity labelsBy request; plans from $100/mo in creditsNaming who moved it
Whale Alert API14 chains$29.95/mo, personal use only; Enterprise $699/moReading alerts, not reposting them (see terms)

A USDT whale bot in 40 lines

Every 30 seconds it asks Etherscan for the latest USDT transfers on Ethereum, keeps the ones above $10M, replaces known addresses with names, and posts each new one. It remembers the last block and the hashes it posted, so a restart never double-posts. No URL in the text, so no alert is a link post.

Python

import json, pathlib, time, requests

ES_KEY = "your_etherscan_key"
OT_KEY = "ot_your_key"
USDT = "0xdAC17F958D2ee523a2206206994597C13D831ec7"   # Tether on Ethereum
MIN_USD = 10_000_000
LABELS = {                       # your own list, lowercase addresses
    "0x...": "Binance",
    "0x...": "Coinbase",
}
STATE = pathlib.Path("whale_state.json")
state = json.loads(STATE.read_text()) if STATE.exists() else {"block": 0, "seen": []}

def who(addr):
    return LABELS.get(addr.lower(), f"unknown wallet {addr[:6]}…{addr[-4:]}")

while True:
    r = requests.get("https://api.etherscan.io/v2/api", params={
        "chainid": 1, "module": "account", "action": "tokentx",
        "contractaddress": USDT, "startblock": state["block"],
        "sort": "desc", "page": 1, "offset": 1000, "apikey": ES_KEY,
    }).json()
    txs = r["result"] if isinstance(r.get("result"), list) else []
    for tx in reversed(txs):     # oldest first
        amount = int(tx["value"]) / 10 ** int(tx["tokenDecimal"])
        if amount < MIN_USD or tx["hash"] in state["seen"]:
            continue
        text = (f"{amount:,.0f} #USDT (${amount / 1e6:,.1f}M) moved\n"
                f"from {who(tx['from'])}\nto {who(tx['to'])}\n\n"
                f"tx {tx['hash'][:10]}…")
        requests.post("https://opentweet.io/api/v1/posts",
                      headers={"Authorization": f"Bearer {OT_KEY}"},
                      json={"text": text, "publish_now": True})
        state["seen"] = (state["seen"] + [tx["hash"]])[-500:]
    if txs:
        state["block"] = max(int(t["blockNumber"]) for t in txs)
    STATE.write_text(json.dumps(state))
    time.sleep(30)               # 2 Etherscan calls a minute, far under the free limit

What it posts

25,000,000 #USDT ($25.0M) moved
from unknown wallet 0x3f5c…a91e
to Binance

tx 0x8a1d77c2…

For another token, change the contract address. For another EVM chain, change chainid. Every OpenTweet field is in the API reference.

Add context with an AI agent

A raw alert says what moved. The posts that get quoted say what it might mean. Keep the live alerts in code, and once a day let Claude, ChatGPT or Cursor, connected to the OpenTweet MCP server, read your bot's log and write the recap:

"Here are today's alerts. Write a five-post thread: net flow into exchanges, the largest move, any dormant wallet, and one sentence on what traders usually read into it. No price predictions, no links. Schedule it for 21:00 UTC."

Keep predictions out. "Moved to an exchange" is a fact; "about to dump" is a guess that ages badly.

Which plan fits your bot

Flat monthly price, no per-post fee. The deciding number is how many alerts a day your threshold lets through.

SetupTypical volumePlan
One token, high threshold, plus a daily recapUp to 20 posts a dayPro, $19.99/mo
Several chains or a busy tokenUp to 100 posts a day, 3 X accountsAdvanced, $29/mo
A network of chain-specific whale accountsUp to 300 posts a day, 10 X accountsAgency, $49/mo

Posts with a URL (an explorer link, even a bare domain) count toward link posts: Pro 1 a day, Advanced 10, Agency 20, plus link credits. On the X API directly, a post with a URL costs $0.20 against $0.015 for a plain one. See pricing.

Use public data, not someone's feed. Whale Alert's terms forbid publishing its data without written permission. Etherscan's free plan is for personal and research use, so read its terms before you monetize the account.

Label it as a bot. X's developer guidelines ask automated accounts to turn on the Automated label and say in the bio who runs them. Never auto-reply alerts under other people's posts.

No paid shilling without the label. X allows paid crypto promotion again only with the Paid Partnership label, and not in the EU, UK or Australia. X also bans apps that pay people to post ("InfoFi") since January 2026. More in X automation rules.

Not financial advice, and say so. A transfer to an exchange is not always a sale: exchanges move coins between their own wallets all day. Label internal moves, or filter out transfers where both sides are the same exchange.

Frequently asked questions

How do I build a whale alert bot for X?

Watch a chain for transfers above a threshold, label the wallets you recognize, and post each hit to POST https://opentweet.io/api/v1/posts with publish_now. For Ethereum tokens, poll the Etherscan V2 tokentx endpoint every 30 seconds; for Bitcoin, use the mempool.space API; to watch specific wallets, use an Alchemy or Helius webhook. OpenTweet posts through a normal X login, so you do not need an X developer account.

Can I repost Whale Alert's alerts on my own X account?

Not as a feed. Whale Alert's terms (updated October 2, 2026) say you may not circulate, reproduce or publish its data in any form without written permission. The one exception is sharing alerts and graph images with the Whale Alert watermark and URL left intact. Its Alerts API ($29.95 a month) is labelled personal use only. Build from public chain data instead: Etherscan, mempool.space and node webhooks carry no such restriction.

Is the Etherscan API free for a whale bot?

For Ethereum and many other chains, yes. Etherscan's free plan allows 3 calls per second and up to 100,000 calls a day, labelled personal and research use. One V2 key covers 60+ chains through a chainid parameter, but BNB Smart Chain, Base, OP Mainnet, Avalanche and a few others need a paid plan, from $49 a month. The old V1 API was shut down on August 15, 2025.

How do I track Bitcoin whale transactions for free?

mempool.space has a free REST and WebSocket API. Track an address set (exchange wallets, a known whale) over wss://mempool.space/api/v1/ws, or read each new block's transactions from the REST API and keep outputs above your threshold. It publishes no rate limits but returns 429 and can ban clients that overdo it, so poll per block, not per second.

How do I know a wallet belongs to an exchange?

Keep your own label list: exchange hot and cold wallets are public on block explorers and in open-source label sets, and your followers will tell you when one is wrong. Arkham sells entity labels through its API (request access, plans start at $100 a month in credits), and it describes its attribution as probabilistic, so say "likely" when a label is a guess.

Should the alert link to the transaction?

It is a cost choice. A post with a URL counts toward OpenTweet link posts (Pro 1 a day, Advanced 10, Agency 20, plus credits), and on the X API it costs $0.20 against $0.015 for a plain post. A bare domain like etherscan.io counts as a link too. Most whale accounts post the amount, the token and the wallets, and put the hash in the text without a URL.

How many alerts a day can the bot post?

Pro publishes up to 20 posts a day, Advanced 100 and Agency 300. Set the threshold so a normal day fits: $10M+ for USDT on Ethereum, or a fixed list of wallets you watch. An account that posts every $1M transfer is noise, and followers mute it.

Posting headlines and price moves instead? See the crypto news bot. Watching one thing and posting when it changes? See the X alert bot.

Everything you can build on X with OpenTweet

Post to X from your code, a watcher, or an AI agent. Start anywhere in the cluster.

OpenTweet vs the X API

Post, schedule, and automate X without a developer account or the $200/mo minimum.

X DM outreach, human-approved

Find and qualify leads, AI-draft DMs, approve each one, and drip-send from your own account via API or MCP.

Post to X without an API

The clean, account-safe way to post to X from your code or an AI agent.

Twitter MCP Server

Give Claude, Cursor, and OpenClaw the ability to post to X. 44 tools included.

Developer docs

Quickstart, API keys, MCP setup, and the REST reference for posting to X from code or an agent.

Cross-posting reference

One call posts to X, Bluesky and LinkedIn. The platforms field, per-network results, and why a network gets skipped.

Social media API for AI agents

Three ways an agent can post to X, Bluesky and LinkedIn, and the trade-offs of each.

LinkedIn MCP server

Post and schedule to a LinkedIn profile from Claude or Cursor through the official LinkedIn API.

XMCP vs OpenTweet

X's official MCP server bills per API call and cannot schedule. Compare it with the flat-fee hosted MCP.

MCP for AI agents

Connect your AI client to X in under two minutes, no X developer account.

Developer API and keys

REST endpoints, one bearer key, and usage tracking. Build on OpenTweet.

OpenTweet for AI agents

The posting layer for autonomous agents and automations that live on X.

Build an AI Twitter persona

Give your AI agent its own X account. Setup, cadence, and the rules that keep it safe.

Best MCP servers for social media

The 2026 ranked list. How the hosted OpenTweet MCP compares with the official X MCP and others.

Best API to post to X

Seven options priced at real volumes, and why links decide the bill.

Cheapest way to post to X via code

Flat fee vs pay-per-use. Why the $0.20 per-link fee flips the math past ~145 link posts a month.

X API pricing 2026

Every pay-per-use X API endpoint price from docs.x.com in one searchable table.

Bluesky posting API

Post and schedule to Bluesky with one REST call and OAuth, and cross-post to X and LinkedIn in the same request.

Automate LinkedIn posts

Post to LinkedIn from an AI agent, n8n or a script through the official Posts API, with one REST or MCP call.

The next whale, posted in a minute

Connect X, create a key, and point your watcher at it.