Stock Screener
A complet stock market screener which can be used to screen for etfs in-/outflow, tickers by various volatility metrics such as steepness, IV rank, realized volatility, expected moves, companies where insiders bought shares over 3m, 6m, tickers by various option metrics (greek flow, options premium/volume, net call premium, amount of new chains, total open interest, flex open interest, etc.) and live stock quotes, prices and volume.
The date defaults to the current or last market day. Earlier dates return stored snapshots as of regular market close. Live bid and ask quotes are null for historical snapshots.
Rows default to combined call and put volume in descending order.
For real time streaming of the latest screener row of every ticker, subscribe to the stock_screener websocket channel, see https://api.unusualwhales.com/docs/websocket/stock-screener.
Decimal values are returned as strings. Fractional returns use 0.05 for 5 percent. Unavailable values are null.
Query language examples
Pass an expression in query. It is combined with the other filters. Get the grammar and current field reference from /api/screener/stocks/dsl.
Volume based gamma exposure at least twice the magnitude of OI based gamma exposure:
where abs(gex_gamma_per_one_percent_move_oi) > 0 and abs(gex_gamma_per_one_percent_move_vol) >= abs(gex_gamma_per_one_percent_move_oi) * 2
Price at least two ATRs above the 20 day EMA:
where atr_14 > 0 and price - ema_20 >= atr_14 * 2
Call volume at least twice put volume:
where put_volume > 0 and call_volume >= put_volume * 2
Call to put volume ratio at least 10 or at most 0.1:
where call_volume > 0 and put_volume > 0 and (call_volume / put_volume >= 10 or call_volume / put_volume <= 0.1)
Ratio of 7 day IV to 30 day IV at least 1.5 or at most 1 / 1.5:
where iv7d > 0 and iv30d > 0 and (iv7d / iv30d >= 1.5 or iv7d / iv30d <= 1 / 1.5)
Price in the top 20% of its 52 week range on a logarithmic scale:
where week_52_low > 0 and week_52_high > week_52_low and price > 0 and price <= week_52_high and log(price / week_52_low) / log(week_52_high / week_52_low) >= 0.8
The logarithmic position is 0 at the low and 1 at the high. Equal steps represent equal proportional price moves.
Absolute log return since the previous close at least two approximate daily standard deviations using 30 day IV:
where change > -1 and iv30d > 0 and abs(ln(1 + change)) >= 2 * iv30d * sqrt(1 / 251)
The same daily return screen using 7 day IV:
where change > -1 and iv7d > 0 and abs(ln(1 + change)) >= 2 * iv7d * sqrt(1 / 251)
Distance from the 20 day EMA at least the 7 day expected move:
where implied_move_7 > 0 and abs(price - ema_20) >= implied_move_7
Momentum excluding the latest month above 10%, with RSI at or below 30:
where one_year_close > 0 and ((one_month_close / one_year_close) - 1) > 0.10 and rsi_14 <= 30
This combines a Gray and Vogel inspired momentum measure with an RSI pullback condition. See How to Measure Momentum for background.
one_month_close and one_year_close are the latest regular closes on or before one calendar month and one calendar year before the row date. The formula measures the return between those reference closes.
The one_year_close > 0 guard keeps the denominator positive. This filter is not the full Quantitative Momentum strategy.
Gamma-dominance flips
Aggregate gamma provides a view into trader sentiment over short timeframes because near-the-money gamma tends to be highest in the closest expiries.
To screen for bearish trade ideas based on a flip from call gamma-dominance to put gamma-dominance, use these query parameters:
{
"min_open_interest": 50000,
"max_gex_perc_change": -1,
"max_gex_net_change": 0
}
Equivalent query expression:
where open_interest >= 50000 and gex_perc_change <= -1 and gex_net_change <= 0
- A minimum total open interest of 50,000 screens for relatively active names, using open interest as a liquidity proxy.
gex_perc_changeis(current net gamma - previous net gamma) / previous net gamma. A value below -1 indicates a sign change in either direction, not necessarily a fall in net gamma.max_gex_net_change: 0selects the downward direction.gex_ratiois absolute put gamma divided by absolute call gamma. A downward net gamma cross corresponds to this ratio crossing upward through 1 into put gamma-dominance, when call gamma is nonzero.
To screen for bullish trade ideas based on the opposite flip, from put gamma-dominance to call gamma-dominance, use these query parameters:
{
"min_open_interest": 50000,
"max_gex_perc_change": -1,
"min_gex_net_change": 0
}
Equivalent query expression:
where open_interest >= 50000 and gex_perc_change <= -1 and gex_net_change >= 0
- The open interest and percentage-change thresholds are unchanged because the sign-change test is the same in both directions.
min_gex_net_change: 0selects the upward direction. Net gamma rising through zero corresponds togex_ratiocrossing downward through 1 into call gamma-dominance.
These thresholds are inclusive. A gex_perc_change of exactly -1 means net gamma reached zero, so both screens also include that boundary, where gex_ratio is 1 when defined. A strict flip has gex_perc_change < -1. Percentage change is null when previous net gamma is zero, and the ratio is null when call gamma is zero.
Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Query Parameters
Query language expression combined with the other filters. Use the query language for complex filters with mathematical calculations and comparisons between fields. Get supported fields, operators, and scopes from /api/screener/stocks/dsl.
Return securities with a price change over one calendar year of at least this decimal fraction, inclusive. 0.5 means a 50% gain and -0.2 means a 20% loss. Uses the latest accepted price and the latest regular close on or before the calendar cutoff. Rows with an unavailable return are excluded.
Return securities with a price change over one calendar year of at most this decimal fraction, inclusive. 0.5 means a 50% gain and -0.2 means a 20% loss. Uses the latest accepted price and the latest regular close on or before the calendar cutoff. Rows with an unavailable return are excluded.
Return securities with a price change over six calendar months of at least this decimal fraction, inclusive. 0.5 means a 50% gain and -0.2 means a 20% loss. Uses the latest accepted price and the latest regular close on or before the calendar cutoff. Rows with an unavailable return are excluded.
Return securities with a price change over six calendar months of at most this decimal fraction, inclusive. 0.5 means a 50% gain and -0.2 means a 20% loss. Uses the latest accepted price and the latest regular close on or before the calendar cutoff. Rows with an unavailable return are excluded.
Return securities with a price change over three calendar months of at least this decimal fraction, inclusive. 0.5 means a 50% gain and -0.2 means a 20% loss. Uses the latest accepted price and the latest regular close on or before the calendar cutoff. Rows with an unavailable return are excluded.
Return securities with a price change over three calendar months of at most this decimal fraction, inclusive. 0.5 means a 50% gain and -0.2 means a 20% loss. Uses the latest accepted price and the latest regular close on or before the calendar cutoff. Rows with an unavailable return are excluded.
Return securities with a price change over one calendar month of at least this decimal fraction, inclusive. 0.5 means a 50% gain and -0.2 means a 20% loss. Uses the latest accepted price and the latest regular close on or before the calendar cutoff. Rows with an unavailable return are excluded.
Return securities with a price change over one calendar month of at most this decimal fraction, inclusive. 0.5 means a 50% gain and -0.2 means a 20% loss. Uses the latest accepted price and the latest regular close on or before the calendar cutoff. Rows with an unavailable return are excluded.
Return securities with a price change over seven calendar days of at least this decimal fraction, inclusive. 0.5 means a 50% gain and -0.2 means a 20% loss. Uses the latest accepted price and the latest regular close on or before the calendar cutoff. Rows with an unavailable return are excluded.
Return securities with a price change over seven calendar days of at most this decimal fraction, inclusive. 0.5 means a 50% gain and -0.2 means a 20% loss. Uses the latest accepted price and the latest regular close on or before the calendar cutoff. Rows with an unavailable return are excluded.
A comma separated list of tickers. To exclude certain tickers prefix the first ticker with a -.
"AAPL,INTC"
Maximum full rows to return. Defaults to 50 and is capped at 500. Smaller explicit limits are honored.
1 <= x <= 500Zero-based page number. The number of skipped rows is offset multiplied by the effective limit.
0 <= x <= 500An array of 1 or more issue types.
A singular issue type.
Common Stock, ETF, Index, ADR The minimum % change to the previous trading day.
The maximum % change to the previous trading day.
The minimum stock price.
The maximum stock price.
Boolean whether to only include stocks which are part of the S&P 500. Setting this to false has no effect.
Boolean wheter to only include stocks which pay dividends. Setting this to false has no effect.
An array of 1 or more sectors.
A singular sector.
Basic Materials, Communication Services, Consumer Cyclical, Consumer Defensive, Energy, Financial Services, Healthcare, Industrials, Real Estate, Technology, Utilities Return securities with this exact company industry label. Separate multiple labels with commas to match any listed industry. Labels come from company data, not a fixed enumeration. The industries and industry_type aliases are also accepted.
The minimum marketcap.
The maximum marketcap.
The minimum ratio of options volume vs 3 day avg options volume.
The maximum ratio of options volume vs 3 day avg options volume.
The minimum ratio of call options volume vs 3 day avg call options volume.
The maximum ratio of call options volume vs 3 day avg call options volume.
The minimum ratio of put options volume vs 3 day avg put options volume.
The maximum ratio of put options volume vs 3 day avg put options volume.
The minimum ratio of options volume vs 30 day avg options volume.
The maximum ratio of options volume vs 30 day avg options volume.
The minimum ratio of call options volume vs 30 day avg call options volume.
The maximum ratio of call options volume vs 30 day avg call options volume.
The minimum ratio of put options volume vs 30 day avg put options volume.
The maximum ratio of put options volume vs 30 day avg put options volume.
The minimum open interest change compared to the previous day.
The maximum open interest change compared to the previous day.
The minimum open interest change of call contracts compared to the previous day.
The maximum open interest change of call contracts compared to the previous day.
The minimum open interest change of put contracts compared to the previous day.
The maximum open interest change of put contracts compared to the previous day.
The minimum implied move.
The maximum implied move.
The minimum implied move perc.
The maximum implied move perc.
The minimum volatility.
The maximum volatility.
The minimum iv rank.
The maximum iv rank.
The minimum options volume.
The maximum options volume.
The minimum call options volume.
The maximum call options volume.
The minimum put options volume.
The maximum put options volume.
The minimum options premium.
The minimum options premium.
The minimum call options premium.
The minimum call options premium.
The minimum put options premium.
The minimum put options premium.
The minimum net options premium.
The minimum net options premium.
The minimum net call options premium.
The maximum net call options premium.
The minimum net put options premium.
The maximum net put options premium.
The minimum open interest.
The maximum open interest.
The minimum open interest vs options volume ratio.
The maximum open interest vs options volume ratio.
The minimum put to call ratio.
The maximum put to call ratio.
Sort by a screener field, such as ticker, marketcap, stock_volume, z_score, or steepness_180_30. The default volume is combined call and put contract volume. Quote fields support sorting only for current data. The added is_index and missing_periscope fields are not sortable.
Whether to sort descending or ascending. Descending by default.
desc, asc "asc"
The minimum stock volume vs average 30 day volume.
The maximum stock volume vs average 30 day volume.
A trading date in the format of YYYY-MM-DD. This is optional and by default the last trading date.
"2024-01-18T00:00:00.000Z"
Response
Matching stock screener rows. Decimal values are JSON strings.
Rows after filtering, sorting, and pagination. Empty when no rows match.
