View as markdown

Screener

Tickerbot is the stock market, in SQL. A stock screener is one WHERE clause on it, sent to /v2/scan.

A screener is one question asked of every ticker at once — exactly the shape of the computed table. The screener you'd otherwise assemble from a feed, a warehouse, and indicator math is a single SQL call.

1. Write the screen

A SQL WHERE clause over 421+ named signals and fundamentals — here: above the 200-day average, under 20× earnings, over $1B market cap, largest first.

curl -X POST "https://api.tickerbot.io/v2/scan" \
  -H "Authorization: Bearer YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "q": "above_sma_200 AND pe_ratio < 20 AND market_cap > 1e9",
        "order": "market_cap", "dir": "desc", "limit": 50,
        "columns": "ticker,price,pe_ratio,market_cap,rsi_14" }'
Response
{
  "as_of": "2026-08-21T10:50:32Z",
  "query": { … },
  "_meta": { "null_coverage": { … } },
  "count": 50,
  "results": [
    { "ticker": "GOOGL", "name": "Alphabet Inc. Class A Common Stock",
      "price": 342.98, "pe_ratio": 17.27, "market_cap": 4215903134942, "rsi_14": 45.83, … },
    { "ticker": "BRK.A", "name": "Berkshire Hathaway Inc.",
      "price": 843327.07, "pe_ratio": 14.77, "market_cap": 1070597613800, "rsi_14": 74.07, … },
    …
  ]
}

2. Save as a universe

A universe is a named ticker list — a user's watchlist as a resource. Reference it across the API by passing "universe": "my_watchlist" to various endpoints.

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

3. The row click

The table's rows come from the scan; a click on one wants the detail view. One call returns everything about that ticker.

curl "https://api.tickerbot.io/v2/tickers/AAPL" \
  -H "Authorization: Bearer YOUR_KEY"
Response
{
  "as_of": "2026-08-21T10:50:59Z",
  "ticker": "AAPL",
  "data": {
    "ticker": "AAPL",
    "name": "Apple Inc.",
    "exchange": "NASDAQ",
    "price": 311.77,
    "day_change_pct": 0.0015,
    "rsi_14": 49.36,
    "above_sma_200": true,
    "pe_ratio": 37.72,
    "at_52w_high": false,
    "market_cap": 4623874049400,
    …
  }
}

4. The screen that watches itself

Subscribe the same q and the saved screen stops being something you rerun — a webhook fires whenever the match set changes.

curl -X POST "https://api.tickerbot.io/v2/scan/subscribe" \
  -H "Authorization: Bearer YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "q": "above_sma_200 AND pe_ratio < 20 AND market_cap > 1e9",
        "target_url": "https://your-app.example.com/hook" }'
Response
{
  "id": "wh_z1E8FUA-8ZE",
  "q": "above_sma_200 AND pe_ratio < 20 AND market_cap > 1e9",
  "channel": "webhook",
  "target_url": "https://your-app.example.com/hook",
  "signing_secret": "whsec_…",
  "status": "active",
  "test_url": "/v2/webhooks/wh_z1E8FUA-8ZE/test",
  …
}

The calls behind it

All build guides