View as markdown
The data

Schema

376+ queryable columns per ticker. Numeric and string fields below, then boolean flags by family. Reference any by bare name in a SQL WHERE clause or as the signal in any /v2 endpoint.

Identification

NameTypeDescription
tickerstringTicker symbol. Equities use the exchange symbol (e.g. AAPL). Crypto uses the bare symbol (e.g. BTC, ETH).
namestringCompany or asset display name.
asset_typeenumAsset class. One of `equity`, `etf`, or `crypto`.
activebooleanWhether this ticker is actively tracked. False for delisted or auto-halted symbols.

Price & change

NameTypeDescription
pricenumberMost recent trade price.
previous_closenumberOfficial prior-session close.
session_opennumberToday’s opening print.
session_highnumberHighest trade so far today.
session_lownumberLowest trade so far today.
day_changenumberAbsolute change vs `previous_close`.
day_change_pctnumberPercent change vs `previous_close`. Expressed as a percent (5.2 = 5.2%), not a fraction.
gap_pctnumberPercent change of `session_open` vs `previous_close`. One value per session.
premarket_pricenumberLast premarket price, if available.
afterhours_pricenumberLast after-hours price, if available.
bidnumberBest bid from Polygon’s consolidated NBBO at the most recent snapshot tick.
bid_sizeintegerRound lots at the bid. Raw count — NOT multiplied by 100. Multiply by 100 to get share count.
asknumberBest ask from Polygon’s consolidated NBBO at the most recent snapshot tick.
ask_sizeintegerRound lots at the ask. Raw count — NOT multiplied by 100.
change_1wnumberPercent 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_1mnumberPercent change vs. close ~21 trading days ago. Daily; see `change_1w` for note.
change_3mnumberPercent change vs. close ~63 trading days ago.
change_6mnumberPercent change vs. close ~126 trading days ago.
change_1ynumberPercent change vs. close ~252 trading days ago.
change_ytdnumberPercent change since the first trading day of the calendar year.
from_open_pcnumberIntraday: percent change from today’s session open to the latest snapshot price. Resets at session boundary.
premarket_change_pcnumberPre-market: percent change from the previous session close to the latest pre-market print. Resets at session boundary.
prev_day_opennumberPrevious trading day’s official open.
prev_day_highnumberPrevious trading day’s session high.
prev_day_lownumberPrevious trading day’s session low.
prev_day_volumeintegerPrevious trading day’s total volume (raw shares).
prev_day_vwapnumberPrevious trading day’s session VWAP.
min_opennumberCurrent minute bar’s open. Updates every snapshot tick during market hours.
min_highnumberCurrent minute bar’s running high.
min_lownumberCurrent minute bar’s running low.
min_closenumberCurrent minute bar’s most-recent close (last print).
min_vwapnumberCurrent minute bar’s volume-weighted average price.
min_volumeintegerCurrent minute bar’s accumulated shares traded.
min_trade_countintegerCurrent minute bar’s number of trades.
min_dollar_volumenumberCurrent minute bar’s dollar volume (close × volume approximation).
min_day_accumulated_volumeintegerToday’s cumulative shares traded across the session so far (4 AM ET onward).
min_day_accumulated_dollar_volumenumberToday’s cumulative dollar volume across the session so far.
gapnumberOvernight 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.
days_upintegerConsecutive trading days closing higher than the prior close. Resets to 0 on a down day.
days_downintegerConsecutive trading days closing lower than the prior close. Resets to 0 on an up day.
afterhours_change_pcnumberPercent 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.

Volume

NameTypeDescription
volume_todayintegerShares traded so far today.
avg_volume_10dinteger10-day trailing average daily volume.
avg_volume_30dinteger30-day trailing average daily volume.
relative_volumenumberRatio of today’s pace-adjusted volume to the 10-day average. 2.0 means 2× normal.
day_dollar_volumenumberToday’s cumulative dollar volume traded.
day_vwapnumberToday’s session volume-weighted average price.
options_volumeintegerToday’s options contract volume across all listed strikes and expiries for the underlying. Calls + puts combined.
volume_change_vs_avgnumberRatio of today’s pace-adjusted volume to its 10-day average. Numeric surface of the same denominator `relative_volume` uses.
volume_ratio_5minnumberCurrent 5-minute window’s share volume divided by the 10-day average of that 5-minute window. Detects intraday-localized bursts.
volume_trend_5dnumberSlope of daily volume regressed over the last 5 trading days. Positive = building, negative = drying.
days_to_covernumberShort interest divided by 30-day average daily volume. Trader’s "how many days of normal trading to cover all shorts" measure.
short_interestintegerRaw 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_floatnumberShort interest as a fraction of the free float. 0.10 = 10% of float is short.
illiquidbooleanClassification: `avg_volume_30d < 100k shares OR day_dollar_volume < $1M`. Useful to exclude micro-caps from scans. Boolean form proper belongs in flags.ts under `classification`; numeric thresholds documented here.
high_short_interestbooleanClassification: `short_percent_of_float >= 0.15`. Boolean form belongs in flags.ts.

