A new way to build a fintech app.

Tickerbot is the stock market, in SQL. A fintech app is three calls on it: a row per ticker that already carries every value, aligned series for the widgets, and a socket that pushes each recompute.

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

build it

Build a market dashboard.

A dashboard is rows, widgets, and freshness — three calls against one computed table: a row that already contains every signal, series that arrive pre-aligned, and a socket that pushes each recompute.

1. The rowOne call returns everything a ticker card or table row could show: price plus all 421+ computed signals.

curl "https://api.tickerbot.io/v2/tickers/AAPL" \
  -H "Authorization: Bearer YOUR_KEY"
{
  "as_of": "2026-08-21T13:00:18Z",
  "ticker": "AAPL",
  "data": {
    "ticker": "AAPL",
    "name": "Apple Inc.",
    "price": 312.14,
    "day_change_pct": 0.0027,
    "rsi_14": 49.68,
    "above_sma_200": true,
    …
  }
}

2. The widgetsWhatever a widget renders — a chart, a sparkline, a gauge, a table of history — /v2/series feeds it: up to 50 tickers × 25 columns on one aligned time grid.

curl "https://api.tickerbot.io/v2/series?tickers=AAPL,MSFT,NVDA&columns=close,rsi_14,volume_today&interval=1d&from=2026-01-01" \
  -H "Authorization: Bearer YOUR_KEY"
{
  "interval": "1d",
  "tickers": ["AAPL", "MSFT", "NVDA"],
  "columns": ["close", "rsi_14", "volume_today"],
  "count": 477,
  "series": {
    "AAPL": [
      { "t": "2026-01-02", "close": 271.01, "rsi_14": 43.79, "volume_today": 37838054 },
      …
      { "t": "2026-08-20", "close": 311.22, "rsi_14": 48.86, "volume_today": 25926977 }
    ],
    "MSFT": [ … ], "NVDA": [ … ]
  }
}

3. The freshnessHold a websocket open and each subscribed ticker's freshly-computed row arrives on every refresh cycle — the same record as GET /v2/tickers/{ticker}, pushed.

import WebSocket from 'ws'
const KEY = process.env.TICKERBOT_API_KEY
const rows = new Map()   // ticker → latest computed row: the dashboard's state

const ws = new WebSocket('wss://api.tickerbot.io/v2/stream')
ws.on('open', () => ws.send(JSON.stringify({ type: 'auth', api_key: KEY })))
ws.on('message', (buf) => {
  const frame = JSON.parse(buf.toString())
  if (frame.type === 'authed') {           // wait for the ack — subscribing in 'open' races auth
    ws.send(JSON.stringify({ type: 'subscribe', tickers: ['AAPL', 'MSFT', 'NVDA'] }))
  }
  if (frame.type === 'update') {           // { ticker, as_of, data }
    rows.set(frame.ticker, frame.data)     // full computed row — re-render from here
  }
})

4. Per-user watchlistsModel each user's watchlist as a universe and every surface scopes to it: the same list drives their table, their widgets, and their alerts.

curl -X POST "https://api.tickerbot.io/v2/universes" \
  -H "Authorization: Bearer YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "id": "watchlist_u123", "name": "u123 watchlist", "tickers": ["AAPL","NVDA"] }'
{
  "id": "watchlist_u123",
  "name": "u123 watchlist",
  "tickers": ["AAPL", "NVDA"],
  "size": 2,
  …
}

The calls behind it: GET /v2/tickers/{ticker} · GET /v2/series · WS /v2/stream · POST /v2/universes

questions

FAQ

What is Tickerbot?

The market as one computed table: 20,864+ tickers × 421+ signals, precomputed, refreshed continuously, and queried in SQL. Every read runs live, as of any past moment, or as a push. The main endpoints are /v2/tickers for one symbol’s full row, /v2/signals for every ticker matching a named signal, and /v2/scan for the whole market matching a SQL WHERE clause.

What does it cover?

Every US-listed equity plus rates, FX and crypto, with the full schema of 421+ signals computed for each ticker. The data refreshes continuously, and all-time history sits behind every column.

How is this different from other market data APIs?

A data API sells inputs (bars, ticks, statements) and leaves the derived values your product actually acts on for you to compute, refresh, and store, per symbol, continuously. Tickerbot sells the finished state: conditions like above_sma_200 are already columns, past answers are already reproducible, and the pipeline between raw data and product is the part you skip.

What makes Tickerbot useful to AI agents?

Computed state: 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. 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.

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, at 10,000 calls a month and 60 a minute. Paid plans start at $29/mo, remove the monthly cap, and raise the rate limit; webhooks and streaming come with them. 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.