Signal catalog
Every signal in three layers: the raw data as recorded, what’s calculated from it, and the boolean conditions on top, grouped by how far each is derived from the raw tape. Click any name for its full reference page.
Price
Price levels and records: quotes, bars, session levels, rolling highs and lows, and the signals those levels own.
Trades & quotes
Last trade and the current quote: price, bid/ask, and depth.
| Column | Type | Description |
|---|---|---|
price | numeric | Current price: the newest source we hold for the ticker, in a fixed order; price_source says which one. |
Latest bars
OHLC of the latest minute bar and the prior session's daily bar.
| Column | Type | Description |
|---|---|---|
min_close | numeric | Current minute bar’s most-recent close (last print). |
min_high | numeric | Current minute bar’s running high. |
min_low | numeric | Current minute bar’s running low. |
min_open | numeric | Current minute bar’s open. Updates every snapshot tick during market hours. |
prev_day_high | numeric | Previous trading day’s session high. |
prev_day_low | numeric | Previous trading day’s session low. |
prev_day_open | numeric | Previous trading day’s official open. |
previous_close | numeric | Official prior-session close. |
price_asof | timestamp with time zone | The time of the data behind the price. |
price_source | text | Where the row's price came from. |
Session levels & position
Today's session levels (open, high, low) and where price sits relative to them and yesterday's landmarks.
| Column | Type | Description |
|---|---|---|
afterhours_price | numeric | Last after-hours price, if available. |
premarket_price | numeric | Last premarket price, if available. |
session_high | numeric | Highest trade so far today. |
session_low | numeric | Lowest trade so far today. |
session_open | numeric | Today’s opening print. |
above_premarket_high | state | Close above the pre-market session high.close > max(price[04:00..09:30]) |
above_session_open | state | Close above today’s session-open price.close > open_0930 |
above_yesterday_close | state | Close above the prior session’s close.close > close_prev |
above_yesterday_high | state | Close above the prior session’s intraday high.close > high_prev |
at_session_high | state | At today’s intraday session high (within tolerance).price >= session_high * 0.999 |
at_session_low | state | At today’s intraday session low (within tolerance).price <= session_low * 1.001 |
below_premarket_low | state | Close below the pre-market session low.close < min(price[04:00..09:30]) |
below_yesterday_low | state | Close below the prior session’s intraday low.close < low_prev |
tested_session_high_recent | state | Price touched today’s session high within the last 5 minutes.max(close, last 5 min) >= session_high * 0.999 |
tested_session_low_recent | state | Price touched today’s session low within the last 5 minutes.min(close, last 5 min) <= session_low * 1.001 |
Highs & lows
Rolling-window highs and lows (5-day, 20-day, 52-week), their dates and distances, and the at/approaching/breaking signals those levels own.
| Column | Type | Description |
|---|---|---|
days_since_52w_high | integer | Trading days since the most recent 52-week high. |
days_since_52w_low | integer | Trading days since the most recent 52-week low. |
from_52w_high_pct | numeric | Percent distance from the 52-week high, as a whole percent. Signed: negative below the high (â27 = 27% under it), 0 at it, positive only on a new high before the window updates. Use the `at_52w_high` boolean to test highs. Was `pct_from_52w_high` as a fraction before the 2026-09-07 cutover. |
from_52w_low_pct | numeric | Percent distance above the 52-week low, as a whole percent (22 = 22% above it). Signed; ⥠0 except at a new low before the window updates. Use the `at_52w_low` boolean to test lows. |
high_20d | numeric | Highest trade in the trailing 20 trading days. |
high_20d_eod | numeric | Highest close over the last 20 trading sessions. Close-basis. For the intraday-wick variant use `at_20d_high`. |
high_52w | numeric | Highest trade in the trailing 52 weeks (live, includes today). |
high_52w_date | date | Date the trailing-52-week high was set. Useful for "fresh 52w highs in the last 30 days" scans. |
high_52w_eod | numeric | Highest close over the trailing 52 weeks. The `_eod` distinguishes from the canonical intraday `52_week_high` (which captures wicks). |
high_5d | numeric | Highest intraday high over the last 5 trading sessions, inclusive of the current session. |
high_5d_eod | numeric | Highest close over the last 5 trading sessions. Close-basis (no intraday wicks) — pair with `high_5d` to distinguish. |
last_20d_high_date | date | Date the trailing-20-day high was set. |
last_20d_low_date | date | Date the trailing-20-day low was set. |
low_20d | numeric | Lowest trade in the trailing 20 trading days. |
low_20d_eod | numeric | Lowest close over the last 20 trading sessions. Close-basis. |
low_52w | numeric | Lowest trade in the trailing 52 weeks (live, includes today). |
low_52w_date | date | Date the trailing-52-week low was set. |
low_52w_eod | numeric | Lowest close over the trailing 52 weeks. |
low_5d | numeric | Lowest intraday low over the last 5 trading sessions, inclusive of the current session. |
low_5d_eod | numeric | Lowest close over the last 5 trading sessions. Close-basis. |
position_in_52w_range_pct | numeric | Where the live price sits in the 52-week range, 0–100. 0 = at low, 100 = at high. |
52_week_high | state | Price printed a new 52-week high today.high > max(high) over the prior 252 sessions |
52_week_low | state | Price printed a new 52-week low today.low < min(low) over the prior 252 sessions |
approaching_52w_high | state | Price is within 5% of the 52-week high.close >= high_52w * 0.95 AND close < high_52w AND (close > sma_20 AND close > sma_50, OR >= 3 of last 5 days up) AND volume > avg_volume_10d |
approaching_52w_low | state | Price is within 5% of the 52-week low.close <= low_52w * 1.05 AND close > low_52w AND (close < sma_20 AND close < sma_50, OR >= 3 of last 5 days down) AND volume > avg_volume_10d |
at_20d_high | state | Price is at or above the 20-day high.close >= high_20d |
at_20d_low | state | Price is at or below the 20-day low.close <= low_20d |
at_52w_high | state | Price has traded within 0.5% of the 52-week high this session; once tagged, the boolean stays on for the rest of the session.session_high >= high_52w * 0.995 |
at_52w_low | state | Price has traded within 0.5% of the 52-week low this session; once tagged, the boolean stays on for the rest of the session.session_low <= low_52w * 1.005 |
Support & resistance
Pivot-detected price levels a ticker has repeatedly touched, and whether price is at one now. Levels are found nightly across the equity universe; a ticker with too little history has none and its booleans read NULL rather than false.
| Column | Type | Description |
|---|---|---|
at_resistance | state | Price is testing a detected resistance level.Price within 1.5 × ATR(20) of an active detected resistance level — a cluster of two or more historical swing highs within an ATR-scaled band, still unbroken. |
at_support | state | Price is testing a detected support level.Price within 1.5 × ATR(20) of an active detected support level — a cluster of two or more historical swing lows within an ATR-scaled band, still unbroken. |
bounce_off_support | state | Bounced off a detected support level: price tagged the band within three sessions and closed up.in last 3 bars: low within level ± 1.5 × ATR14 of an active support level AND close > prev close |
Volume
How much traded: absolute quantities and averages, and activity relative to baseline.
Volume & averages
Absolute trading quantities: today's and prior volumes, dollar volume, averages, bar-level counts.
| Column | Type | Description |
|---|---|---|
avg_volume_10d | bigint | 10-day trailing average daily volume. |
avg_volume_30d | bigint | 30-day trailing average daily volume. |
day_dollar_volume | numeric | Today’s cumulative dollar volume traded. |
min_day_accumulated_dollar_volume | numeric | Today’s cumulative dollar volume across the session so far. |
min_day_accumulated_volume | bigint | Today’s cumulative shares traded across the session so far (4 AM ET onward). |
min_dollar_volume | numeric | Current minute bar’s dollar volume (close × volume approximation). |
min_trade_count | integer | Current minute bar’s number of trades. |
min_volume | integer | Current minute bar’s accumulated shares traded. |
prev_day_volume | bigint | Previous trading day’s total volume (raw shares). |
volume_today | bigint | Shares traded so far today. |
Relative & unusual volume
Trading activity relative to baseline: relative volume, bursts, unusual-volume booleans, liquidity conditions.
| Column | Type | Description |
|---|---|---|
relative_volume | numeric | Ratio of today’s pace-adjusted volume to the 10-day average. 2.0 means 2× normal. |
volume_change_vs_avg | numeric | Ratio of today’s pace-adjusted volume to its 10-day average. Numeric surface of the same denominator `relative_volume` uses. |
volume_trend_5d | text | Slope of daily volume regressed over the last 5 trading days. Positive = building, negative = drying. |
high_volume_alert | event | Volume is running well above its 10-day average. On the live row: this minute traded more than 5x a typical minute. In daily history: the day traded at least 2x its 10-day average.minute_volume > 5 x (avg_volume_10d / 390), i.e. this minute's volume exceeds 5x the typical per-minute pace from the 10-day average |
illiquid | state | Thinly traded — 10-day average volume is under 100k shares.avg_volume_10d < 100000 |
low_volume_regime | state | In a sustained quiet stretch — the last 30 minutes traded at or below 30% of this name's usual volume for this time of day.sum(volume, trailing 30 min) / expected_30min <= 0.30 to turn on; stays on until > 0.60. expected_30min = this bucket's median 15-min volume + the previous bucket's, medians over the last 20 sessions (volume_profile). Regular hours only; null until the name has a profile. |
quiet_minute | state | A sustained quiet stretch — 10-minute volume average well below recent baseline.avg(volume, 10m) < 0.5 * avg(volume, prior 30m) |
volume_burst_3x | event | Current minute volume ≥ 3× recent average.volume >= 3 * avg(volume, 30 min prior) |
volume_burst_5x | event | Current minute volume ≥ 5× recent average.volume >= 5 * avg(volume, 30 min prior) |
Price action
How price is moving, read straight off the price record: changes, gaps, momentum episodes, range structures.
Performance & change
Price change over standard horizons, today through 1 year, plus streaks and day-mover booleans.
| Column | Type | Description |
|---|---|---|
afterhours_change_pct | numeric | Percent change between regular-session close and most recent after-hours print. Sparse — most equities don't trade in after-hours, and the column updates only when a print actually happens. |
change_1d_pct | numeric | Percent change vs `previous_close`, as a whole percent (0.5 = 0.5%, not a fraction). Signed. Percent scale on every read â live, `asof` by date and `asof` by timestamp â since the 2026-09-07 cutover (this signal was `day_change_pct` as a fraction before it). |
change_1m_pct | numeric | Percent change vs. close ~21 trading days ago. Daily; see `change_1w_pct` for note. |
change_1w_pct | numeric | Percent change in close vs. the close 5 trading days ago. Computed post-close; does NOT update intraday — use `from_open_pct` + `change_1d_pct` for intraday-aware change. |
change_1y_pct | numeric | Percent change vs. close ~252 trading days ago. |
change_3m_pct | numeric | Percent change vs. close ~63 trading days ago. |
change_6m_pct | numeric | Percent change vs. close ~126 trading days ago. |
change_ytd_pct | numeric | Percent change since the first trading day of the calendar year. |
day_change | numeric | Absolute change vs `previous_close`. |
days_down | integer | Consecutive trading days closing lower than the prior close. Resets to 0 on an up day. |
days_up | integer | Consecutive trading days closing higher than the prior close. Resets to 0 on a down day. |
from_open_pct | numeric | Intraday: percent change from today’s session open to the latest snapshot price. Resets at session boundary. |
premarket_change_pct | numeric | Pre-market: percent change from the previous session close to the latest pre-market print. Resets at session boundary. |
price_down_3pct | event | Intraday move of -3% or worse vs prior close.change_1d_pct <= -3 |
price_up_3pct | event | Intraday move of 3%+ vs prior close.change_1d_pct >= 3 |
top_gainer | state | Among the session's top 20 gainers.Ranks in the top 20 by change_1d_pct among active tickers with price above $1 and session volume above 100k shares. |
top_loser | state | Among the session's top 20 losers.Ranks in the bottom 20 by change_1d_pct among active tickers with price above $1 and session volume above 100k shares. |
Gaps
Opening gaps: size, direction, extremes, and intraday fill.
| Column | Type | Description |
|---|---|---|
gap_pct | numeric | Percent change of `session_open` vs `previous_close`. One value per session. |
gap_down | event | Today opened 3%+ below prior close.(close_prev - open) / close_prev >= 0.03, measured at the open. Whether the gap is reclaimed later in the session does not change the flag. |
gap_down_extreme | event | Today opened 10%+ below prior close.(close_prev - open) / close_prev >= 0.10 |
gap_filled_today | event | Today’s opening gap was closed by an intraday move.Opened with gap >= 0.5% AND intraday range straddled close_prev. |
gap_up | event | Today opened 3%+ above prior close.(open - close_prev) / close_prev >= 0.03, measured at the open. Whether the gap holds later in the session does not change the flag. |
gap_up_extreme | event | Today opened 10%+ above prior close.(open - close_prev) / close_prev >= 0.10 |
Intraday momentum
Directional strength read straight off the session's bars: drives, drifts, spikes, rallies, exhaustion.
| Column | Type | Description |
|---|---|---|
afternoon_drift_up | state | Afternoon session net up.close_1600 > close_1200 |
last_hour_rally | event | Final hour of session net up.close_1600 > close_1500 * 1.005 |
last_hour_selloff | event | Final hour of session net down.close_1600 < close_1500 * 0.995 |
microspike_down | event | Single 1-minute candle return ≤ −1%.(close - open) / open <= -0.01 |
microspike_up | event | Single 1-minute candle return ≥ +1%.(close - open) / open >= 0.01 |
momentum_down | state | Sustained downward momentum on the daily bars.Three or more consecutive down days whose average daily move exceeds about 1%. |
momentum_exhaustion_down | event | Downward momentum showing signs of exhaustion.rsi_14 < 30 AND days_down >= 5 |
momentum_exhaustion_up | event | Upward momentum showing signs of exhaustion.rsi_14 > 70 AND days_up >= 5 |
momentum_strong_down | event | Strong downward momentum across multiple measures.days_down >= 3 AND volume_trend_5d = 'increasing' |
momentum_strong_up | event | Strong upward momentum across multiple measures.days_up >= 3 AND volume_trend_5d = 'increasing' |
momentum_up | state | Sustained upward momentum on the daily bars.Three or more consecutive up days whose average daily move exceeds about 1%. |
morning_strength | state | First two hours of session net positive.close_1130 > open_0930 |
opening_drive_down | event | First 5 minutes of session down < −0.5%.close_0935 < open_0930 * 0.995 |
opening_drive_up | event | First 5 minutes of session up > +0.5%.close_0935 > open_0930 * 1.005 |
pre_close_drift_down | event | Last 10 minutes before close net down.close_1600 < close_1550 |
pre_close_drift_up | event | Last 10 minutes before close net up.close_1600 > close_1550 |
pre_earnings_drift | state | Stock has moved ≥5% (absolute) over the trailing week with earnings within 7 days — a setup the literature shows often continues through the report.days_to_earnings BETWEEN 1 AND 7 AND ABS(change_1w_pct) >= 5 |
rapid_move_down_5m | state | Price down more than −0.5% in the last 5 minutes.(close - close_5m_ago) / close_5m_ago <= -0.005 |
rapid_move_up_5m | state | Price up more than +0.5% in the last 5 minutes.(close - close_5m_ago) / close_5m_ago >= 0.005 |
three_down_hours | state | Three consecutive lower hourly closes.close < close_1h_ago < close_2h_ago < close_3h_ago |
three_up_hours | state | Three consecutive higher hourly closes.close > close_1h_ago > close_2h_ago > close_3h_ago |
Ranges & reversals
Range structures and their resolution: opening range, breaks, consolidation, pullbacks, reversals, unusual range width.
| Column | Type | Description |
|---|---|---|
above_opening_range | state | Price is trading above the first 15-minute opening-range high.close > or_high (OR = first 15 min after 09:30 ET) |
below_opening_range | state | Price is trading below the first 15-minute opening-range low.close < or_low (OR = first 15 min after 09:30 ET) |
consolidating_15m | state | Last 15 minutes traded in a tight range.high_15m - low_15m < 0.5 * ((max(close, 30m) - min(close, 30m)) / 15) (ATR-30m proxy, not true ATR) |
consolidation | state | Price is range-bound — the last 5 sessions span less than 5%.(max(high) − min(low)) / midpoint < 0.05 over 5 bars |
expanded_hourly_range | state | This hour’s range is unusually wide.(high - low) > 1.5 * atr_hourly_20 |
hourly_reversal_bearish | event | Higher high, lower close than the prior hour.high > high_1h_ago AND close < close_1h_ago |
hourly_reversal_bullish | event | Lower low, higher close than the prior hour.low < low_1h_ago AND close > close_1h_ago |
in_opening_range | state | Price is inside the first-hour high/low range.or_low <= price <= or_high (OR = first 15 min after 09:30 ET) |
narrow_hourly_range | state | This hour’s range is unusually narrow.(high - low) < 0.5 * atr_hourly_20 |
pullback | state | Pullback to the 20-day moving average within an uptrend.in_uptrend (sma_50 > sma_200 AND price > sma_200) AND price below the 20-day or 50-day SMA by < 2% AND price down >= 2% from the 5-day high. Live evaluation at minute resolution. |
range_break_15m_down | event | Broke below the prior 15-minute low.close < min(low, prior 15 min) |
range_break_15m_up | event | Broke above the prior 15-minute high.close > max(high, prior 15 min) |
range_expansion | event | Today's true range > 2 × ATR(14) with volume — direction-agnostic regime-change tag.true_range > 2 * atr_14 AND volume > 1.5 * avg_volume_10d AND volume > 100,000 |
repeated_test_of_high | state | Tested today’s session high three or more times — failed-breakout setup.Close within 0.1% of the session high (close >= session_high * 0.999) on at least 3 minutes this session. |
repeated_test_of_low | state | Tested today’s session low three or more times — failed-breakdown setup.Close within 0.1% of the session low (close <= session_low * 1.001) on at least 3 minutes this session. |
sticky_breakout | state | Latches on when price makes a 52-week high and stays on until the nightly reset — a persistent breakout tag.set on a 52-week-high breakout; reset each night |
Technicals
Named technical indicators (SMA, EMA, VWAP, RSI, MACD, ADX, Bollinger, ATR) and every signal computed through one.
Moving averages & VWAP
SMAs, EMAs, and VWAPs, with the distances, above/below states, and crosses they own.
| Column | Type | Description |
|---|---|---|
day_vwap | numeric | Today’s session volume-weighted average price. |
ema_12 | numeric | 12-day EMA. Fast-side input of canonical MACD (`macd = ema_12 − ema_26`). |
ema_21 | numeric | 21-day EMA. Often paired with `ema_9` for short-trend bias; also serves as a dynamic-support reference. |
ema_26 | numeric | 26-day EMA. Slow-side input of canonical MACD (`macd = ema_12 − ema_26`). |
ema_9 | numeric | 9-day exponential moving average of close. Most-recent-weighted; reacts faster than the same-period SMA. Commonly paired with `ema_21` for short-trend bias. |
from_sma_10_pct | numeric | Percent difference between current close and `sma_10`. Positive = above MA, negative = below. Continuous version of the `above_sma_10` boolean. |
from_sma_100_pct | numeric | Percent difference between current close and `sma_100`. Daily-cadence because the slow MA changes slowly. |
from_sma_20_pct | numeric | Percent difference between current close and `sma_20`. Continuous version of the `above_sma_20` boolean. |
from_sma_200_pct | numeric | Percent distance from the 200-day SMA. Negative when price is below the average. |
from_sma_50_pct | numeric | Percent distance from the 50-day SMA. Negative when price is below the average. |
from_vwap_pct | numeric | Percent distance from today’s VWAP. |
min_vwap | numeric | Current minute bar’s volume-weighted average price. |
prev_day_vwap | numeric | Previous trading day’s session VWAP. |
sma_10 | numeric | 10-day simple moving average. |
sma_100 | numeric | 100-day simple moving average of close. Slower than `sma_50`, faster than `sma_200` — useful for intermediate-term trend. |
sma_20 | numeric | 20-day simple moving average. |
sma_200 | numeric | 200-day simple moving average. |
sma_50 | numeric | 50-day simple moving average. |
vwap | numeric | Daily volume-weighted average price from market open through the most recent print. Updates intraday with each new tick. |
above_sma_10 | state | Price is above the 10-day simple moving average.close > sma_10 |
above_sma_20 | state | Price is above the 20-day simple moving average.close > sma_20 |
above_sma_200 | state | Price is above the 200-day simple moving average.close > sma_200 |
above_sma_50 | state | Price is above the 50-day simple moving average.close > sma_50 |
above_vwap | state | Price is above today’s volume-weighted average price.close > vwap |
above_vwap_minute | state | Current price above session VWAP.close > vwap_session |
death_cross | event | 50-day SMA crossed below 200-day SMA today.Yesterday: sma_50 ≥ sma_200. Today: sma_50 < sma_200. |
death_regime | state | Long-term downtrend regime — 50-day SMA below 200-day SMA.sma_50 < sma_200 |
golden_cross | event | 50-day SMA crossed above 200-day SMA today.Yesterday: sma_50 ≤ sma_200. Today: sma_50 > sma_200. |
golden_regime | state | Long-term uptrend regime — 50-day SMA above 200-day SMA.sma_50 > sma_200 |
held_above_vwap_30m | state | Price has stayed above session VWAP without dipping for at least 30 minutes.close > vwap_session for every minute in the last 30 |
held_below_vwap_30m | state | Price has stayed below session VWAP without lifting for at least 30 minutes.close < vwap_session for every minute in the last 30 |
sma_10_crossed_above_50_today | state | The 10-day SMA crossed above the 50-day SMA today — a short-term bullish cross.sma_10 crossed above sma_50 vs. the prior session |
sma_10_crossed_below_50_today | state | The 10-day SMA crossed below the 50-day SMA today — a short-term bearish cross.sma_10 crossed below sma_50 vs. the prior session |
vwap_cross_down | event | Crossed below session VWAP this minute.close_prev_min >= vwap_session AND close < vwap_session |
vwap_cross_up | event | Crossed above session VWAP this minute.close_prev_min <= vwap_session AND close > vwap_session |
Oscillators
Bounded momentum oscillators: RSI and stochastics, with their threshold booleans.
| Column | Type | Description |
|---|---|---|
rsi_14 | numeric | Relative Strength Index, 14-period. Range 0–100. |
rsi_7 | numeric | Relative Strength Index over 7 periods - a faster, more sensitive RSI. Range 0-100. |
stochastic_d | numeric | Stochastic oscillator %D: 3-period smoothing of %K. |
stochastic_k | numeric | Stochastic oscillator %K: where price sits within its recent high-low range, 0-100. |
rsi_overbought | state | RSI(14) is in overbought territory.rsi_14 > 70 |
rsi_oversold | state | RSI(14) is in oversold territory.rsi_14 < 30 |
Trend & direction
Trend direction and strength: MACD, ADX/±DI, SMA-based trend reads, and reversal composites.
| Column | Type | Description |
|---|---|---|
adx_14 | numeric | Average Directional Index (14-period): trend strength from 0 to 100. |
macd_histogram | numeric | MACD line minus signal. Positive when bullish, negative when bearish. |
macd_line | numeric | MACD line (12-EMA minus 26-EMA). |
macd_signal | numeric | MACD signal line (9-EMA of MACD line). |
minus_di | numeric | -DI (14-period): the bearish directional-movement component of the ADX system. |
plus_di | numeric | +DI (14-period): the bullish directional-movement component of the ADX system. |
trend_long | text | Long-term trend classification from `sma_200` slope. One of `uptrend`, `downtrend`, `sideways`. |
trend_medium | text | Medium-term trend classification from `sma_50` slope. One of `uptrend`, `downtrend`, `sideways`. |
trend_short | text | Short-term trend classification from short-MA slope. One of `uptrend`, `downtrend`, `sideways`. |
in_downtrend | state | Stacked downtrend across short, medium, and long horizons.close < sma_50 AND sma_50 < sma_200 |
in_uptrend | state | Stacked uptrend across short, medium, and long horizons.close > sma_50 AND sma_50 > sma_200 |
macd_above_signal | state | MACD line is above its signal line.macd > macd_signal |
macd_below_signal | state | MACD line is below its signal line.macd < macd_signal |
trend_reversal_bearish_today | event | Trend flipped from up to down today.Yesterday: sma_50 > sma_200. Today: macd_bearish AND rsi_14 < 50. |
trend_reversal_bullish_today | event | Trend flipped from down to up today.Yesterday: sma_50 < sma_200. Today: macd_bullish AND rsi_14 > 50. |
Volatility & bands
Volatility measures and deviation envelopes: ATR, Bollinger machinery, VWAP σ-bands.
| Column | Type | Description |
|---|---|---|
atr_14 | numeric | 14-day Average True Range. |
atr_pct | numeric | ATR(14) as a percent of price. Useful as a volatility filter. |
bollinger_b | numeric | Position within Bollinger bands. 0 = at lower band, 1 = at upper band, >1 = outside. |
bollinger_lower | numeric | Lower Bollinger band (20-period, 2σ). |
bollinger_middle | numeric | 20-day SMA — the centerline of the Bollinger band. `bollinger_upper` and `bollinger_lower` are already documented; this fills in the missing middle. |
bollinger_upper | numeric | Upper Bollinger band (20-period, 2σ). |
bollinger_width | numeric | `(bollinger_upper â bollinger_lower) / bollinger_middle`. Normalized width â measures volatility regime. Narrow widths often precede expansion (see the boolean `bollinger_squeeze`). |
vwap_lower_band | numeric | VWAP − 2 standard deviations. Dynamic support reference. |
vwap_upper_band | numeric | VWAP + 2 standard deviations of intraday price action. Dynamic resistance reference. |
at_bollinger_lower | state | Price has reached the lower Bollinger band.abs(close - bb_lower) / close < 0.02 (within 2% of the lower band, above or below) |
at_bollinger_upper | state | Price has reached the upper Bollinger band.abs(close - bb_upper) / close < 0.02 (within 2% of the upper band, above or below) |
bollinger_squeeze | state | Bollinger band width compressed to a multi-week low — volatility is contracted.bollinger_width < 0.04 |
Fundamentals
Company financials: statement lines as reported, the ratios and multiples built on them, share structure, and short positioning.
Income statement
Income-statement lines as reported, EPS, and their growth rates.
| Column | Type | Description |
|---|---|---|
basic_earnings_per_share | numeric | Basic EPS for the most-recently reported quarter. Signed. |
cost_of_revenue | bigint | Cost of goods sold for the quarter. |
costs_and_expenses | bigint | Total costs and expenses reported on the income statement (COGS + opex). |
diluted_eps_ttm | numeric | Trailing-12m diluted EPS. |
earnings_growth_yoy_pct | numeric | Year-over-year EPS growth percent from the most recently reported quarter vs. the same quarter prior year. Signed; positive = growth. |
ebitda | bigint | Earnings before interest, taxes, depreciation, and amortization (TTM). |
eps | numeric | Earnings per share (trailing twelve months). |
gross_profit | bigint | `revenues − cost_of_revenue` for the quarter. |
gross_profit_ttm | bigint | Trailing-12m gross profit. |
income_loss_from_continuing_operations_after_tax | bigint | After-tax income from continuing operations for the quarter. |
income_loss_from_continuing_operations_before_tax | bigint | Pre-tax income from continuing operations for the quarter. |
income_tax_expense_benefit | bigint | Income tax expense (positive) or benefit (negative) for the quarter. |
net_income_loss | bigint | Bottom-line net income/loss for the quarter. Signed. |
net_income_loss_attributable_to_noncontrolling_interest | bigint | Portion of net income attributable to minority owners of consolidated subsidiaries. Usually 0 for non-conglomerates. |
net_income_loss_attributable_to_parent | bigint | Net income attributable to the parent entity (excludes noncontrolling interest). |
net_income_loss_available_to_common_stockholders_basic | bigint | Net income available to common shareholders — numerator for basic EPS. |
nonoperating_income_loss | bigint | Non-operating income/loss (interest income, gains/losses on investments, etc.) for the quarter. Signed. |
operating_expenses | bigint | Sum of operating costs reported on the income statement for the quarter (excludes COGS). |
operating_income_loss | bigint | Operating income or loss for the quarter. Signed. |
research_and_development | bigint | R&D spend for the quarter. NULL for companies that don't report R&D as a line item. |
revenue_growth_yoy_pct | numeric | Year-over-year revenue growth: most-recent quarter vs same quarter prior year. Signed; positive = growth. |
revenue_growth_yoy_quarterly_pct | numeric | YoY quarterly revenue growth. Signed. |
revenue_per_share_ttm | numeric | Trailing-12m revenue divided by diluted shares outstanding. USD per share. |
revenue_ttm | bigint | Trailing-twelve-month revenue. |
revenues | bigint | Total revenue for the most-recently reported quarter, from filed income statements. |
selling_general_and_administrative_expenses | bigint | SG&A for the quarter. |
Balance sheet
Balance-sheet lines as reported.
| Column | Type | Description |
|---|---|---|
accounts_payable | bigint | Trade payables to suppliers as of the quarter end. |
assets | bigint | Total assets on the balance sheet as of the most recently reported quarter. |
book_value | numeric | Trailing-12m book value per share. Computed from `equity_attributable_to_parent / diluted_average_shares`. |
cash_and_short_term_investments | bigint | Cash and cash equivalents plus short-term investments from the latest reported balance sheet, in USD. When the balance sheet reports no short-term investments, it equals cash_on_hand. In history, dated from the filing, like cash_on_hand. |
cash_on_hand | bigint | Cash and cash equivalents from the latest reported balance sheet, in USD. Short-term investments are not included. In history, each value takes effect on the day the company filed it with the SEC; when only a later re-filing date is known, it takes effect 90 days after the quarter ended. When a balance sheet reports exactly zero cash, the value is kept only if the company's own SEC filing also shows zero for that quarter; otherwise it is null. |
current_assets | bigint | Assets expected to be converted to cash or used up within 12 months. |
current_liabilities | bigint | Liabilities due within 12 months — accounts payable, short-term debt, accrued expenses. |
equity | bigint | Total shareholders' equity. |
equity_attributable_to_noncontrolling_interest | bigint | Equity attributable to minority shareholders of consolidated subsidiaries. Usually 0 for non-conglomerates. |
equity_attributable_to_parent | bigint | Equity attributable to the parent entity's shareholders (excludes minority interest). |
fixed_assets | bigint | Property, plant, and equipment (PP&E), net of accumulated depreciation. |
inventory | bigint | Inventory on hand. NULL for service and financial companies that don't carry inventory. |
liabilities | bigint | Total liabilities on the balance sheet. |
liabilities_and_equity | bigint | Total liabilities + total equity. Should equal `assets` (balance-sheet identity). Documented for completeness — useful as a sanity check rather than a scan target. |
long_term_debt | bigint | Long-term debt from the most recent reported balance sheet, including capital-lease obligations, in USD. Null when the issuer does not break it out from noncurrent liabilities. |
noncurrent_assets | bigint | Long-lived assets — property, plant, equipment, intangibles, long-term investments. |
noncurrent_liabilities | bigint | Liabilities due beyond 12 months — long-term debt, deferred taxes, pension obligations. |
other_current_assets | bigint | Current assets not separately broken out (prepaid expenses, short-term receivables, etc.). |
other_current_liabilities | bigint | Current liabilities not separately broken out. |
other_noncurrent_assets | bigint | Non-current assets not separately broken out (intangibles, deferred tax assets, etc.). |
total_debt | bigint | Total debt from the latest reported balance sheet, in USD: short-term borrowings and the current portion of long-term debt, plus long-term debt including capital-lease obligations. In history, dated from the filing, like cash_on_hand. |
Cash flow
Cash-flow-statement lines and free cash flow.
| Column | Type | Description |
|---|---|---|
free_cash_flow | bigint | Operating cash flow minus capital expenditures. Cash the business generates above what it needs to maintain operations. |
net_cash_flow | bigint | Sum of operating + investing + financing cash flow — period change in cash. |
net_cash_flow_continuing | bigint | Total cash flow excluding discontinued operations. Rare line item — populated only for companies in active discontinued-ops winddown. |
net_cash_flow_from_financing_activities | bigint | Net cash from financing (debt, dividends, buybacks). |
net_cash_flow_from_financing_activities_continuing | bigint | Financing cash flow excluding discontinued operations. |
net_cash_flow_from_investing_activities | bigint | Net cash from investing activities (capex, acquisitions). Negative for net spend. |
net_cash_flow_from_investing_activities_continuing | bigint | Investing cash flow excluding discontinued operations. |
net_cash_flow_from_operating_activities | bigint | Net cash from operations for the quarter. |
net_cash_flow_from_operating_activities_continuing | bigint | Same as `net_cash_flow_from_operating_activities` but excludes discontinued operations. |
Margins & ratios
Ratios computed entirely from statement lines — margins, returns, liquidity, leverage. No market price in the formula.
| Column | Type | Description |
|---|---|---|
cash_ratio | numeric | Cash and cash equivalents divided by current liabilities, from the latest reported balance sheet. Null when current liabilities are not reported. In history, dated from the filing, like cash_on_hand. |
current_ratio | numeric | Current assets ÷ current liabilities. Short-term liquidity. >1 = able to cover short-term obligations from current assets. |
debt_to_equity | numeric | Total debt divided by total shareholders' equity. Common leverage ratio; lower = less leveraged. |
gross_margin | numeric | `gross_profit / revenues` for the quarter. |
operating_margin | numeric | `operating_income_loss / revenues` for the quarter. |
operating_margin_ttm | numeric | Trailing-12m operating margin. |
profit_margin | numeric | Net income ÷ revenue. Quarterly. |
profit_margin_ttm | numeric | Trailing-12m profit margin. |
quick_ratio | numeric | (Current assets − inventory) ÷ current liabilities. Stricter liquidity — assumes inventory isn't quickly convertible. |
return_on_assets | numeric | Net income ÷ total assets. Quarterly figure. |
return_on_assets_ttm | numeric | Trailing-12m return on assets. |
return_on_equity | numeric | Net income ÷ shareholders' equity. Quarterly figure. |
return_on_equity_ttm | numeric | Trailing-12m return on equity. |
high_margin | state | Trailing-twelve-month profit margin is above 20%.profit_margin_ttm > 0.20 |
profitable | classification | Most-recently-reported quarter had positive net income.net_income_loss > 0 |
Valuation
Metrics crossing market price with financials — cap, EV, multiples, yield, beta — plus the size/style tags they own (cap tiers, beta tags, value_stock).
| Column | Type | Description |
|---|---|---|
beta | numeric | Trailing beta vs SPY. Null for issuers with insufficient price history. |
cap_class | text | Market-capitalization tier. One of `nano` (<$50M), `micro` ($50Mâ$300M), `small` ($300Mâ$2B), `mid` ($2Bâ$10B), `large` ($10Bâ$200B), `mega` (â¥$200B), or `unknown` when `market_cap` is null. Updates daily post-close as `market_cap` moves. Preferred over the legacy `nano_cap/micro_cap/small_cap/mid_cap/large_cap/mega_cap` boolean signals (which remain in sync as backward-compat shortcuts). |
dividend_yield | numeric | Forward dividend yield as a fraction (0.025 = 2.5%). Null for non-payers. |
enterprise_value | bigint | Market cap + total debt − cash. |
ev_to_ebitda | numeric | `enterprise_value` ÷ `ebitda`. Capital-structure-neutral profitability multiple. |
ev_to_sales | numeric | `enterprise_value` ÷ `revenue_ttm`. Capital-structure-neutral revenue multiple. |
forward_pe | numeric | Forward price-to-earnings ratio using next-12m consensus EPS. Lower = cheaper on forward basis. |
market_cap | bigint | Market capitalization. Updated daily; intraday change derived from `price` × `shares_outstanding`. |
pe_ratio | numeric | Price-to-earnings ratio (trailing twelve months). Null for unprofitable issuers. |
peg_ratio | numeric | PE ratio divided by EPS growth rate. Sparsely populated — PEG is only computed for tickers with positive earnings growth and analyst coverage. |
price_to_book | numeric | Current price ÷ `book_value`. Common value-investing metric. |
price_to_cash_flow | numeric | Current price ÷ operating cash flow per share. Less manipulable than P/E. |
price_to_free_cash_flow | numeric | Current price ÷ `free_cash_flow` per share. Strictest cash-based valuation. |
price_to_sales | numeric | Current price ÷ `revenue_per_share_ttm`. Often used when companies have no earnings. |
ratios_asof | date | Date of the financial data behind the valuation ratios (P/E, price-to-book, EV/EBITDA and the rest). Compare with price_asof to see how current a ratio is. |
high_beta | classification | Beta above 2.0: moves much more than the market.beta > 2.0. |
high_dividend_yield | classification | Dividend yield above 4%.dividend_yield >= 0.04. |
large_cap | classification | Market cap between $10B and $200B.market_cap >= 10B AND market_cap < 200B. |
low_beta | state | Beta below 0.5 — moves much less than the market.beta < 0.5 |
mega_cap | classification | Market cap above $200B.market_cap >= 200B. |
micro_cap | state | Market cap between $50M and $300M.50e6 ≤ market_cap < 300e6 |
mid_cap | classification | Market cap between $2B and $10B.market_cap >= 2B AND market_cap < 10B. |
nano_cap | state | Market cap below $50M.market_cap < 50e6 |
small_cap | classification | Market cap between $300M and $2B.market_cap >= 300M AND market_cap < 2B. |
value_stock | classification | Trades at a value-style P/E.pe_ratio > 0 AND pe_ratio < 15. |
Short interest
Short positioning: readings, ratios, days-to-cover, and their booleans.
| Column | Type | Description |
|---|---|---|
days_to_cover | numeric | Short interest divided by 30-day average daily volume. Trader’s "how many days of normal trading to cover all shorts" measure. |
short_float_pct | numeric | Short interest as a fraction of the free float. 0.10 = 10% of float is short. |
short_interest | bigint | Raw shares-shorted count as last reported (FINRA bi-monthly). Pair with `short_interest_settlement_date` (profile.ts) for the as-of date. |
short_interest_settlement_date | date | Settlement date of the most recent short-interest report. |
short_volume_ratio | numeric | Share of the day's volume executed as short sales (0–1). |
high_short_interest | state | More than 20% of the float is sold short.short_float_pct > 20 |
short_volume_spike | state | More than 60% of the day's volume was executed as short sales.short_volume_ratio > 0.60 |
Events
What happened or is scheduled to happen to the company: earnings, dividends, IPOs, share-capital changes, insider transactions.
Earnings
The earnings calendar and its outcomes: dates, windows, surprises, streaks.
| Column | Type | Description |
|---|---|---|
days_to_earnings | integer | Calendar days until next earnings announcement. Negative after report. |
earnings_beat_streak | integer | Consecutive quarters the company has beaten consensus EPS estimates. Resets to 0 on a miss. |
earnings_date | date | Next earnings announcement date. Where the company has not published one, the date is projected from its own reporting history and earnings_date_projected is true. |
earnings_fiscal_quarter | text | End date of the fiscal quarter the next earnings report covers (e.g. 2026-10-31). Fiscal, not calendar: it follows the company's own fiscal year. |
earnings_report_time | text | When in the trading day the next earnings will be reported. One of `BMO` (before market open), `AMC` (after market close), `DMH` (during market hours). |
last_earnings_date | date | Date of the company's most recent earnings report. |
last_earnings_surprise | numeric | `last_reported_eps − last_eps_estimate`. Signed; positive = beat. |
last_earnings_surprise_pct | numeric | Reported EPS versus the consensus estimate for the same quarter, as a percent of the estimate. Reported EPS can include one-time items that consensus excludes, so a large surprise is not always an operating beat. |
last_fiscal_quarter_end | date | End date of the fiscal quarter covered by the most recent earnings report. |
last_reported_eps | numeric | EPS as reported in the most recent earnings announcement, including one-time items. |
earnings_approaching | state | Earnings within 3 days.days_to_earnings = 3 (exactly three days before the scheduled earnings date) |
earnings_date_projected | flag | True when earnings_date is our projection from the company's own reporting history rather than a published calendar date. |
earnings_next_week | state | Earnings 8–14 days out — useful for the lead-up swing window.days_to_earnings >= 8 AND days_to_earnings <= 14 |
earnings_published | state | Earnings report date has passed (next earnings date is in the past).days_to_earnings <= 0 |
earnings_this_week | state | Earnings announcement scheduled in the next 7 days.0 <= days_to_earnings <= 7. Sourced from the forward earnings calendar plus the historical earnings table. |
earnings_today | event | Earnings reported today.EXISTS(ticker_earnings_history row with reported_date = today). Both pre-market and post-market reports count. |
earnings_tomorrow | state | Earnings reported in 1 calendar day. Pair with `earnings_report_time` to know BMO vs. AMC.days_to_earnings = 1 |
recently_reported_earnings | state | Reported earnings within the last 5 days.EXISTS(ticker_earnings_history row with reported_date in [today - 5d, today - 1d]). Captures the post-earnings reaction window. |
Dividends
Dividend amount, schedule, and approach booleans.
| Column | Type | Description |
|---|---|---|
dividend | numeric | Most-recent dividend amount per share. |
dividend_date | date | Date of the most-recent dividend payment. |
dividend_frequency | integer | Payment frequency: `quarterly`, `monthly`, `semiannual`, `annual`. |
dividend_payout_ratio | numeric | Trailing 12-month dividends per share divided by trailing diluted EPS (0.25 = a quarter of earnings paid out). Null when EPS is zero, negative or missing. |
dividend_ttm | numeric | Dividends per share paid over the trailing 12 months, specials included. Null when nothing went ex-dividend in that window. |
ex_dividend_date | date | Next ex-dividend date. |
dividend_approaching | state | The ex-dividend date falls within the next 7 days.ex_dividend_date between today and today + 7d |
IPOs
IPO dates and status, from pending through recently listed.
| Column | Type | Description |
|---|---|---|
ipo_date | date | Date of the company's IPO, when known. |
ipo_in_7d | state | A firm IPO listing date falls within the next 7 days.IPO calendar listing date within 7 days |
pending_ipo | state | The ticker is in the IPO calendar but has not started trading.in the IPO calendar, pre-first-trade |
recently_ipoed | state | The company listed within the last 90 days.list_date >= today − 90d |
Splits & share changes
Events that alter share count or float: splits, buybacks, dilution.
| Column | Type | Description |
|---|---|---|
float_effective_date | date | As-of date for the current float-shares figure. |
buyback_30d | state | Shares outstanding fell more than 1% over the last 30 days.shares_outstanding < 30d-ago × 0.99 |
dilution_30d | state | Shares outstanding rose more than 3% over the last 30 days.shares_outstanding > 30d-ago × 1.03 |
split_recent | state | A stock split occurred in the last 7 days or is scheduled within 14 days.split execution_date between today − 7d and today + 14d |
Insider activity
Insider (Form 4) transaction booleans: C-suite buys and sells, clustered buying.
| Column | Type | Description |
|---|---|---|
insider_c_suite_buy | state | A C-suite insider (CEO/CFO/COO/President/Chair) bought shares in the last 7 days.insider acquisition within 7d by an insider titled CEO, CFO, COO, President, Chairman, or Director |
insider_c_suite_sell | state | A C-suite insider (CEO/CFO/COO/President/Chair) sold shares in the last 7 days.insider disposal by a C-suite title within 7d |
insider_cluster_buy | state | Two or more distinct insiders bought shares in the last 14 days.count(distinct insider buyers) ≥ 2 within 14d |
Profile
Who and what the security is: classification and identity data, looked up rather than computed.
Classification
Categorical facts: sector, industry, SIC, exchange, country, currency, asset class and sub-class.
| Column | Type | Description |
|---|---|---|
industry | text | GICS industry within the sector. |
sector | text | GICS sector. One of: Technology, Healthcare, Financials, Consumer Discretionary, Consumer Staples, Energy, Industrials, Materials, Utilities, Real Estate, Communication Services. |
sic_code | text | SIC code — the SEC's Standard Industrial Classification for the company's industry. |
sic_description | text | Plain-text label for the company's SIC industry code. |
ticker_category | text | Sub-class within an asset class, e.g. treasury_curve or policy_rate. |
Identifiers & reference
Which company this is: name, IDs (CIK, FIGI), listing status, contact, branding, employees.
| Column | Type | Description |
|---|---|---|
asset_class | text | Asset class of the ticker: stocks, rates, crypto, or fx. |
asset_type | text | Asset class. One of `equity`, `etf`, or `crypto`. |
cik | text | SEC Central Index Key — the company's identifier in EDGAR filings. |
composite_figi | text | Composite FIGI — Bloomberg's cross-exchange security identifier. |
country | text | Listing locale from the reference vendor, not the issuer's home country. Every US-listed symbol, including ADRs, reports `us`. For where the company is run from and where it is incorporated, use `issuer_country` and `incorporation_country`. |
currency_name | text | Currency the prices are quoted in (`usd`, `eur`, `gbp`, etc.). Effectively always `usd` for US-listed equities. |
delisted_utc | timestamp with time zone | |
exchange | text | Primary listing exchange, human-readable name — e.g. `NASDAQ`, `NYSE`, `NYSE Arca`, `Cboe BZX`, `NYSE American`, `OTC Markets`. See `exchange_mic` for the raw ISO 10383 code. Null for a small number of delisted/edge names. |
exchange_mic | text | Primary listing exchange as an ISO 10383 **MIC code**: `XNAS` = NASDAQ, `XNYS` = NYSE, `ARCX` = NYSE Arca, `BATS` = Cboe BZX, `XASE` = NYSE American. The `?exchange=` filter accepts either this code or the human name. |
incorporation_country | text | Where the issuer is legally incorporated: the ISO 3166-1 alpha-2 country code (lower-case) of its state or country of incorporation in its SEC filings; US states map to `us`. `ky` for Huize (Cayman-incorporated, run from China), `us` for Apple. Null when the symbol has no SEC filer identifier. Pair with `issuer_country` to tell an offshore-incorporated operator from a domestic one. |
issuer_country | text | Where the company is run from: the ISO 3166-1 alpha-2 country code (lower-case) of the issuer's business address in its SEC filings. `cn` for Huize (HUIZ), `us` for Apple. Null when the symbol has no SEC filer identifier (most ETFs and non-SEC filers). Distinct from `country`, which is the listing locale, and from `incorporation_country`, the legal domicile. |
list_date | text | Date the symbol was first listed on its exchange. |
name | text | Company or asset display name. |
active | state | Ticker is actively traded — not delisted or halted.active = true |
Company profile
The issuer behind the symbol: description, address, contacts, branding, headcount, and lifecycle notes. Describes the company, not the instrument — the state row carries it; the symbol catalog does not.
| Column | Type | Description |
|---|---|---|
address_address1 | text | Company headquarters street address. |
address_city | text | Company headquarters city. |
address_postal_code | text | Company headquarters postal code. |
address_state | text | Company headquarters state or region. |
branding_icon_url | text | URL of the company's square icon image, served by this API: request it with your API key (the same Authorization: Bearer header) and you get the image bytes (PNG or JPEG) with their Content-Type. Null when the issuer has no icon on file. |
branding_logo_url | text | URL of the company's logo image, served by this API: request it with your API key (the same Authorization: Bearer header) and you get the image bytes (SVG when available, else PNG) with their Content-Type. Null when the issuer has no logo on file. |
description | text | Business description of the company. |
homepage_url | text | Company homepage URL. |
inactive_at | timestamp without time zone | When the ticker was marked inactive. |
inactive_reason | text | Why the ticker was marked inactive (e.g. delisted, stale data). |
leadership | jsonb | Current C-suite: a list of {name, title} (CEO, President, CFO, COO, CTO, other Chief officers, General Counsel), from SEC Forms 3/4/5. Empty for companies that file none (foreign private issuers, funds). |
phone_number | text | Company contact phone number. |
round_lot | integer | Standard trading lot size for the symbol. |
share_class_figi | text | Share-class FIGI — Bloomberg identifier for this specific share class. |
ticker_root | text | Root symbol — the base ticker without class or suffix modifiers. |
total_employees | integer | Number of full-time employees as last reported. Useful for size-based filters ("small-cap by employee count"). |
Fund facts
ETF fund facts from the issuer profile (expense ratio, assets, inception, leverage, turnover, yield).
| Column | Type | Description |
|---|---|---|
etf_dividend_yield | numeric | Dividend yield as reported by the fund, as a fraction. ETFs only. |
etf_expense_ratio | numeric | Net expense ratio as a fraction (0.0009 = 0.09% a year). ETFs only. |
etf_inception_date | date | Date the fund launched. ETFs only. |
etf_net_assets | bigint | Fund net assets (assets under management) in USD. ETFs only. |
etf_turnover | numeric | Portfolio turnover as a fraction per year (0.03 = 3%). ETFs only. |
etf_leveraged | flag | True for leveraged and inverse-leveraged funds. ETFs only. |
Analyst ratings
What analysts think: the consensus, each firm’s actions, price targets, and estimates.
Consensus ratings
The aggregate analyst opinion: consensus rating, the buy/hold/sell distribution, coverage depth.
| Column | Type | Description |
|---|---|---|
analyst_consensus_rating | text | Consensus analyst rating across contributing firms. One of `strong buy`, `buy`, `hold`, `sell`, `strong sell`. NULL for tickers without analyst coverage. |
analyst_consensus_rating_value | numeric | Consensus rating as a numeric score on the standard 1–5 scale (1 = strong buy, 5 = strong sell). Lower is more bullish. |
analyst_count_buy | integer | Number of contributing firms rating the ticker as buy. |
analyst_count_hold | integer | Number of contributing firms rating the ticker as hold (neutral). |
analyst_count_sell | integer | Number of contributing firms rating the ticker as sell. |
analyst_count_strong_buy | integer | Number of contributing firms rating the ticker as strong buy. |
analyst_count_strong_sell | integer | Number of contributing firms rating the ticker as strong sell. |
analyst_count_total | integer | Total number of contributing firms covering the ticker with any rating. Sum of the five `analyst_count_*` buckets. `well_covered` fires when this is at least 10. |
analyst_count_with_target | integer | Number of contributing firms whose rating includes a published 12-month price target. Always ≤ `analyst_count_total`. |
bearish_consensus | state | Consensus analyst rating is `sell` or `strong sell`.analyst_consensus_rating IN ('sell', 'strong sell') |
bullish_consensus | state | Consensus analyst rating is `strong buy` or `buy`.analyst_consensus_rating IN ('strong buy', 'buy') |
well_covered | classification | Ten or more analyst firms cover the ticker.analyst_count_total >= 10 |
Upgrades & downgrades
Individual firm actions: rating changes, initiations, and price-target changes.
| Column | Type | Description |
|---|---|---|
last_rating_action | text | Action taken in the most recent rating change. Common values: `upgrades`, `downgrades`, `initiates_coverage_on`, `maintains`, `reiterates`, `assumes`, `reinstates`, `suspends`. |
last_rating_date | date | Date of the most recent rating action across all firms covering the ticker. |
last_rating_firm | text | Name of the firm that issued the most recent rating action. |
recent_downgrade | state | At least one analyst downgraded the ticker in the last 7 days.EXISTS (SELECT 1 FROM analyst_events WHERE ticker = t.ticker AND action = 'downgrades' AND timestamp >= NOW() - INTERVAL '7 days') |
recent_initiation | state | At least one analyst initiated coverage in the last 7 days.EXISTS (SELECT 1 FROM analyst_events WHERE ticker = t.ticker AND action = 'initiates_coverage_on' AND timestamp >= NOW() - INTERVAL '7 days') |
recent_target_lower | state | At least one analyst lowered their price target in the last 7 days.EXISTS (SELECT 1 FROM analyst_events WHERE ticker = t.ticker AND price_target_action = 'lowers' AND timestamp >= NOW() - INTERVAL '7 days') |
recent_target_raise | state | At least one analyst raised their price target in the last 7 days.EXISTS (SELECT 1 FROM analyst_events WHERE ticker = t.ticker AND price_target_action = 'raises' AND timestamp >= NOW() - INTERVAL '7 days') |
recent_upgrade | state | At least one analyst upgraded the ticker in the last 7 days.EXISTS (SELECT 1 FROM analyst_events WHERE ticker = t.ticker AND action = 'upgrades' AND timestamp >= NOW() - INTERVAL '7 days') |
Price targets
Where analysts say it's going: consensus/high/low targets and price-versus-target state.
| Column | Type | Description |
|---|---|---|
analyst_consensus_target_price | numeric | Mean of contributing analysts' 12-month price targets. |
analyst_target_price_high | numeric | Highest single-analyst 12-month price target across contributing firms. |
analyst_target_price_low | numeric | Lowest single-analyst 12-month price target across contributing firms. |
analyst_target_upside_pct | numeric | Implied upside from the current price to the consensus target, in percent. `(analyst_consensus_target_price - price) / price * 100`. Negative when price is above target. Recomputed every minute during market hours. |
above_price_target | state | Current price is above the consensus analyst target.price > analyst_consensus_target_price |
below_price_target | state | Current price is below the consensus analyst target.price < analyst_consensus_target_price |
target_downside_above_10pct | state | Current price is more than 10% above the consensus target — significant implied downside.analyst_target_upside_pct < -10 |
target_upside_above_10pct | state | Consensus price target implies more than 10% upside from the current price.analyst_target_upside_pct > 10 |
target_upside_above_25pct | state | Consensus price target implies more than 25% upside from the current price.analyst_target_upside_pct > 25 |
Estimates
What analysts say it will earn: forward EPS/revenue estimates and their revisions.
| Column | Type | Description |
|---|---|---|
eps_estimate_revision_down_30d | integer | Count of analysts who lowered their next-quarter EPS estimate in the last 30 days. |
eps_estimate_revision_up_30d | integer | Count of analysts who raised their next-quarter EPS estimate in the last 30 days. A positive read on forward sentiment momentum. |
last_eps_estimate | numeric | Consensus EPS estimate going into the most recent earnings announcement. |
next_eps_estimate | numeric | Wall Street consensus EPS estimate for the next reported quarter — weighted average across analyst contributors. |
next_eps_estimate_high | numeric | Highest single-analyst EPS estimate for the next reported quarter. |
next_eps_estimate_low | numeric | Lowest single-analyst EPS estimate for the next reported quarter. |
next_revenue_estimate | bigint | Wall Street consensus revenue estimate (USD, full dollars) for the next reported quarter. |
estimate_revised_down | state | At least one analyst lowered their next-quarter EPS estimate in the last 30 days.eps_estimate_revision_down_30d > eps_estimate_revision_up_30d AND total 30d revisions (up + down) >= 3 |
estimate_revised_up | state | At least one analyst raised their next-quarter EPS estimate in the last 30 days.eps_estimate_revision_up_30d > eps_estimate_revision_down_30d AND total 30d revisions (up + down) >= 3 |
high_earnings_estimate | classification | Consensus next-quarter EPS estimate exceeds an absolute $1.00 per share threshold.next_eps_estimate > 1.00 |
loss_estimate | classification | Analyst consensus expects negative EPS for the upcoming report.next_eps_estimate < 0 |
profitable_estimate | classification | Analyst consensus expects positive EPS for the upcoming report.next_eps_estimate > 0 |
News
Signals derived from news coverage: article volume and sentiment.
| Column | Type | Description |
|---|---|---|
highly_relevant_news_count | integer | How many articles in the last 7 days scored this name's relevance at 0.6 or higher. |
latest_news_at | timestamp with time zone | Publish time of the newest news article that mentions the ticker. |
news_sentiment_volatility | numeric | How much the news sentiment about this name has been swinging over the last 7 days. |
news_volume | numeric | Count of news articles published in the last 24 hours mentioning this ticker with a relevance score ≥ 0.6. Refreshed every 15 minutes. Null when no qualifying articles in the window. |
news_volume_weighted_sentiment | numeric | Range -1.0 to +1.0. The relevance-weighted average sentiment of articles in the last 24 hours, attenuated by `tanh(news_volume / 15)` so quiet tickers (1-2 articles) read near zero regardless of sentiment sign. Strong negative = loud bad news; strong positive = loud good news; values near 0 = quiet or mixed. Null when no qualifying articles. |
recent_news_count | integer | How many articles mentioned this name in the last 7 days, at any relevance. |
Author your own
The catalog is the built-in vocabulary, not the ceiling: custom signals let you name a SQL expression over these signals and use it anywhere a built-in works.