52-week & period extremes

NameTypeDescription
high_52wnumberHighest trade in the trailing 52 weeks (live, includes today).
low_52wnumberLowest trade in the trailing 52 weeks (live, includes today).
high_20dnumberHighest trade in the trailing 20 trading days.
low_20dnumberLowest trade in the trailing 20 trading days.
days_since_52w_highintegerTrading days since the most recent 52-week high.
days_since_52w_lowintegerTrading days since the most recent 52-week low.
high_5dnumberHighest intraday high over the last 5 trading sessions, inclusive of the current session.
low_5dnumberLowest intraday low over the last 5 trading sessions, inclusive of the current session.
high_5d_eodnumberHighest close over the last 5 trading sessions. Close-basis (no intraday wicks) — pair with `high_5d` to distinguish.
low_5d_eodnumberLowest close over the last 5 trading sessions. Close-basis.
high_20d_eodnumberHighest close over the last 20 trading sessions. Close-basis. For the intraday-wick variant use `at_20d_high`.
low_20d_eodnumberLowest close over the last 20 trading sessions. Close-basis.
high_52w_eodnumberHighest close over the trailing 52 weeks. The `_eod` distinguishes from the canonical intraday `52_week_high` (which captures wicks).
low_52w_eodnumberLowest close over the trailing 52 weeks.
high_52w_datedateDate the trailing-52-week high was set. Useful for "fresh 52w highs in the last 30 days" scans.
low_52w_datedateDate the trailing-52-week low was set.
last_20d_high_datedateDate the trailing-20-day high was set.
last_20d_low_datedateDate the trailing-20-day low was set.

Relative position

NameTypeDescription
pct_from_sma_10numberPercent difference between current close and `sma_10`. Positive = above MA, negative = below. Continuous version of the `above_sma_10` boolean.
pct_from_sma_20numberPercent difference between current close and `sma_20`. Continuous version of the `above_sma_20` boolean.
pct_from_sma_100numberPercent difference between current close and `sma_100`. Daily-cadence because the slow MA changes slowly.
pct_from_52w_highnumberPercent below the 52-week high. Always >= 0 (use the `at_52w_high` flag to test highs).
pct_from_52w_lownumberPercent above the 52-week low. Always >= 0.
position_in_52w_rangenumberWhere the live price sits in the 52-week range, 0–100. 0 = at low, 100 = at high.
pct_from_sma_50numberPercent distance from the 50-day SMA. Negative when price is below the average.
pct_from_sma_200numberPercent distance from the 200-day SMA. Negative when price is below the average.
pct_from_vwapnumberPercent distance from today’s VWAP.

Volatility

NameTypeDescription
atr_14number14-day Average True Range.
atr_percentnumberATR(14) as a percent of price. Useful as a volatility filter.
bollinger_pct_bnumberPosition within Bollinger bands. 0 = at lower band, 1 = at upper band, >1 = outside.
bollinger_middlenumber20-day SMA — the centerline of the Bollinger band. `bollinger_upper` and `bollinger_lower` are already documented; this fills in the missing middle.
bollinger_widthnumber`(bollinger_upper − bollinger_lower) / bollinger_middle`. Normalized width — measures volatility regime. Narrow widths often precede expansion (see `bollinger_squeeze` in flags.ts).
vwap_upper_bandnumberVWAP + 2 standard deviations of intraday price action. Dynamic resistance reference.
vwap_lower_bandnumberVWAP − 2 standard deviations. Dynamic support reference.

Technical indicators

NameTypeDescription
vwapnumberDaily volume-weighted average price from market open through the most recent print. Updates intraday with each new tick.
sma_100number100-day simple moving average of close. Slower than `sma_50`, faster than `sma_200` — useful for intermediate-term trend.
ema_9number9-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.
ema_12number12-day EMA. Fast-side input of canonical MACD (`macd = ema_12 − ema_26`).
ema_21number21-day EMA. Often paired with `ema_9` for short-trend bias; also serves as a dynamic-support reference.
ema_26number26-day EMA. Slow-side input of canonical MACD (`macd = ema_12 − ema_26`).
sma_10_crossed_above_50_todaybooleanBullish short-trend trigger: `sma_10` crossed above `sma_50` on today’s close. One-day event flag (not sticky); resets next session. Faster cousin of `golden_cross` (which is the 50/200 pair).
sma_10_crossed_below_50_todaybooleanBearish short-trend trigger: `sma_10` crossed below `sma_50` on today’s close. One-day event flag (not sticky); resets next session. Faster cousin of `death_cross`.
sma_10number10-day simple moving average.
sma_20number20-day simple moving average.
sma_50number50-day simple moving average.
sma_200number200-day simple moving average.
rsi_14numberRelative Strength Index, 14-period. Range 0–100.
macd_linenumberMACD line (12-EMA minus 26-EMA).
macd_signalnumberMACD signal line (9-EMA of MACD line).
macd_histogramnumberMACD line minus signal. Positive when bullish, negative when bearish.
bollinger_uppernumberUpper Bollinger band (20-period, 2σ).
bollinger_lowernumberLower Bollinger band (20-period, 2σ).
trend_shortenumShort-term trend classification from short-MA slope. One of `uptrend`, `downtrend`, `sideways`.
trend_mediumenumMedium-term trend classification from `sma_50` slope. One of `uptrend`, `downtrend`, `sideways`.
trend_longenumLong-term trend classification from `sma_200` slope. One of `uptrend`, `downtrend`, `sideways`.

