Build a trading algorithm, with Tickerbot.

An algorithm is a condition and a loop: what to look for, and what to do when it appears. Tickerbot supplies the condition side as infrastructure — every ticker × every signal as one computed SQL table — so the loop becomes one query in three tenses. Your strategy, your broker; the data layer is done.

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

the recipe

One condition, three tenses.

1. Define the entry conditiona SQL WHERE clause over named, precomputed columns —421+ signals plus the fundamentals. This is the whole market evaluated in one call, right now:

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

2. Validate it historicallythe same query with ?asof= reruns it against the market as it was at that moment — delisted tickers included, no survivorship bias, unlimited depth on every plan. Walk it across dates and you have a candidate history for your backtest:

curl -s -X POST "https://api.tickerbot.io/v2/scan?asof=2024-01-05" \
  -H "Authorization: Bearer $TICKERBOT_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "q": "rsi_14 < 30 AND above_sma_200 AND market_cap > 1e9" }'

3. Run it livesubscribe the same query as a webhook. It fires when the match set changes — a ticker entering your condition is your signal to decide; your handler runs the strategy and routes any order to your broker:

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

4. Write the algorithmthe strategy itself is a webhook handler — and this is the part that stays yours. The payload’s matches are the tickers that just entered your condition; current_matches is everything matching right now — so entries and exits both fall out of one delivery. (Payload lists cap at 100 rows; at scale, confirm any single position with GET /v2/tickers/{ticker}.)

// POST from Tickerbot whenever the match set changes:
// { "event": "webhook.fired",
//   "q": "rsi_14 < 30 AND above_sma_200 AND market_cap > 1e9",
//   "as_of": "2026-08-14T15:05:00Z",
//   "matches":         [ { "ticker": "RIOT", "rsi_14": 27.4, ... } ],
//   "current_matches": [ /* every ticker matching right now */ ] }

app.post('/hook', async (req, res) => {
  const { matches, current_matches } = req.body
  const matching = new Set(current_matches.map((r) => r.ticker))

  // ENTRIES — tickers that just entered the condition.
  // Sizing, risk, portfolio state: your strategy, not Tickerbot's job.
  for (const row of matches) {
    if (!portfolio.has(row.ticker) && passesRisk(row)) {
      await broker.buy(row.ticker, positionSize(row))  // your broker's API
    }
  }

  // EXITS — held positions whose entry condition no longer holds
  // (or subscribe a second webhook on your exit condition).
  for (const pos of portfolio.positions()) {
    if (!matching.has(pos.ticker) && exitRules(pos)) {
      await broker.sell(pos.ticker, pos.qty)
    }
  }

  res.sendStatus(200)
})

under the hood

The calls behind it.

POST /v2/scanThe condition, evaluated across the whole market — live or ?asof= any past moment
POST /v2/scan/subscribeThe same condition as a push — fires when tickers enter or leave the match set
GET /v2/tickers/{ticker}Everything about one ticker in one row — position context without extra calls
GET /v2/seriesAligned time series, up to 50 tickers × 25 columns — the backtest’s data side

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

Does Tickerbot execute trades?

No — Tickerbot is the data layer for your trading bot, not the bot. It tells you when the conditions you defined are met — live, at any past moment, or as a push. Deciding what to do and routing an order is your handler’s and your broker’s job. That boundary is deliberate: we sell the data layer, not the strategy and not execution.

Can I backtest a strategy with Tickerbot?

The as-of mechanism reruns any query against the market as it was at a past moment — the same q, the same grammar, with delisted tickers still present, so there’s no survivorship bias in your candidate sets. It’s unlimited-depth on every plan, including Free. For the time-series side of a backtest, GET /v2/series returns aligned history for up to 50 tickers × 25 columns per call.

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.