Build a stock alert bot, with Tickerbot.

Every alert bot has the same two halves: watching the market, and saying something when a condition trips. Tickerbot is the watching half as infrastructure — write the condition in SQL, get a push when it fires — so the half you build is just the message.

Free plan. Every ticker, every signal, real-time data, all-time history.

the recipe

Write the condition. Get the push.

1. Test the conditionrun it as a scan first — the same grammar the alert will use, so you can see exactly who matches right now before subscribing anything:

curl -s -X POST https://api.tickerbot.io/v2/scan \
  -H "Authorization: Bearer $TICKERBOT_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "q": "volume_burst_3x AND day_change_pct > 5 AND market_cap > 1e9" }'

2. Subscribe itthe same q becomes a webhook. Tickerbot evaluates it continuously and POSTs your endpoint when tickers enter or leave the match set — no polling loop, no scheduler, no missed minutes:

curl -s -X POST https://api.tickerbot.io/v2/scan/subscribe \
  -H "Authorization: Bearer $TICKERBOT_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "q": "volume_burst_3x AND day_change_pct > 5 AND market_cap > 1e9",
        "target_url": "https://your-bot.example.com/hook" }'

3. Or skip the server entirelypass discord_url instead and Tickerbot posts a formatted embed straight to your Discord channel — a working alert bot with zero code and zero hosting:

curl -s -X POST https://api.tickerbot.io/v2/scan/subscribe \
  -H "Authorization: Bearer $TICKERBOT_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "q": "volume_burst_3x AND day_change_pct > 5 AND market_cap > 1e9",
        "discord_url": "https://discord.com/api/webhooks/…" }'

4. Write the botif you do run your own handler, the payload carries the matched tickers with the fields your condition referenced — format and forward to wherever your users live (Telegram, Slack, SMS, email):

app.post('/hook', async (req, res) => {
  for (const row of req.body.matches) {   // tickers that just tripped the condition
    await telegram.send(
      chatId,
      `${row.ticker} up ${row.day_change_pct.toFixed(1)}% on ${row.volume_today.toLocaleString()} shares`,
    )
  }
  res.sendStatus(200)
})

// Validate the receiver before it matters: POST /v2/webhooks/{id}/test
// sends a real-shape delivery with X-Tickerbot-Test: true.

under the hood

The calls behind it.

POST /v2/scan/subscribeAny SQL condition as an alert — fires when the match set changes
POST /v2/tickers/{ticker}/subscribeSingle-ticker shorthand — alert on one symbol’s state
GET /v2/webhooksThe registry — list, edit, disable, re-enable every alert
POST /v2/webhooks/{id}/testFire a real-shape test delivery at your receiver

Every read runs in three tenses: live, as of any past moment (add ?asof= — no survivorship bias), or on push — the same query as a webhook that fires when the answer changes. Under all of it sits the computed table: every US equity plus rates, FX and crypto, every signal precomputed and refreshed continuously, with all-time history. That pipeline — warehouse, indicator math, refresh, point-in-time storage — is the part you’d otherwise build before writing your first line of product. Buy it as a table instead — data included; there’s no feed to bring.

questions

FAQ

How fast do alerts fire?

Conditions are evaluated on the refresh cycle — every minute for equities during US market hours and 24/7 for crypto; fundamentals refresh daily. When the match set changes, the delivery goes out on that cycle. See refresh cadence for the per-signal detail.

Where can alerts be delivered?

Four channels: webhook (POST to your endpoint), discord (formatted embed, no server needed), in_app (the dashboard feed), and mobile_push (the Tickerbot companion app). One subscription, one channel; run several subscriptions to fan out.

Why does a trading system need computed state?

Because every action it takes — an alert, a screen result, an order, a row in a user-facing app — is a condition over derived values: RSI below 30, price above the 200-day average, volume three times normal. Raw data doesn’t contain those. Something has to compute and refresh them for every symbol, continuously, and keep the history so past answers are reproducible. That’s a data pipeline, not a feature — you either build and operate it, or query one that already runs.

How does Tickerbot work with AI agents?

Every call here is also a native tool call: install the MCP server and Claude, ChatGPT, Cursor, or any MCP runtime queries the market directly. Computed state is what makes that work well — hand a model raw data and its context window fills with math to do; hand it computed answers and the context goes to decisions. A scan returns the tickers matching your condition — a list, not a workload.

How does Tickerbot pricing work?

The Free plan needs no card and carries the full data side: every ticker, every signal, real-time data, all-time history and as-of queries. Paid plans start at $29/mo and add real-time webhooks, websocket streaming, and higher rate limits. Data depth is never a tier lever — every plan sees the same table.

in the wild

900K+ calls served, and counting.

What people are saying.

“dude. whoah.”
President, ShopifyHarley Finkelstein
“Tickerbot is insane. It turns Claude into a quant.”
Quantitative Finance MScLounes Vennema
“Best value for hobbyists and advanced traders alike.”
AI Engineer, ImergeRon Reid

get started

Get a key. Run a scan.

Free plan. Every ticker, every signal, real-time data, all-time history.