Fundamentals

NameTypeDescription
market_capnumberMarket capitalization. Updated daily; intraday change derived from `price` × `shares_outstanding`.
pe_rationumberPrice-to-earnings ratio (trailing twelve months). Null for unprofitable issuers.
epsnumberEarnings per share (trailing twelve months).
dividend_yieldnumberForward dividend yield as a fraction (0.025 = 2.5%). Null for non-payers.
betanumberTrailing beta vs SPY. Null for issuers with insufficient price history.
float_sharesintegerPublic float (shares available to trade).
shares_outstandingintegerTotal shares outstanding.
next_eps_estimatenumberWall Street consensus EPS estimate for the next reported quarter — weighted average across analyst contributors.
next_eps_estimate_highnumberHighest single-analyst EPS estimate for the next reported quarter.
next_eps_estimate_lownumberLowest single-analyst EPS estimate for the next reported quarter.
next_revenue_estimateintegerWall Street consensus revenue estimate (USD, full dollars) for the next reported quarter.
eps_estimate_revision_up_30dintegerCount of analysts who raised their next-quarter EPS estimate in the last 30 days. A positive read on forward sentiment momentum.
eps_estimate_revision_down_30dintegerCount of analysts who lowered their next-quarter EPS estimate in the last 30 days.
earnings_growth_yoynumberYear-over-year EPS growth percent from the most recently reported quarter vs. the same quarter prior year. Signed; positive = growth.
revenuesnumberTotal revenue for the most-recently reported quarter (Polygon `/stocks/financials/v1/income-statements`).
revenue_ttmnumberTrailing-twelve-month revenue (AlphaVantage-sourced).
revenue_per_share_ttmnumberTrailing-12m revenue divided by diluted shares outstanding. USD per share.
revenue_growth_yoynumberYear-over-year revenue growth: most-recent quarter vs same quarter prior year. Signed; positive = growth.
revenue_growth_yoy_quarterlynumberYoY quarterly revenue growth from AlphaVantage. Signed.
cost_of_revenuenumberCost of goods sold for the quarter.
gross_profitnumber`revenues − cost_of_revenue` for the quarter.
gross_profit_ttmnumberTrailing-12m gross profit (AlphaVantage).
operating_expensesnumberSum of operating costs reported on the income statement for the quarter (excludes COGS).
operating_income_lossnumberOperating income or loss for the quarter. Signed.
costs_and_expensesnumberTotal costs and expenses reported on the income statement (COGS + opex).
selling_general_and_administrative_expensesnumberSG&A for the quarter.
research_and_developmentnumberR&D spend for the quarter. NULL for companies that don't report R&D as a line item.
wagesnumberWages and salaries line item, where reported. Rare — most companies fold this into SG&A.
benefits_costs_expensesnumberBenefits and post-employment costs line item, where reported. Mostly insurance / utility issuers.
nonoperating_income_lossnumberNon-operating income/loss (interest income, gains/losses on investments, etc.) for the quarter. Signed.
income_tax_expense_benefitnumberIncome tax expense (positive) or benefit (negative) for the quarter.
income_tax_expense_benefit_deferrednumberDeferred portion of income tax. Rare line item.
income_loss_from_continuing_operations_before_taxnumberPre-tax income from continuing operations for the quarter.
income_loss_from_continuing_operations_after_taxnumberAfter-tax income from continuing operations for the quarter.
net_income_lossnumberBottom-line net income/loss for the quarter. Signed.
net_income_loss_attributable_to_parentnumberNet income attributable to the parent entity (excludes noncontrolling interest).
net_income_loss_attributable_to_noncontrolling_interestnumberPortion of net income attributable to minority owners of consolidated subsidiaries. Usually 0 for non-conglomerates.
net_income_loss_available_to_common_stockholders_basicnumberNet income available to common shareholders — numerator for basic EPS.
preferred_stock_dividends_and_other_adjustmentsnumberPreferred-share dividends and other adjustments subtracted from net income to arrive at the common-stockholder figure.
participating_securities_distributed_and_undistributed_earningsnumberEarnings allocated to participating securities (convertible-debt issuers, certain RSU structures).
basic_average_sharesintegerWeighted-average basic shares outstanding for the quarter. Denominator for basic EPS.
basic_earnings_per_sharenumberBasic EPS for the most-recently reported quarter. Signed.
diluted_average_sharesintegerWeighted-average diluted shares outstanding for the quarter. Denominator for diluted EPS.
diluted_eps_ttmnumberTrailing-12m diluted EPS (AlphaVantage).
weighted_shares_outstandingintegerWeighted shares outstanding from the latest 10-Q / 10-K. Used by `market_cap = price × weighted_shares_outstanding`.
ebitdanumberEarnings before interest, taxes, depreciation, and amortization (AlphaVantage, TTM).
enterprise_valuenumberMarket cap + total debt − cash.
assetsnumberTotal assets on the balance sheet as of the most recently reported quarter.
current_assetsnumberAssets expected to be converted to cash or used up within 12 months.
noncurrent_assetsnumberLong-lived assets — property, plant, equipment, intangibles, long-term investments.
fixed_assetsnumberProperty, plant, and equipment (PP&E), net of accumulated depreciation.
inventorynumberInventory on hand. NULL for service and financial companies that don't carry inventory.
other_current_assetsnumberCurrent assets not separately broken out (prepaid expenses, short-term receivables, etc.).
other_noncurrent_assetsnumberNon-current assets not separately broken out (intangibles, deferred tax assets, etc.).
cash_on_handnumberCash plus cash equivalents — the most-liquid balance-sheet line.
liabilitiesnumberTotal liabilities on the balance sheet.
current_liabilitiesnumberLiabilities due within 12 months — accounts payable, short-term debt, accrued expenses.
noncurrent_liabilitiesnumberLiabilities due beyond 12 months — long-term debt, deferred taxes, pension obligations.
other_current_liabilitiesnumberCurrent liabilities not separately broken out.
accounts_payablenumberTrade payables to suppliers as of the quarter end.
long_term_debtnumberLong-term debt obligations. Often NULL because issuers fold this into `noncurrent_liabilities` instead of breaking it out.
equitynumberTotal shareholders' equity.
equity_attributable_to_parentnumberEquity attributable to the parent entity's shareholders (excludes minority interest).
equity_attributable_to_noncontrolling_interestnumberEquity attributable to minority shareholders of consolidated subsidiaries. Usually 0 for non-conglomerates.
book_valuenumberTrailing-12m book value per share (AlphaVantage). Computed from `equity_attributable_to_parent / diluted_average_shares`.
debt_to_equitynumberTotal debt divided by total shareholders' equity. Common leverage ratio; lower = less leveraged.
current_rationumberCurrent assets ÷ current liabilities. Short-term liquidity. >1 = able to cover short-term obligations from current assets.
quick_rationumber(Current assets − inventory) ÷ current liabilities. Stricter liquidity — assumes inventory isn't quickly convertible.
free_cash_flownumberOperating cash flow minus capital expenditures. Cash the business generates above what it needs to maintain operations.
forward_penumberForward price-to-earnings ratio using next-12m consensus EPS. Lower = cheaper on forward basis.
peg_rationumberPE ratio divided by EPS growth rate (AlphaVantage). Few populated — AlphaVantage only computes PEG for tickers with positive earnings growth and analyst coverage.
price_to_booknumberCurrent price ÷ `book_value`. Common value-investing metric.
price_to_salesnumberCurrent price ÷ `revenue_per_share_ttm`. Often used when companies have no earnings.
price_to_cash_flownumberCurrent price ÷ operating cash flow per share. Less manipulable than P/E.
price_to_free_cash_flownumberCurrent price ÷ `free_cash_flow` per share. Strictest cash-based valuation.
ev_to_ebitdanumber`enterprise_value` ÷ `ebitda`. Capital-structure-neutral profitability multiple.
ev_to_salesnumber`enterprise_value` ÷ `revenue_ttm`. Capital-structure-neutral revenue multiple.
return_on_equitynumberNet income ÷ shareholders' equity. Quarterly figure.
return_on_equity_ttmnumberTrailing-12m return on equity (AlphaVantage).
return_on_assetsnumberNet income ÷ total assets. Quarterly figure.
return_on_assets_ttmnumberTrailing-12m return on assets (AlphaVantage).
profit_marginnumberNet income ÷ revenue. Quarterly.
profit_margin_ttmnumberTrailing-12m profit margin (AlphaVantage).
free_float_percentnumberPercent of shares outstanding actually available for trading (excludes insider / restricted holdings).
percent_insidersnumberPercent of shares held by company insiders (executives, directors, founders).
percent_institutionsnumberPercent of shares held by institutional investors (mutual funds, ETFs, pensions).
net_cash_flow_from_operating_activitiesnumberNet cash from operations for the quarter.
net_cash_flow_from_investing_activitiesnumberNet cash from investing activities (capex, acquisitions). Negative for net spend.
net_cash_flow_from_financing_activitiesnumberNet cash from financing (debt, dividends, buybacks).
net_cash_flownumberSum of operating + investing + financing cash flow — period change in cash.
net_cash_flow_from_operating_activities_continuingnumberSame as `net_cash_flow_from_operating_activities` but excludes discontinued operations.
net_cash_flow_from_investing_activities_continuingnumberInvesting cash flow excluding discontinued operations.
net_cash_flow_from_financing_activities_continuingnumberFinancing cash flow excluding discontinued operations.
net_cash_flow_continuingnumberTotal cash flow excluding discontinued operations. Rare line item — populated only for companies in active discontinued-ops winddown.
gross_marginnumber`gross_profit / revenues` for the quarter.
operating_marginnumber`operating_income_loss / revenues` for the quarter.
operating_margin_ttmnumberTrailing-12m operating margin (AlphaVantage).
liabilities_and_equitynumberTotal liabilities + total equity. Should equal `assets` (balance-sheet identity). Documented for completeness — useful as a sanity check rather than a scan target.

