Free trial
Stock & ETF scanner · StonQL · REST API

Scan for the setup you actually trade.

Write the chart pattern as a few lines of StonQL. Run it across 9,000+ stocks and ETFs, on any of 15 timeframes, from the web or your own code.

No credit card required.
weekly-trend-pullback.sq 1D
// Weekly uptrend, daily pullback to the 21 EMA
mtf("1W") {
    close > ema(close, 21);
    rsi(close, 14) > 50;
}

low <= ema(close, 21);
close > ema(close, 21);
volume > sma(volume, 20) * 1.5;
illustrative
NVDANVIDIA Corp.
CATCaterpillar Inc.
COSTCostco Wholesale Corp.
9,000+
stocks and ETFs
15
timeframes, 1D to 12M
1962
earliest history
30+
built-in indicators

Dropdowns can't describe a chart.

Pick an indicator, pick an operator, pick a value, repeat. The setups you trade, with their bar-by-bar relationships, don't fit in those boxes. A short language does.

Typical screener
RSI ▾14 ▾Greater ▾50 ▾
EMA ▾8 ▾Crosses ▾EMA 21 ▾
Prior bar ▾??? ▾not supported
StonQL
rsi(close, 14) > 50;
crossover(ema(close, 8), ema(close, 21));
// the prior bar was an inside bar
high[1] < high[2];
low[1] > low[2];

Reads like Pine Script. Built for scanning.

Historical references, built-in indicators, plain boolean logic. No plotting, no strategy blocks: just filters that run against the whole market.

Pine ScriptStonQL
ta.ema(close, 21)ema(close, 21)
ta.crossover(a, b)crossover(a, b)
ta.rsi(close, 14)rsi(close, 14)
high > high[1]high > high[1]

Rather describe it?

The built-in assistant turns a plain-English description into StonQL. You see every line it writes, and can edit it.

"Ignition bar on high volume, then two red bars on lower volume that stay inside its range."
18 lines of StonQL

Every timeframe, in one scan.

Wrap conditions in mtf() to require them on a higher timeframe. Assign one to a variable to pull a weekly or monthly value into a daily comparison.

Did today close above last week's high? One line.

1D 2D 3D 4D 5D 1W 2W 3W 4W 1M 2M 3M 4M 6M 12M
// Daily breakout over last week's high,
// only while the monthly trend is up
mtf("1M") {
    close > sma(close, 3);
}

prev_week_high = mtf("1W") { high[1]; };

close > prev_week_high;
volume > sma(volume, 20) * 1.5;

Scans compose.

Results stay selected, and the next scan runs only against them. Build a universe on the monthly chart, narrow it on the weekly, trigger on the daily, then save what's left to a watchlist.

UNIVERSE
9,000+ symbols
1M · SCAN A
Long-term uptrend
1W · SCAN B
Tight weekly base
1D · SCAN C
Breakout trigger
WATCHLIST
Export to TradingView
/api/v1

Your scans, wherever your agents run.

Everything the scanner does is an API call: validate, run, save scans, manage watchlists. Hand a key to your script, your notebook or your agent and let it do the scanning.

  • OpenAPI spec. Generate a typed client in any language.
  • Compile errors with line and column, so an agent can fix its own expression.
  • Idempotent execution. A retried request never pays twice.
  • TradingView import and export for watchlists.
request
curl https://stocksfast.io/api/v1/scans/execute \
  -H "Authorization: Bearer $STOCKSFAST_KEY" \
  -H "Content-Type: application/json" \
  -d '{"timeframe": "1W",
       "expression": "close > sma(close, 200);
                      volume > 2 * sma(volume, 20);"}'
200 · response
{"data": [{"symbol": "AAPL", "close": 231.40, …}],
 "page": {"limit": 50, "offset": 0, "total": 137},
 "scan": {"scan_date": "2026-09-28", "timeframe": "1W"}}

Start from 50+ ready-made scans.

Copy one, change a number, make it yours.

Browse examples
SCAN PACKS

Pay for scans as you go. Credits never expire. API runs draw from the same balance.

Buy a pack
UNLIMITED

Unlimited scans, saved scans and watchlists, every timeframe, full history, the assistant. Monthly, quarterly or yearly.

Start 14-day free trial