Concepts
Schema
Everything you can query, in one place: 421+ signal columns per ticker, plus the bars, events, and news shapes. Each column is referenceable by bare name across the API.
Prefer to browse them interactively and watch a signal fire on a chart? Open Explore →
Price
Price & change
| Column | Type | Description |
|---|---|---|
ask | numeric | Best ask from the consolidated NBBO at the most recent snapshot tick. |
ask_size | integer | Round lots at the ask. Raw count — NOT multiplied by 100. |
bid | numeric | Best bid from the consolidated NBBO at the most recent snapshot tick. |
bid_size | integer | Round lots at the bid. Raw count — NOT multiplied by 100. Multiply by 100 to get share count. |
change_1m | numeric | Percent change vs. close ~21 trading days ago. Daily; see `change_1w` for note. |
change_1w | numeric | Percent change in close vs. the close 5 trading days ago. Computed post-close; does NOT update intraday — use `from_open_pc` + `day_change_pct` for intraday-aware change. |
change_1y | numeric | Percent change vs. close ~252 trading days ago. |
change_3m | numeric | Percent change vs. close ~63 trading days ago. |
change_6m | numeric | Percent change vs. close ~126 trading days ago. |
change_ytd | numeric | Percent change since the first trading day of the calendar year. |
day_change | numeric | Absolute change vs `previous_close`. |
day_change_pct | numeric | Percent change vs `previous_close`. Expressed as a decimal fraction (0.05 = 5%), not a whole percent. |
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_pc | numeric | Intraday: percent change from today’s session open to the latest snapshot price. Resets at session boundary. |
gap | numeric | Overnight gap as percent: `(today_open − prev_close) / prev_close`. Signed — positive = gap up, negative = gap down. Use this for custom gap thresholds; the boolean shortcuts `gap_up` (≥3%) and `gap_up_extreme` (≥10%) cover the canonical levels. |
gap_pct | numeric | Percent change of `session_open` vs `previous_close`. One value per session. |
min_close | numeric | Current minute bar’s most-recent close (last print). |
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_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. |
min_trade_count | integer | Current minute bar’s number of trades. |
min_volume | integer | Current minute bar’s accumulated shares traded. |
min_vwap | numeric | Current minute bar’s volume-weighted average price. |
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. |
prev_day_volume | bigint | Previous trading day’s total volume (raw shares). |
prev_day_vwap | numeric | Previous trading day’s session VWAP. |
previous_close | numeric | Official prior-session close. |
price | numeric | Most recent trade price. |
session_high | numeric | Highest trade so far today. |
session_low | numeric | Lowest trade so far today. |
session_open | numeric | Today’s opening print. |
52-week & period extremes
| 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. |
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. |
52-week & 20-day extremes
| Column | Type | Description |
|---|---|---|
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 is within 0.5% of the 52-week high.close >= high_52w |
at_52w_low | state | Price is within 0.5% of the 52-week low.close <= low_52w |
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 |
Session position
| Column | Type | Description |
|---|---|---|
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 |
Gaps
| Column | Type | Description |
|---|---|---|
gap_down | event | Today opened 3%+ below prior close.(close_prev - open) / close_prev >= 0.03 AND price still below close_prev (gap has not been reclaimed) |
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 AND price still above close_prev (gap has not been filled negative) |
gap_up_extreme | event | Today opened 10%+ above prior close.(open - close_prev) / close_prev >= 0.10 |
Volume
| 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. |
day_vwap | numeric | Today’s session volume-weighted average price. |
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. |
relative_volume | numeric | Ratio of today’s pace-adjusted volume to the 10-day average. 2.0 means 2× normal. |
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_percent_of_float | numeric | Short interest as a fraction of the free float. 0.10 = 10% of float is short. |
short_volume_ratio | numeric | Share of the day's volume executed as short sales (0–1). |
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_today | bigint | Shares traded so far today. |
volume_trend_5d | text | Slope of daily volume regressed over the last 5 trading days. Positive = building, negative = drying. |
high_short_interest | state | More than 20% of the float is sold short.short_percent_of_float > 20 |
high_volume_alert | event | Today’s volume is at least 2× the 30-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 | This name is in a sustained quiet stretch.avg(volume, 10) <= 0.75 * avg_volume_10d |
quiet_minute | state | A sustained quiet stretch — 10-minute volume average well below recent baseline.avg(volume, 10m) < 0.5 * avg(volume, prior 30m) |
short_volume_spike | state | More than 60% of the day's volume was executed as short sales.short_volume_ratio > 0.60 |
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) |
Technicals
Technical indicators
| Column | Type | Description |
|---|---|---|
adx_14 | numeric | ADX 14 |
bollinger_lower | numeric | Lower Bollinger band (20-period, 2σ). |
bollinger_upper | numeric | Upper Bollinger band (20-period, 2σ). |
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. |
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 |
plus_di | numeric | +DI |
rsi_14 | numeric | Relative Strength Index, 14-period. Range 0–100. |
rsi_7 | numeric | RSI 7 |
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. |
stochastic_d | numeric | stochastic %D |
stochastic_k | numeric | stochastic %K |
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`. |
vwap | numeric | Daily volume-weighted average price from market open through the most recent print. Updates intraday with each new tick. |
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 |
Moving averages
| Column | Type | Description |
|---|---|---|
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 |
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 |
Momentum
| Column | Type | Description |
|---|---|---|
afternoon_drift_up | state | Afternoon session net up.close_1600 > close_1200 |
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 |
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_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' |
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 |
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 |
rsi_overbought | state | RSI(14) is in overbought territory.rsi_14 > 70 |
rsi_oversold | state | RSI(14) is in oversold territory.rsi_14 < 30 |
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 |
Trend
| Column | Type | Description |
|---|---|---|
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 |
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. |
Bollinger bands
| Column | Type | Description |
|---|---|---|
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 |
expanded_hourly_range | state | This hour’s range is unusually wide.(high - low) > 1.5 * atr_hourly_20 |
narrow_hourly_range | state | This hour’s range is unusually narrow.(high - low) < 0.5 * atr_hourly_20 |
Patterns
| 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 |
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) |
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 |
Volatility
| Column | Type | Description |
|---|---|---|
atr_14 | numeric | 14-day Average True Range. |
atr_percent | numeric | ATR(14) as a percent of price. Useful as a volatility filter. |
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_pct_b | numeric | Position within Bollinger bands. 0 = at lower band, 1 = at upper band, >1 = outside. |
bollinger_width | numeric | `(bollinger_upper − bollinger_lower) / bollinger_middle`. Normalized width — measures volatility regime. Narrow widths often precede expansion (see `bollinger_squeeze` in flags.ts). |
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. |
Relative position
| Column | Type | Description |
|---|---|---|
pct_from_52w_high | numeric | Percent below the 52-week high. Always >= 0 (use the `at_52w_high` flag to test highs). |
pct_from_52w_low | numeric | Percent above the 52-week low. Always >= 0. |
pct_from_sma_10 | numeric | Percent difference between current close and `sma_10`. Positive = above MA, negative = below. Continuous version of the `above_sma_10` boolean. |
pct_from_sma_100 | numeric | Percent difference between current close and `sma_100`. Daily-cadence because the slow MA changes slowly. |
pct_from_sma_20 | numeric | Percent difference between current close and `sma_20`. Continuous version of the `above_sma_20` boolean. |
pct_from_sma_200 | numeric | Percent distance from the 200-day SMA. Negative when price is below the average. |
pct_from_sma_50 | numeric | Percent distance from the 50-day SMA. Negative when price is below the average. |
pct_from_vwap | numeric | Percent distance from today’s VWAP. |
position_in_52w_range | numeric | Where the live price sits in the 52-week range, 0–100. 0 = at low, 100 = at high. |
Edge-triggered alerts
| Column | Type | Description |
|---|---|---|
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) >= 0.05 |
price_down_3pct | event | Intraday move of -3% or worse vs prior close.day_change_pct <= -3 |
price_up_3pct | event | Intraday move of 3%+ vs prior close.day_change_pct >= 3 |
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 |
Fundamentals
| 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. |
basic_average_shares | bigint | Weighted-average basic shares outstanding for the quarter. Denominator for basic EPS. |
basic_earnings_per_share | numeric | Basic EPS for the most-recently reported quarter. Signed. |
benefits_costs_expenses | bigint | Benefits and post-employment costs line item, where reported. Mostly insurance / utility issuers. |
beta | numeric | Trailing beta vs SPY. Null for issuers with insufficient price history. |
book_value | numeric | Trailing-12m book value per share. Computed from `equity_attributable_to_parent / diluted_average_shares`. |
cash_on_hand | bigint | Cash plus cash equivalents — the most-liquid balance-sheet line. |
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). |
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. |
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. |
diluted_average_shares | bigint | Weighted-average diluted shares outstanding for the quarter. Denominator for diluted EPS. |
diluted_eps_ttm | numeric | Trailing-12m diluted EPS. |
dividend_yield | numeric | Forward dividend yield as a fraction (0.025 = 2.5%). Null for non-payers. |
earnings_growth_yoy | 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). |
enterprise_value | bigint | Market cap + total debt − cash. |
eps | numeric | Earnings per share (trailing twelve months). |
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. |
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). |
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. |
fixed_assets | bigint | Property, plant, and equipment (PP&E), net of accumulated depreciation. |
float_shares | bigint | Public float (shares available to trade). |
forward_pe | numeric | Forward price-to-earnings ratio using next-12m consensus EPS. Lower = cheaper on forward basis. |
free_cash_flow | bigint | Operating cash flow minus capital expenditures. Cash the business generates above what it needs to maintain operations. |
free_float_percent | numeric | Percent of shares outstanding actually available for trading (excludes insider / restricted holdings). |
gross_margin | numeric | `gross_profit / revenues` for the quarter. |
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. |
income_tax_expense_benefit_deferred | bigint | Deferred portion of income tax. Rare line item. |
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 obligations. Often NULL because issuers fold this into `noncurrent_liabilities` instead of breaking it out. |
market_cap | bigint | Market capitalization. Updated daily; intraday change derived from `price` × `shares_outstanding`. |
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. |
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. |
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. |
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. |
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. |
operating_margin | numeric | `operating_income_loss / revenues` for the quarter. |
operating_margin_ttm | numeric | Trailing-12m operating margin. |
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.). |
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. |
percent_insiders | numeric | Percent of shares held by company insiders (executives, directors, founders). |
percent_institutions | numeric | Percent of shares held by institutional investors (mutual funds, ETFs, pensions). |
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. |
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. |
research_and_development | bigint | R&D spend for the quarter. NULL for companies that don't report R&D as a line item. |
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. |
revenue_growth_yoy | numeric | Year-over-year revenue growth: most-recent quarter vs same quarter prior year. Signed; positive = growth. |
revenue_growth_yoy_quarterly | 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. |
shares_outstanding | bigint | Total shares outstanding. |
wages | bigint | Wages and salaries line item, where reported. Rare — most companies fold this into SG&A. |
weighted_shares_outstanding | bigint | Weighted shares outstanding from the latest 10-Q / 10-K. Used by `market_cap = price × weighted_shares_outstanding`. |
Events
Event dates
| Column | Type | Description |
|---|---|---|
days_to_earnings | integer | Calendar days until next earnings announcement. Negative after report. |
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`. |
earnings_beat_streak | integer | Consecutive quarters the company has beaten consensus EPS estimates. Resets to 0 on a miss. |
earnings_date | date | Next scheduled earnings announcement date. Null if not scheduled. |
earnings_fiscal_quarter | text | Fiscal quarter the next earnings report covers (e.g. "2026Q1"). Distinct from calendar quarter — covers companies whose fiscal year doesn't match the calendar. |
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). |
float_effective_date | date | As-of date for the current float-shares figure. |
ipo_date | date | Date of the company's IPO, when known. |
last_earnings_surprise | numeric | `last_reported_eps − last_eps_estimate`. Signed; positive = beat. |
last_earnings_surprise_pct | numeric | Beat as percent of consensus. |
last_eps_estimate | numeric | Consensus EPS estimate going into the most recent earnings announcement. |
last_reported_eps | numeric | Actual EPS reported in the most recent earnings announcement. |
short_interest_settlement_date | date | Settlement date of the most recent short-interest report. |
Corporate events
| Column | Type | Description |
|---|---|---|
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 |
dividend_approaching | state | The ex-dividend date falls within the next 7 days.ex_dividend_date between today and today + 7d |
earnings_approaching | state | Earnings within 3 days.days_to_earnings = 3 (exactly three days before the scheduled earnings 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 |
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 |
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 |
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. |
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 |
Profile
| Column | Type | Description |
|---|---|---|
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 columns (which remain in sync as backward-compat shortcuts). |
country | text | ISO country code of the issuer. |
currency_name | text | Currency the prices are quoted in (`usd`, `eur`, `gbp`, etc.). Effectively always `usd` for US-listed equities. |
etf_holders | text[] | ETFs that hold this ticker, ordered by the ticker's weight within each (the reverse of ETF holdings). Filter with array operators in /v2/scan, e.g. `'SPY' = ANY(etf_holders)` to find SPY constituents. Refreshed nightly post-close. |
exchange | text | Primary listing exchange, human-readable name — e.g. `NASDAQ`, `NYSE`, `NYSE Arca`, `Cboe BZX`, `NYSE American`. 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. |
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. |
total_employees | integer | Number of full-time employees as last reported. Useful for size-based filters ("small-cap by employee count"). |
high_beta | classification | Beta above 1.5: moves more than the market.beta > 2.0. |
high_dividend_yield | classification | Dividend yield above 4%.dividend_yield >= 0.04. |
high_margin | state | Trailing-twelve-month profit margin is above 20%.profit_margin_ttm > 0.20 |
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 |
low_float | classification | Public float under 50 million shares.float_shares < 10,000,000. |
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 |
profitable | classification | Most-recently-reported quarter had positive net income.net_income_loss > 0 |
small_cap | classification | Market cap between $300M and $2B.market_cap >= 300M AND market_cap < 2B. |
ultra_low_float | state | Float below 5M shares — extremely thin supply.float_shares < 5e6 |
value_stock | classification | Trades at a value-style P/E.pe_ratio > 0 AND pe_ratio < 15. |
Analyst
| 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_consensus_target_price | numeric | Mean of contributing analysts' 12-month price targets. |
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`. |
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. |
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. |
above_price_target | state | Current price is above the consensus analyst target.price > analyst_consensus_target_price |
bearish_consensus | state | Consensus analyst rating is `sell` or `strong sell`.analyst_consensus_rating IN ('sell', 'strong sell') |
below_price_target | state | Current price is below the consensus analyst target.price < analyst_consensus_target_price |
bullish_consensus | state | Consensus analyst rating is `strong buy` or `buy`.analyst_consensus_rating IN ('strong buy', 'buy') |
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 |
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') |
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 |
well_covered | flag | Ten or more analyst firms cover the ticker.analyst_count_total >= 10 |
News
| Column | Type | Description |
|---|---|---|
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. |
Identity & reference
Identification
| 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. |
asset_type | text | Asset class. One of `equity`, `etf`, or `crypto`. |
branding_icon_url | text | URL of the company's square icon image. |
branding_logo_url | text | URL of the company's logo image. |
cik | text | SEC Central Index Key — the company's identifier in EDGAR filings. |
composite_figi | text | Composite FIGI — Bloomberg's cross-exchange security identifier. |
description | text | Business description of the company. |
homepage_url | text | Company homepage URL. |
list_date | text | Date the symbol was first listed on its exchange. |
name | text | Company or asset display name. |
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. |
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_root | text | Root symbol — the base ticker without class or suffix modifiers. |
active | state | Ticker is actively traded — not delisted or halted.active = true |
other
| Column | Type | Description |
|---|---|---|
asset_class | text | Asset class of the ticker: stocks | rates | crypto | fx. Matches asset_class.slug exactly — the registry and the column share one vocabulary. |
inactive_at | timestamp without time zone | when marked inactive |
inactive_reason | text | why marked inactive |
ticker_category | text | Sub-class within an asset class: treasury_curve, policy_rate, curve_spread (rates); stablecoin, monetary_metal (crypto/fx). NULL for ordinary equities. |
breaking_above_20d_high | flag | Price is at or above its 20-day high on at least 2x average volume — a range breakout with volume confirmation. |
breaking_below_20d_low | flag | Price is at or below its 20-day low on at least 2x average volume — a range breakdown with volume confirmation. |
momentum | flag | momentum present |
momentum_down | flag | downward momentum |
momentum_up | flag | upward momentum |
top_gainer | flag | among the top gainers |
top_loser | flag | among the top losers |
The other queryable tables
The per-ticker columns above are the primary surface, but three more shapes are queryable. 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).
| Column | Type | Description |
|---|---|---|
ticker | text | symbol (key) |
t | bigint | bar start (epoch ms, key) |
o | numeric | open |
h | numeric | high |
l | numeric | low |
c | numeric | close |
v | bigint | volume |
vw | numeric | volume-weighted average price |
n | integer | trade 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' — see each kind's page for its payload schema).
| Column | Type | Description |
|---|---|---|
ticker | text | Symbol the event belongs to. |
ts | timestamptz | When the event occurred. |
kind | text | Event kind (dividend, split, insider, analyst, signal, news…). |
payload | jsonb | Kind-specific fields. |
news_article — the news grammar (15 columns)
| Column | Type | Description |
|---|---|---|
id | bigint | Article id (primary key). |
url | text | Canonical article URL — the dedup key (UNIQUE index). |
time_published | timestamp with time zone | Publication timestamp. |
title | text | Headline. |
summary | text | Article summary. |
source | text | Publisher name. |
source_domain | text | Publisher domain. |
category | text | AV category within the source. |
authors | jsonb | Author list. |
topics | jsonb | Topic tags with relevance scores. |
banner_image | text | Banner image URL (~80% of recent articles carry one). |
overall_sentiment_score | numeric | Article-level sentiment score (−1..1). |
overall_sentiment_label | text | Bearish…Bullish label for the score. |
tickers | text[] | Tickers the article mentions. |
ticker_data | jsonb | Per-ticker relevance + sentiment payload. |