Classification

NameTypeDescription
sectorenumGICS sector. One of: Technology, Healthcare, Financials, Consumer Discretionary, Consumer Staples, Energy, Industrials, Materials, Utilities, Real Estate, Communication Services.
industrystringGICS industry within the sector.
etf_holdersarrayETFs 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.
exchangeenumListing exchange. One of `NYSE`, `NASDAQ`, `AMEX`, `OTC`, `CRYPTO`.
countrystringISO country code of the issuer.
cap_classenumMarket-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).
total_employeesintegerNumber of full-time employees as last reported. Useful for size-based filters ("small-cap by employee count").
marketenumAsset market: `stocks`, `fx`, `crypto`, `commodities`. Distinct from `asset_type` (which says equity / etf).
currency_namestringCurrency the prices are quoted in (`usd`, `eur`, `gbp`, etc.). Effectively always `usd` for US-listed equities.

Event dates

NameTypeDescription
earnings_datedateNext scheduled earnings announcement date. Null if not scheduled.
days_to_earningsintegerCalendar days until next earnings announcement. Negative after report.
earnings_fiscal_quarterstringFiscal 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_timeenumWhen in the trading day the next earnings will be reported. One of `BMO` (before market open), `AMC` (after market close), `DMH` (during market hours).
earnings_beat_streakintegerConsecutive quarters the company has beaten consensus EPS estimates. Resets to 0 on a miss.
last_reported_epsnumberActual EPS reported in the most recent earnings announcement.
last_eps_estimatenumberConsensus EPS estimate going into the most recent earnings announcement.
last_earnings_surprisenumber`last_reported_eps − last_eps_estimate`. Signed; positive = beat.
last_earnings_surprise_pctnumberBeat as percent of consensus.
dividendnumberMost-recent dividend amount per share.
dividend_datedateDate of the most-recent dividend payment.
dividend_frequencyenumPayment frequency: `quarterly`, `monthly`, `semiannual`, `annual`.
ex_dividend_datedateNext ex-dividend date.

