Screener
POST /v1/screen
The unified screener intersects up to four independent legs — technical analysis, fundamentals, options positioning, and dividend criteria — scoped to a custom universe, in a single call.
Cost: 5 credits per call (flat).
Legs at a glance
| Leg | What it screens | Detail |
|---|---|---|
universe | Which stocks are eligible before any leg runs | Country, GICS sector, size tier, market cap, asset type, theme |
ta | Technical signals — crossovers, divergences, squeezes, Ichimoku | 20+ patterns × 15+ operands, multi-timeframe |
fundamental | Financial ratios, dollar amounts, growth rates | 50+ ratio keys + hundreds of statement fields |
options | Options-market positioning behaviour | US-listed optionable stocks only (~557 names) |
dividend | Dividend streak and growth gate | Combine with TA or fundamentals |
Every leg is optional. The screener intersects whichever you include.
Quick example
US large-cap tech — golden cross and ROE > 20%:
- curl
- Python
- Node.js
curl -X POST \
-H "Authorization: Bearer avn_live_xxx" \
-H "Content-Type: application/json" \
-d '{
"universe": {
"include": [{ "country": ["US"], "gics": "45", "size": ["large", "mid"] }]
},
"ta": [{
"anchor": [{ "pattern": "crossover_up", "a": "ema50", "b": "ema200" }]
}],
"fundamental": [{ "concept": "roe", "pattern": "above", "threshold": 0.2 }],
"limit": 10
}' \
"https://api.marketdx.app/v1/screen"
import requests
r = requests.post(
"https://api.marketdx.app/v1/screen",
headers={"Authorization": "Bearer avn_live_xxx"},
json={
"universe": {
"include": [{"country": ["US"], "gics": "45", "size": ["large", "mid"]}]
},
"ta": [{"anchor": [{"pattern": "crossover_up", "a": "ema50", "b": "ema200"}]}],
"fundamental": [{"concept": "roe", "pattern": "above", "threshold": 0.2}],
"limit": 10,
},
)
results = r.json()["results"]
const res = await fetch("https://api.marketdx.app/v1/screen", {
method: "POST",
headers: {
Authorization: "Bearer avn_live_xxx",
"Content-Type": "application/json",
},
body: JSON.stringify({
universe: { include: [{ country: ["US"], gics: "45", size: ["large", "mid"] }] },
ta: [{ anchor: [{ pattern: "crossover_up", a: "ema50", b: "ema200" }] }],
fundamental: [{ concept: "roe", pattern: "above", threshold: 0.2 }],
limit: 10,
}),
});
const { results } = await res.json();
Request body
Full shape — all fields optional except at least one leg
{
"universe": { "include": [...], "exclude": [...] },
"ta": [ ...steps ],
"fundamental": [ ...conditions ],
"options": { "pattern": "...", "horizon": "long", "min_strength": 0.0 },
"dividend": { "min_streak_years": 5, "min_cagr": 0.05 },
"timeframe": 1,
"window_bars": 30,
"sort": "ta",
"sort_dir": "desc",
"limit": 50
}
sort and sort_dir
sort value | Description | Default direction |
|---|---|---|
"ta" (default) | TA chain score — how strongly/recently the TA fired | desc |
"options" | Options signal strength | desc |
"mcap" | Market cap (USD) | desc (largest first) |
"pe" "pb" "ev_ebitda" | Valuation multiples | asc (cheapest first) |
"roe" "revenue" "net_margin" | Any fundamental concept key | desc (best first) |
"rsi" "adx" | TA oscillator value | desc |
Response
Typical response
{
"universe": 1842,
"count": 4,
"capped": false,
"sort": "ta",
"notes": [],
"results": [
{
"head_listing_id": 31809,
"ticker": "NVDA.US",
"name": "NVIDIA Corporation",
"country": "US",
"gics": "453010",
"score": 2.85,
"matched_legs": ["ta", "fundamental"],
"matched": {
"ta": {
"crossover_up": {
"a": "ema50", "b": "ema200",
"at": "2026-07-15",
"detail": "EMA50 crossed above EMA200 (golden cross)"
}
},
"fundamental": {
"roe": { "value": 0.52, "pattern": "above", "threshold": 0.2 }
}
},
"context": {
"ta": { "rsi14": 61.4, "adx": 32.1, "ema50": 196.8, "ema200": 185.3, "close": 198.2 },
"fundamental": { "roe": 0.52, "pe": 52.1, "revenue": 130500000000 }
}
}
]
}
Response fields
| Field | Type | Description |
|---|---|---|
universe | number | Stocks matching the universe scope before leg filtering. |
count | number | Stocks in results (≤ limit). |
capped | bool | true if results were truncated — increase limit or narrow scope. |
notes | string[] | Operand snapping notes, cohort scope info, warnings. Always check this. |
results[].score | number | TA chain score. Higher = more recent / stronger. |
results[].matched_legs | string[] | Which legs this stock passed. |
results[].matched | object | Per-leg evidence: signal details, values, dates. |
results[].context.ta | object | Current TA values (RSI, ADX, MAs, close). |
results[].context.fundamental | object | Current fundamental values for screened metrics. |
Partial matches
When fewer than 3 stocks match all legs, the response adds near-misses:
{
"partial": true,
"intersection_count": 1,
"near_misses": [
{ "ticker": "AMD.US", "matched_legs": ["ta"], "missing_legs": ["fundamental"] }
]
}
Recipes
Dip buyer: down >10%, revenue growing, not overvalued
{
"universe": { "include": [{ "country": ["US"], "size": ["large","mid"] }] },
"ta": [{ "anchor": [{ "pattern": "net_change_dn", "window_bars": 20 }] }],
"fundamental": [
{ "concept": "revenue", "pattern": "consecutive_growth", "N": 2 },
{ "concept": "pe", "pattern": "below", "threshold": 40 }
]
}
Asian chip makers: cheap PE + above 200-day MA
{
"universe": { "include": [{ "country": ["TW","KR","JP"], "gics": "453010" }] },
"ta": [{ "anchor": [{ "pattern": "above", "a": "close", "b": "sma200" }] }],
"fundamental": [{ "concept": "pe", "pattern": "below", "threshold": 20 }]
}
Volatility squeeze coiling up — US small/mid
{
"universe": { "include": [{ "country": ["US"], "size": ["small","mid"] }] },
"ta": [{ "anchor": [{ "pattern": "ttm_squeeze" }] }]
}
Options crowd turning bullish + oversold RSI
{
"universe": { "include": [{ "country": ["US"] }] },
"ta": [{ "anchor": [{ "pattern": "oversold", "a": "rsi14" }] }],
"options": { "pattern": "fear_to_confidence", "horizon": "long" }
}
Ichimoku TK cross + price above cloud
{
"ta": [{
"anchor": [{ "pattern": "crossover_up", "a": "ichi_tenkan", "b": "ichi_kijun" }],
"quals": [{ "any": [{ "pattern": "above", "a": "close", "b": "ichi_senkou_a" }] }]
}]
}
Reliable dividend growers with bullish momentum
{
"ta": [{ "anchor": [{ "pattern": "above", "a": "close", "b": "ema200" }] }],
"dividend": { "min_streak_years": 5, "min_cagr": 0.05 }
}
Related endpoints
POST /v1/ta/find-signal— Resolve a plain-language TA phrase to apatterntokenPOST /v1/financials/find— Resolve a financial concept to aconceptkeyPOST /v1/options/find-pattern— Resolve an options-behaviour phrase to apatterntokenGET /v1/stocks/dividends— Pure dividend screen (ranked by yield)