Skip to main content
Fincept Scanner is the screening engine behind every scan_* tool. scan_run screens a whole market live on any of its fields: price and volume on 1-minute to monthly bars, performance, technical indicators and ratings, candlestick patterns, valuation, profitability, growth, balance sheet, cash flow, dividends, earnings and dividend dates and analyst targets. It covers stocks in 68 countries with their ETFs and funds, crypto pairs and coins, forex, futures, CFDs, bonds, options and economic series, and narrows to index universes such as the S&P 500, Nasdaq 100, Nifty 50, FTSE 100 or Nikkei 225. scan_history screens instruments’ price history with a formula of your own, for rules no field expresses. scan_ohlcv and the fundamentals tools return bars, statements, earnings, dividends and revenue segments per symbol. Every tool answers with a result envelope with tables and charts.
Fincept Scanner tools are free. They count toward the rate limit only. Requests to the market data source are also paced across the server: when that budget is in use the tool answers busy with details.retry_after_s, the number of seconds to wait.

Modules

Tools are grouped in three modules. Each module is a toolset named scan_<module>, so you can list it or search within it. The Fincept Scanner reference lists every tool. scan_run is listed by default. scan_catalog returns the live list of modules and tools from inside your agent.

Build a screen

A screen is a market, conditions on its fields, and a sort:

Where to screen

scan_markets lists every market by region with its exchanges, every index, the timeframes and the operators.

Fields

Field names are case-sensitive: RSI, close, SMA50, market_cap_basic, price_earnings_ttm, sector, earnings_release_next_date. scan_fields searches a market’s fields by words ("dividend yield", "free cash flow", "52 week"), category or type, and with include_values lists the exact values a text field takes, such as every sector or industry.
  • Timeframes. A bar field (price, volume or a technical) reads another timeframe with a suffix: RSI|60 is RSI on 1-hour bars. Suffixes are 1, 5, 15, 30, 60, 120, 240 (minutes), 1W and 1M; daily is the field without a suffix. The timeframe argument applies one to every bar field that names none.
  • Previous bars. [1] and [2] read a bar field one or two bars back: close[1], RSI[1]|60.
  • Units. Percent fields are in percent (5 is 5%). Date fields take ISO dates ("2026-01-31") and come back as ISO dates.
  • Checked first. A field the market does not have is refused before anything runs, with the nearest names in details.did_you_mean. A text value the field never takes ("Technology" for sector) adds a warning with the values it does take.

Conditions

Each condition is {"field", "op", "value"}, or {"field", "op", "to_field"} to compare with another field. filters must all hold.

OR logic

where holds an and/or tree three levels deep, and is combined with filters by AND. Each level is {"all": [...]} or {"any": [...]}, whose items are conditions or groups:

Sort, columns and pages

  • sort_by and sort_order (desc or asc) pick the order; the default is market cap for stocks and coins, traded volume for crypto pairs, forex, futures and options, and name for the rest.
  • columns picks the fields each row carries. Every field a condition or the sort reads is added, so a row shows why it matched.
  • limit returns up to 1,000 rows (default 50). offset skips rows; data.next_offset is the offset of the next page, null on the last.

Templates

template starts from a ready-made screen. Your filters are added to its conditions; your sort_by and columns replace its own. scan_templates lists all 44, each with its full arguments to copy and adapt.

Screen price history

scan_history evaluates a formula over each instrument’s bars, for rules no field expresses: streaks, breakouts over any window, distances from highs, custom indicators and their crosses. It takes up to 40 symbols, so narrow a market with scan_run first. A data reference passes a screen’s symbols in one call:
A formula is written like a Python expression over the series open, high, low, close, volume, hl2, hlc3 and ohlc4:
  • x[n] is x from n bars back; + - * / % **, comparisons, and and, or, not work bar by bar.
  • Window lengths and settings are numbers, such as sma(close, 50).
  • condition decides a match on the latest bar, or on any of the last within bars (the row says when it last held). values are named formulas reported at the latest bar, and sort_by can name one.
A formula is checked before anything is fetched: an unknown name, a missing window or anything that is not a formula is refused with the reason. Examples:

Bars and fundamentals

Amounts are in the reporting currency’s own units, not thousands or millions. A date range that would need more than 5,000 bars is refused; ask for the latest bars by count or use a longer interval.

Limits

scan_history and the bar and fundamentals tools fetch a few instruments at a time. When the server-wide pace is reached, scan_history stops starting new fetches, answers partial, and lists the symbols it skipped under data.failed. An identical screen within 30 seconds is answered from cache.

Outputs

Every screen row carries the instrument’s symbol as EXCHANGE:TICKER and one value per column. data.symbols lists the symbols in order, ready for scan_history, scan_ohlcv, the fundamentals tools or any market tool. data.total_count is the number of matches overall; data.fields gives each column’s meaning and type; data.conditions restates the screen as it ran. Values are as the market data source publishes them: real time for some venues, delayed by the exchange’s public delay (up to 15 minutes) for others.

Example

Prompt
The agent calls scan_run with index: "nasdaq100" and an RSI filter, passes its symbols to scan_history with a breakout formula, then calls scan_financials with period: "FQ" for each match. More prompts: