← tickerbot.io
View as markdown
Concepts

Schema

One wide precomputed table of the entire market: 21,082+ tickers × 427+ columns we call signals, plus the bars, events, news and ETF shapes around it. This page is the map; each axis has its own reference.

One wide table

One logical table. Rows are instruments, columns are signals.

Each row is one tradeable instrument: every US-listed equity plus curated rates, FX, metals and crypto (Tickers). Each column is one signal, from raw price and volume through indicators, fundamentals and insider activity (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.

Which endpoint reads which shape is on the Introduction.

The other queryable 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 — OHLCV history (9 columns)

Served by the bars endpoint at day, hour, and minute resolution (hour/minute share this shape).

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

The events projection — the events grammar

Every event, regardless of kind, projects onto one shape; kind-specific detail lives in payload (queryable as payload->>'field'). The kinds: earnings, dividends, splits, insider transactions, analyst actions, plus opt-in signal firings and news — each kind's page documents its payload schema.

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

news_article — the news grammar (15 columns)

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_domaintextPublisher domain.
categorytextAV category within the source.
authorsjsonbAuthor list.
topicsjsonbTopic tags with relevance scores.
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[]Tickers the article mentions.
ticker_datajsonbPer-ticker relevance + sentiment payload.

Machine-readable

The same schema ships as JSON at /docs/schema.json, and every route is in the OpenAPI spec. Agents can start from /llms.txt.