News

NameTypeDescription
news_volumenumberCount of news articles published in the last 24 hours mentioning this ticker with AlphaVantage relevance score ≥ 0.6. Refreshed every 15 minutes. Null when no qualifying articles in the window.
news_volume_weighted_sentimentnumberRange -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.

Analyst ratings

NameTypeDescription
analyst_consensus_ratingenumConsensus analyst rating across contributing firms. One of `strong buy`, `buy`, `hold`, `sell`, `strong sell`. NULL for tickers without analyst coverage.
analyst_consensus_rating_valuenumberConsensus rating as a numeric score on the standard 1–5 scale (1 = strong buy, 5 = strong sell). Lower is more bullish.
analyst_consensus_target_pricenumberMean of contributing analysts' 12-month price targets.
analyst_target_price_highnumberHighest single-analyst 12-month price target across contributing firms.
analyst_target_price_lownumberLowest single-analyst 12-month price target across contributing firms.
analyst_target_upside_pctnumberImplied 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.
analyst_count_strong_buyintegerNumber of contributing firms rating the ticker as strong buy.
analyst_count_buyintegerNumber of contributing firms rating the ticker as buy.
analyst_count_holdintegerNumber of contributing firms rating the ticker as hold (neutral).
analyst_count_sellintegerNumber of contributing firms rating the ticker as sell.
analyst_count_strong_sellintegerNumber of contributing firms rating the ticker as strong sell.
analyst_count_totalintegerTotal 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_targetintegerNumber of contributing firms whose rating includes a published 12-month price target. Always ≤ `analyst_count_total`.
last_rating_datedateDate of the most recent rating action across all firms covering the ticker.
last_rating_firmstringName of the firm that issued the most recent rating action.
last_rating_actionenumAction taken in the most recent rating change. Common values: `upgrades`, `downgrades`, `initiates_coverage_on`, `maintains`, `reiterates`, `assumes`, `reinstates`, `suspends`.

