AI Stock Scan Builder Guide

Last updated November 3, 2026

StashGamma's AI stock scan builder turns a plain-English description into a stock scan you can check, run, save, and receive by email. This guide covers how to write and review a scan, what data it can use, and the limits that apply.

What the AI stock scan builder is

It is an AI stock screener for U.S. stocks that works from end-of-day data. A scan is a set of conditions, such as "RSI under 30 and price above the 200-day average", and the result is the list of symbols that meet them at the latest close.

You can start from a plain-English description, an example from the built-in library, or a query you type yourself. You sign in to run scans. Each run shows the matches, the universe, and the date of the data. In the app, the feature is labeled AI Scan Builder.

A scan only filters on the conditions you give it. It doesn't rate stocks, and a match isn't a recommendation.

Describe a scan in plain English

The builder works as a natural language stock scanner. Type what you are looking for in the description box, for example oversold stocks trading above their 200 day average, and ask it to generate a query. A draft can take a minute or two to appear, and it lands in the query editor.

Review the draft before you rely on it

The AI drafts a query and doesn't run it. Read the conditions and check the indicator, the period, the timeframe, and the threshold against what you meant. You can edit anything before you run it. If a draft doesn't pass the syntax check, it still appears in the editor with a notice, so you can correct it or reword your description.

Each draft uses your daily AI allowance (see limits). Running or editing a query doesn't.

Bracket query syntax

The query is what actually runs, whether AI drafted it or you typed it. It isn't a programming language: each condition sits in square brackets and compares two values.

[Daily RSI(14) < 30] AND [Daily Close > Daily SMA(200)]

Comparators

Combining conditions

Join conditions with AND, OR, and NOT. AND binds more tightly than OR, so use parentheses when you mix them.

([Daily RSI(14) < 30] OR [Daily RSI(14) > 70])
AND [universe = NQ100]
[Daily Close > Daily SMA(50)]
AND NOT [Daily RSI(14) > 70]

Scaling a value

A value can be multiplied or divided by a plain number with * or /. The number has to be a literal, so one indicator can't be multiplied or divided by another. This query finds stocks within 5% of their 52-week high:

[Daily Close >= Daily Week52High * 0.95]

What the compiler rejects

Keywords aren't case-sensitive. A query with a mistake is rejected with an error message rather than quietly returning the wrong list. For example:

QueryWhy it fails
[Daily SMA(37) > 0]37 is not one of the available SMA periods.
[ROE > 15]ROE is a fundamentals field, so it needs the Fundamentals prefix.
[Weekly Week52High > 0]Week52High works on Daily only.
[Fundamentals ROE crosses_above 15]A fundamentals value has no previous bar to cross from.
[Daily RSI(14) < 30] OR [universe = SP500]A universe clause has to be joined with AND at the top level.

Timeframes

Start a technical value with Daily, Weekly, or Monthly to choose its bars. With no prefix it uses Daily, so [RSI(14) < 30] is a daily RSI scan. You can mix timeframes in one query:

[Daily RSI(14) > 50]
AND [Weekly RSI(14) > 50]

Other examples are [Weekly RSI(14) < 30] and [Monthly Close > Monthly SMA(10)]. On a weekly or monthly timeframe the period counts bars of that timeframe, so Monthly SMA(10) averages ten monthly closes. Intraday timeframes aren't available.

Indicators

Indicators with a period

Only the periods listed here are available. Values are prepared ahead of time when the scan data is rebuilt, which is why a period such as SMA(37) is rejected.

IndicatorPeriodsWhat it is
SMA10, 20, 50, 100, 150, 200Simple moving average of the close. Use SMA(20, Volume) for a moving average of volume.
EMA8, 13, 20, 21, 34, 50, 100, 200Exponential moving average of the close.
RSI5, 9, 14, 21Wilder's Relative Strength Index. Plain RSI means RSI(14).
ROC1, 5, 10, 20, 63, 126, 252Percent change over that many bars. Plain ROC means ROC(1).
ATR7, 14, 21Average True Range in dollars, not a percentage. Plain ATR means ATR(14).
VWAP10, 20, 50, 100, 150, 200Rolling volume-weighted average price over that many bars. A period is required.

