tickerbot.io
View as markdown
Data

Tables

The ticker table, 23,383+ tickers × 452+ signals, updated every minute with history back to 2003, and the tables around it: bars, events and news, plus ETF holdings. This page is the map; each has its own reference.

The ticker table

One row per ticker, one column per signal.

Each row is one tradeable instrument: every US-listed stock and ETF plus curated rates, FX, metals and crypto (Tickers). Each column is one signal: the raw data (price, volume, statement lines), values calculated from it (moving averages, RSI, ratios), and boolean conditions on top (above_sma_200, golden_cross) (Signals, with a reference page per signal). The pipeline recomputes the table continuously, so raw and computed values land in the same row; you run no feed, no storage, no indicator math.

Under the hood the table is the live row plus historized state: a daily row per ticker, with hourly and minute grains for session columns. You never query the history by name; ?asof= and series route to it. That is why depth and intraday availability vary per column, and why each column's reference page states the grains that carry it.

You read it four ways: a row (one ticker’s every signal, Tickers), a column (every ticker where one signal holds, Signals), a scan (every ticker matching a WHERE clause, Scan), and a series (any tickers’ columns over time, Series).

The other tables

The per-ticker state table is the primary surface: reach for it whenever the question is "what is true of this ticker (now, or as of a moment)". The three shapes below answer different questions: bars when you want the raw OHLCV record rather than computed state, events when you want the timeline of discrete happenings, and news when you want searchable article text. Same rule everywhere: the columns below are the grammar.

Bars

ColumnTypeDescription
tickertextsymbol (key)
tbigintbar start (epoch ms, key)
onumericopen
hnumerichigh
lnumericlow
cnumericclose
vbigintvolume
vwnumericvolume-weighted average price
nintegertrade count

Events

ColumnTypeDescription
tickertextSymbol the event belongs to.
tstimestamptzWhen the event occurred.
kindtextEvent kind (earnings, dividend, split, insider, analyst, signal, news…).
payloadjsonbKind-specific fields.

News

ColumnTypeDescription
idbigintArticle id (primary key).
urltextCanonical article URL — the dedup key (UNIQUE index).
time_publishedtimestamp with time zonePublication timestamp.
titletextHeadline.
summarytextArticle summary.
sourcetextPublisher name.
source_domaintextThe publisher's web domain, or its name when the domain isn't known.
categorytextThe source's section for the article, e.g. `General`. Often null.
authorsjsonbAuthor list.
topicsjsonbTopic tags, each with a relevance score from 0 to 1 given as a string: `[{"topic": "earnings", "relevance_score": "0.94"}]`.
banner_imagetextBanner image URL (~80% of recent articles carry one).
overall_sentiment_scorenumericArticle-level sentiment score (−1..1).
overall_sentiment_labeltextBearish…Bullish label for the score.
tickerstext[]Every company the article mentions. How much the article is about each one is in `ticker_data.<TICKER>.rel`.
ticker_datajsonbPer-company scores, keyed by ticker: `{"AAPL": {"rel": 0.88, "sent_score": 0.11, "sent_label": "Neutral"}}`. `rel` (0 to 1) is how much the article is about that company; `sent_score` (−1 to 1) and `sent_label` are its sentiment toward that company. Some articles carry a label without a score (`sent_score` null).
created_attimestamp with time zoneWhen Tickerbot stored the article. Use it to poll for new articles: time_published can be older for articles filled in after the fact.

Machine-readable

The ticker table’s columns and the bars ship as JSON at /docs/schema.json, and every route is in the OpenAPI spec. Agents can start from /llms.txt.