Flags · Moving averages

NameKindDescriptionCondition
above_sma_10statePrice is above the 10-day simple moving average.close > sma_10
above_sma_20statePrice is above the 20-day simple moving average.close > sma_20
above_sma_50statePrice is above the 50-day simple moving average.close > sma_50
above_sma_200statePrice is above the 200-day simple moving average.close > sma_200
above_vwapstatePrice is above today’s volume-weighted average price.close > vwap
golden_crossevent50-day SMA crossed above 200-day SMA today.Yesterday: sma_50 ≤ sma_200. Today: sma_50 > sma_200.
golden_regimestateLong-term uptrend regime — 50-day SMA above 200-day SMA.sma_50 > sma_200
death_crossevent50-day SMA crossed below 200-day SMA today.Yesterday: sma_50 ≥ sma_200. Today: sma_50 < sma_200.
death_regimestateLong-term downtrend regime — 50-day SMA below 200-day SMA.sma_50 < sma_200
macd_above_signalstateMACD line is above its signal line.macd > macd_signal
macd_below_signalstateMACD line is below its signal line.macd < macd_signal
above_vwap_minutestateCurrent price above session VWAP.close > vwap_session

Flags · Trend

NameKindDescriptionCondition
in_uptrendstateStacked uptrend across short, medium, and long horizons.close > sma_10 AND sma_10 > sma_20 AND close > sma_50 AND close > sma_200
in_downtrendstateStacked downtrend across short, medium, and long horizons.close < sma_10 AND sma_10 < sma_20 AND close < sma_50 AND close < sma_200
trend_reversal_bullish_todayeventTrend flipped from down to up today.Yesterday: in_downtrend. Today: in_uptrend.
trend_reversal_bearish_todayeventTrend flipped from up to down today.Yesterday: in_uptrend. Today: in_downtrend.

Flags · 52-week & 20-day extremes

NameKindDescriptionCondition
at_52w_highstatePrice is within 0.5% of the 52-week high.close >= high_52w * 0.995
at_52w_lowstatePrice is within 0.5% of the 52-week low.close <= low_52w * 1.005
at_20d_highstatePrice is at or above the 20-day high.close >= high_20d
at_20d_lowstatePrice is at or below the 20-day low.close <= low_20d
approaching_52w_highstatePrice is within 5% of the 52-week high.close >= high_52w * 0.95 AND close < high_52w * 0.995
approaching_52w_lowstatePrice is within 5% of the 52-week low.close <= low_52w * 1.05 AND close > low_52w * 1.005
tested_session_high_recentstatePrice touched today’s session high within the last 5 minutes.max(high, last 5 min) >= session_high * 0.999
tested_session_low_recentstatePrice touched today’s session low within the last 5 minutes.min(low, last 5 min) <= session_low * 1.001

Flags · Session position

NameKindDescriptionCondition
above_session_openstateClose above today’s session-open price.close > open_0930
above_premarket_highstateClose above the pre-market session high.close > max(price[04:00..09:30])
below_premarket_lowstateClose below the pre-market session low.close < min(price[04:00..09:30])
at_session_highstateAt today’s intraday session high (within tolerance).price >= session_high * 0.999
at_session_lowstateAt today’s intraday session low (within tolerance).price <= session_low * 1.001
above_yesterday_closestateClose above the prior session’s close.close > close_prev
above_yesterday_highstateClose above the prior session’s intraday high.close > high_prev
below_yesterday_lowstateClose below the prior session’s intraday low.close < low_prev

Flags · Gaps

NameKindDescriptionCondition
gap_upeventToday opened 3%+ above prior close.(open - close_prev) / close_prev >= 0.03
gap_downeventToday opened 3%+ below prior close.(close_prev - open) / close_prev >= 0.03
gap_up_extremeeventToday opened 10%+ above prior close.(open - close_prev) / close_prev >= 0.10
gap_down_extremeeventToday opened 10%+ below prior close.(close_prev - open) / close_prev >= 0.10
gap_filled_todayeventToday’s opening gap was closed by an intraday move.Opened with gap >= 0.5% AND intraday range straddled close_prev.

Flags · Bollinger bands