Values with no period

These work on Daily, Weekly, and Monthly.

NameWhat it is
Close, Open, High, Low, VolumeRaw values of the latest bar.
DollarVolumeClose multiplied by volume, a common liquidity filter.
MACD, MACDSignal, MACDHistogramStandard MACD with fixed 12/26/9 settings.
StashConfluenceStashGamma's composite score from 0 to 100, built from trend and momentum readings, and blended with fundamentals when available. It is a screening field, not a buy or sell rating.

Daily-only values

NameWhat it is
Week52High, Week52LowHighest high and lowest low of the trailing 252 daily bars.
AVWAPYtd, AVWAP52WLow, AVWAP52WHighAnchored VWAP from the start of the calendar year, the 52-week low, or the 52-week high. Other anchor dates are not available.

Fundamentals

Company data uses the Fundamentals prefix in place of a timeframe. These are single current values with no bar history, so crosses_above and crosses_below don't work on them.

[Fundamentals PE < 15]
AND [Fundamentals ROE > 10]
GroupFields
ValuationPE, ForwardPE, PEG, PB, PS, EVEBITDA
ProfitabilityEPS, EPSGrowthYoY, EPSGrowthQuarterlyYoy, GrossMargin, OperatingMargin, NetMargin, ROE, ROA
GrowthRevenueGrowthYoY, RevenueGrowth3Y, RevenueGrowth5Y, RevenueGrowthQuarterlyYoy
Financial healthDebtEquity, CurrentRatio, QuickRatio, NetInterestCoverage
Size and riskMarketCap, Beta
IncomeDividendYield, PayoutRatio, DividendGrowth5Y
Earnings historyEarningsSurprisePercent, EarningsBeatStreak, EarningsBeatCount4Q

Coverage varies by symbol, and these values can update less often than prices. A symbol with no value for a field never matches a condition on that field, and the same applies to a newer stock without enough price history for a long moving average. Float, shares outstanding, institutional ownership, and ROIC aren't available.

Universes

A universe sets which symbols are checked. Pick one from the menu next to the query, or add a clause joined with AND. A query can have one clause, and the menu overrides it when both are set.

[Daily RSI(14) < 30]
AND [universe = SP500]
UniverseWhat it covers
ALLEvery symbol in the scan data. This is the default when you do not choose a universe.
SP500Shown as S&P 500 in the menu. It approximates the index with a large-cap list, so it is not the official constituent list and holds more than 500 names.
NQ100Shown as Nasdaq 100 in the menu. The list is updated periodically, so it can briefly differ from the current index.
DOW30Shown as Dow 30 in the menu. Also updated periodically.

Worked examples

Each example shows a description you could type and a query that does the job. A draft may be written differently, which is another reason to read it. These examples show how the syntax works and aren't suggestions to trade any of these conditions.

RSI scan for oversold stocks

Description: "stocks with a 14-day RSI under 30".

[Daily RSI(14) < 30]

A reading under 30 is the conventional definition of oversold. A stock can stay there for some time.

Oversold stocks above the 200-day SMA

Description: "RSI under 30 with the price above the 200-day moving average".

[Daily RSI(14) < 30]
AND [Daily Close > Daily SMA(200)]

Both conditions must hold, so this narrows the list to oversold stocks that are still above that average.

Golden cross

Description: "the 50-day moving average just crossed above the 200-day".

[Daily SMA(50) crosses_above Daily SMA(200)]

A cross only matches on the bar where it happens, so this scan often returns few symbols or none. For the exponential version, use:

[Daily EMA(50) crosses_above Daily EMA(200)]

Volume spike

Description: "volume at least 50% above its 20-day average".

[Daily Volume > Daily SMA(20, Volume) * 1.5]

Saving scans

After a run, choose Save Scan and give it a name. Saved scans belong to your account and appear in the Saved Scans tab, where you can run a scan again with Run Now, duplicate it, open its history, change its sort order, turn its email on or off, or delete it. Deleting a scan also deletes its history. Each account can keep up to 25 saved scans.

Daily email alerts

These are stock screener email alerts that report once a day, not alerts that fire during the session. Turn one on with Email me these results every evening (Mon–Fri) when you save a scan, or with the mail icon in Saved Scans. Email is off until you turn it on.

The schedule runs every weekday, including market holidays, so check the data date in the email. A scan whose saved query no longer passes the syntax check is left out of the email.

Sort order

Each saved scan has its own sort order. Results default to symbol order, A to Z. You can sort by last close or by any field the scan uses, such as its RSI value, in ascending or descending order. Symbols with no value for that field come last.

The sort applies to every match before the list is cut down, so the top 25 in the email are the top 25 of all matches. Run Now, history, and the email all use the same order. You can also click a column in the results table to reorder what is on screen.

Scan history

Each saved scan keeps a record of its runs, newest first, with Load more for older ones. A run is recorded when you choose Run Now and when the scheduled email runs the scan. So a scan with email turned off only gains history from Run Now, and a scan you never saved has none.

History goes back about one year per scan. Up to 500 matches are stored per run, and a run that stored only part of its list says so. A scan run very often can lose its oldest runs sooner, because each scan keeps at most 300.

CSV export

You can get a CSV in three places:

A bulk download of a scan's whole history isn't available. History downloads are one run at a time.

Data timing

Scan data is rebuilt at 5:15 PM Eastern, Monday through Friday, from end-of-day data. It isn't real-time or intraday. A scan you run during the trading day uses the most recent rebuild, so it reflects the previous close. New results can take a little while to appear after 5:15 PM.

Results and emails show the date of the data, so check it before you use a list. Symbols whose price data has fallen more than a week behind are left out of the scan.

Limits

ItemLimit
Results returned by a run500 per run. The match count still shows the true total.
Saved scans25 per account
Scan name100 characters
Query length4,000 characters
Plain-English description500 characters
AI drafting50 requests per account per day by default, shared with other AI features. Resets at midnight Eastern.
Tickers in the email table25 per scan, with a CSV of all matches attached
Stored historyAbout one year per saved scan, up to 500 matches per run

Not available

FAQ

What is an AI stock scan builder?

It is a stock screener you can drive with plain English. You describe the stocks you want, AI drafts a scan query, you review it, and then you run it against end-of-day data. StashGamma calls the feature AI Scan Builder.

Do I need to learn the query syntax?

No. You can describe a scan in plain English and let AI draft the query. Knowing the basics of the syntax does help you check that the draft matches what you meant, which you should always do before relying on it.

Is the scanner real-time?

No. Scans run on end-of-day data rebuilt at 5:15 PM Eastern on weekdays. There is no real-time or intraday scanning, and a scan you run during market hours uses the data from the most recent rebuild.

When do the stock screener email alerts arrive?

The daily email is sent Monday through Friday at 5:00 PM Central, which is 6:00 PM Eastern. A custom send time is not available.

What happens if a scan has no matches?

It still appears in that day's email, marked "No matches today", so you can tell that the scan ran. A scan with no matches has no CSV attached.

How many tickers does the email show?

The table in the email shows up to 25 tickers per scan. Each scan that has matches also gets a CSV attachment listing all of its matches.

How many scans can I save?

Up to 25 saved scans per account.

How long is scan history kept?

About one year per saved scan, with up to 500 matches stored for each run. You can download one run at a time as a CSV. A bulk history download is not available.

Can the AI draft a wrong query?

Yes. A draft can misread what you meant or fail the syntax check, so it is placed in the editor for you to review and is never run automatically.

Is a scan result a recommendation to buy a stock?

No. A scan only lists symbols that meet the conditions you set. StashGamma is for educational purposes and nothing here is investment advice.

Build your first scan

Open the builder, describe a scan, and review the query it drafts. If you don't have an account yet, sign up or log in to go straight there.

Open the AI Stock Scan Builder