NameKindDescriptionCondition
at_bollinger_upperstatePrice has reached the upper Bollinger band.close >= bb_upper
at_bollinger_lowerstatePrice has reached the lower Bollinger band.close <= bb_lower
bollinger_squeezestateBollinger band width compressed to a multi-week low — volatility is contracted.bollinger_width <= 0.10
expanded_hourly_rangestateThis hour’s range is unusually wide.(high - low) > 1.5 * atr_hourly_20
narrow_hourly_rangestateThis hour’s range is unusually narrow.(high - low) < 0.5 * atr_hourly_20

Flags · Volume

NameKindDescriptionCondition
high_volume_alerteventToday’s volume is at least 2× the 30-day average.volume >= 2 * avg_volume_30d
low_volume_regimestateThis name is in a sustained quiet stretch.avg(volume, 10) <= 0.75 * avg_volume_30d
volume_burst_3xeventCurrent minute volume ≥ 3× recent average.volume >= 3 * avg(volume, 30 min prior)
volume_burst_5xeventCurrent minute volume ≥ 5× recent average.volume >= 5 * avg(volume, 30 min prior)
quiet_minutestateA sustained quiet stretch — 10-minute volume average well below recent baseline.avg(volume, 10m) < 0.5 * avg(volume, prior 30m)

Flags · Momentum

NameKindDescriptionCondition
rsi_overboughtstateRSI(14) is in overbought territory.rsi_14 >= 70
rsi_oversoldstateRSI(14) is in oversold territory.rsi_14 <= 30
momentum_strong_upeventStrong upward momentum across multiple measures.rsi_14 > 60 AND macd_hist > macd_hist_prev AND close > sma_20
momentum_strong_downeventStrong downward momentum across multiple measures.rsi_14 < 40 AND macd_hist < macd_hist_prev AND close < sma_20
momentum_exhaustion_upeventUpward momentum showing signs of exhaustion.rsi_14 >= 70 AND macd_hist < macd_hist_peak
momentum_exhaustion_downeventDownward momentum showing signs of exhaustion.rsi_14 <= 30 AND macd_hist > macd_hist_trough
three_up_hoursstateThree consecutive higher hourly closes.close > close_1h_ago > close_2h_ago > close_3h_ago
three_down_hoursstateThree consecutive lower hourly closes.close < close_1h_ago < close_2h_ago < close_3h_ago
morning_strengthstateFirst two hours of session net positive.close_1130 > open_0930
afternoon_drift_upstateAfternoon session net up.close_1600 > close_1200
last_hour_rallyeventFinal hour of session net up.close_1600 > close_1500
last_hour_selloffeventFinal hour of session net down.close_1600 < close_1500
held_above_vwap_30mstatePrice 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_30mstatePrice has stayed below session VWAP without lifting for at least 30 minutes.close < vwap_session for every minute in the last 30
microspike_upeventSingle 1-minute candle return ≥ +1%.(close - open) / open >= 0.01
microspike_downeventSingle 1-minute candle return ≤ −1%.(close - open) / open <= -0.01
rapid_move_up_5mstatePrice up more than +0.5% in the last 5 minutes.(close - close_5m_ago) / close_5m_ago >= 0.005
rapid_move_down_5mstatePrice down more than −0.5% in the last 5 minutes.(close - close_5m_ago) / close_5m_ago <= -0.005
opening_drive_upeventFirst 5 minutes of session up > +0.5%.close_0935 > open_0930 * 1.005
opening_drive_downeventFirst 5 minutes of session down < −0.5%.close_0935 < open_0930 * 0.995
pre_close_drift_upeventLast 10 minutes before close net up.close_1600 > close_1550
pre_close_drift_downeventLast 10 minutes before close net down.close_1600 < close_1550

Flags · Support & resistance

NameKindDescriptionCondition
at_supportstatePrice 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.
at_resistancestatePrice 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.

Flags · Patterns

NameKindDescriptionCondition
range_expansioneventToday'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
bounce_off_supporteventReversal off a detected support level.Within the last 3 bars a bar low touched an active support level band (level ± 1.5 × ATR(20)), AND today’s close is above yesterday’s close.
pullbackstatePullback to the 20-day moving average within an uptrend.in_uptrend (price > SMA20 > SMA50 > SMA200) AND price within ±2% of the 20-day SMA. Live evaluation at minute resolution.
in_opening_rangestatePrice is inside the first-hour high/low range.or_low <= price <= or_high (OR = first 15 min after 09:30 ET)
above_opening_rangestatePrice is trading above the first 15-minute opening-range high.close > or_high (OR = first 15 min after 09:30 ET)
below_opening_rangestatePrice is trading below the first 15-minute opening-range low.close < or_low (OR = first 15 min after 09:30 ET)
hourly_reversal_bullisheventLower low, higher close than the prior hour.low < low_1h_ago AND close > close_1h_ago
hourly_reversal_bearisheventHigher high, lower close than the prior hour.high > high_1h_ago AND close < close_1h_ago
consolidating_15mstateLast 15 minutes traded in a tight range.high_15m - low_15m < 0.5 * atr_min_30
range_break_15m_upeventBroke above the prior 15-minute high.close > max(high, prior 15 min)
range_break_15m_downeventBroke below the prior 15-minute low.close < min(low, prior 15 min)
repeated_test_of_highstateTested today’s session high three or more times — failed-breakout setup.High touched (within 0.1%) at least 3 times without sustained breakout.
repeated_test_of_lowstateTested today’s session low three or more times — failed-breakdown setup.Low touched (within 0.1%) at least 3 times without sustained breakdown.

Flags · Edge-triggered alerts

NameKindDescriptionCondition
price_up_3pcteventIntraday move of 3%+ vs prior close.day_change_pct >= 3
price_down_3pcteventIntraday move of -3% or worse vs prior close.day_change_pct <= -3
pre_earnings_driftstateStock 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
vwap_cross_upeventCrossed above session VWAP this minute.close_prev_min <= vwap_session AND close > vwap_session
vwap_cross_downeventCrossed below session VWAP this minute.close_prev_min >= vwap_session AND close < vwap_session

Flags · Fundamentals

NameKindDescriptionCondition
small_capclassificationMarket cap between $300M and $2B.market_cap >= 300M AND market_cap < 2B.
mid_capclassificationMarket cap between $2B and $10B.market_cap >= 2B AND market_cap < 10B.
large_capclassificationMarket cap between $10B and $200B.market_cap >= 10B AND market_cap < 200B.
mega_capclassificationMarket cap above $200B.market_cap >= 200B.
value_stockclassificationTrades at a value-style P/E.pe_ratio > 0 AND pe_ratio <= 15.
high_dividend_yieldclassificationDividend yield above 4%.dividend_yield >= 0.04.
high_betaclassificationBeta above 1.5: moves more than the market.beta >= 1.5.
low_floatclassificationPublic float under 50 million shares.float_shares < 50,000,000.
profitableclassificationMost-recently-reported quarter had positive net income.net_income_loss > 0
profitable_estimateclassificationAnalyst consensus expects positive EPS for the upcoming report.next_eps_estimate > 0
loss_estimateclassificationAnalyst consensus expects negative EPS for the upcoming report.next_eps_estimate < 0

Flags · Corporate events

NameKindDescriptionCondition
earnings_this_weekstateEarnings announcement scheduled in the next 7 days.0 <= days_to_earnings <= 7. Sourced from AlphaVantage forward earnings calendar plus historical earnings table.
earnings_todayeventEarnings reported today.EXISTS(ticker_earnings_history row with reported_date = today). Both pre-market and post-market reports count.
recently_reported_earningsstateReported 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.
earnings_approachingstateEarnings within 3 days.days_to_earnings >= 0 AND days_to_earnings <= 3
earnings_tomorrowstateEarnings reported in 1 calendar day. Pair with `earnings_report_time` to know BMO vs. AMC.days_to_earnings = 1
earnings_next_weekstateEarnings 8–14 days out — useful for the lead-up swing window.days_to_earnings >= 8 AND days_to_earnings <= 14
earnings_publishedstateEarnings report date has passed (next earnings date is in the past).days_to_earnings <= 0

Flags · Analyst ratings

NameKindDescriptionCondition
bullish_consensusstateConsensus analyst rating is `strong buy` or `buy`.analyst_consensus_rating IN ('strong buy', 'buy')
bearish_consensusstateConsensus analyst rating is `sell` or `strong sell`.analyst_consensus_rating IN ('sell', 'strong sell')
recent_upgradestateAt 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')
recent_downgradestateAt 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_initiationstateAt 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_raisestateAt 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_target_lowerstateAt 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')
above_price_targetstateCurrent price is above the consensus analyst target.price > analyst_consensus_target_price
below_price_targetstateCurrent price is below the consensus analyst target.price < analyst_consensus_target_price
well_coveredclassificationTen or more analyst firms cover the ticker.analyst_count_total >= 10
target_upside_above_10pctstateConsensus price target implies more than 10% upside from the current price.analyst_target_upside_pct > 10
target_upside_above_25pctstateConsensus price target implies more than 25% upside from the current price.analyst_target_upside_pct > 25
target_downside_above_10pctstateCurrent price is more than 10% above the consensus target — significant implied downside.analyst_target_upside_pct < -10
estimate_revised_upstateAt least one analyst raised their next-quarter EPS estimate in the last 30 days.eps_estimate_revision_up_30d > 0
estimate_revised_downstateAt least one analyst lowered their next-quarter EPS estimate in the last 30 days.eps_estimate_revision_down_30d > 0
high_earnings_estimateclassificationConsensus next-quarter EPS estimate exceeds an absolute $1.00 per share threshold.next_eps_estimate > 1.00