Skip to content

Stock Screener API

Screener endpoints let you fetch data across multiple tickers in a single request. Filter by market or region to narrow results. Instead of querying tickers one by one, use the screener to scan entire markets for sentiment shifts, insider trades, congressional activity, and more.

Supports multiple authentication methods (in order of preference):

MethodExample
Bearer token (recommended)Authorization: Bearer YOUR_API_KEY
X-API-Key headerX-API-Key: YOUR_API_KEY
Query parameter?apiKey=YOUR_API_KEY
Legacy query parameter?token=YOUR_API_KEY
EndpointDescriptionRequires market/region?
GET /v2/screener/sentimentScreen sentiment across tickersYes (market OR region)
GET /v2/screener/analyst-ratingsScreen analyst ratingsNo (optional)
GET /v2/screener/insider-tradingScreen insider tradesNo
GET /v2/screener/congress/houseScreen House tradesNo
GET /v2/screener/congress/senateScreen Senate tradesNo
GET /v2/screener/newsScreen news articlesNo (optional)
GET /v2/screener/put-call-ratioScreen put/call ratiosNo (optional)
GET /v2/screener/linkedinScreen LinkedIn dataYes (market OR region)
GET /v2/screener/app-ratingsScreen app ratingsYes (market OR region)
GET /v2/screener/predictions/dailyScreen daily predictionsNo (optional)
GET /v2/screener/predictions/monthlyScreen monthly predictionsNo (optional)
ParameterTypeRequiredDescription
apiKeystringNoYour API key (if not using header auth)
limitintegerNoNumber of results to return (1-20,000)
marketstringNoFilter by market name (e.g., NASDAQ, S&P 500)
regionstringNoFilter by region code (e.g., US, UK)
from finbrain import FinBrainClient
fb = FinBrainClient(api_key="YOUR_API_KEY")
# Screen predictions by market
df = fb.screener.predictions_daily(market="S&P 500",
as_dataframe=True)
print(df)
# Screen insider trading (no market filter needed)
df = fb.screener.insider_trading(as_dataframe=True)
print(df)
Terminal window
# Screen all recent insider trades
curl -H "Authorization: Bearer YOUR_API_KEY" \
"https://api.finbrain.tech/v2/screener/insider-trading?limit=20"
# Filter insider trades by market
curl -H "Authorization: Bearer YOUR_API_KEY" \
"https://api.finbrain.tech/v2/screener/insider-trading?market=NASDAQ&limit=50"
{
"success": true,
"data": {
"data": [
{ "symbol": "VIV", "name": "Telefonica Brasil SA ADR", "date": "2026-01-19", "score": 0.644 },
{ "symbol": "POWL", "name": "Powell Industries Inc", "date": "2026-01-19", "score": 0.406 }
],
"summary": {
"totalTickers": 2,
"averageScore": 0.525,
"bullishCount": 2,
"bearishCount": 0,
"neutralCount": 0
}
},
"meta": { "timestamp": "2026-01-19T15:23:10.900Z" }
}
FieldTypeDescription
data[].symbolstringStock ticker symbol
data[].namestringCompany name
data[].datestringDate of the sentiment score (YYYY-MM-DD)
data[].scorenumberSentiment score from -1 (bearish) to 1 (bullish)
summary.totalTickersintegerNumber of tickers in the result
summary.averageScorenumberAverage sentiment score across all tickers
summary.bullishCountintegerNumber of tickers with positive sentiment
summary.bearishCountintegerNumber of tickers with negative sentiment
summary.neutralCountintegerNumber of tickers with neutral sentiment

Insider Trading Screener Response (200 OK)

Section titled “Insider Trading Screener Response (200 OK)”
{
"success": true,
"data": {
"data": [
{
"symbol": "NVDA",
"name": "Nvidia Corporation",
"date": "2026-01-15",
"insider": "Jensen Huang",
"relationship": "CEO",
"transactionType": "Sale",
"shares": 120000,
"totalValue": 15600000
}
],
"summary": {
"totalTransactions": 1,
"totalTickers": 1,
"buyCount": 0,
"sellCount": 1
}
},
"meta": { "timestamp": "2026-01-19T15:23:12.000Z" }
}
FieldTypeDescription
data[].symbolstringStock ticker symbol
data[].namestringCompany name
data[].datestringTransaction date (YYYY-MM-DD)
data[].insiderstringInsider name
data[].relationshipstringInsider’s role or relationship to the company
data[].transactionTypestringType of transaction (e.g., Sale, Buy)
data[].sharesintegerNumber of shares traded
data[].totalValueintegerTotal transaction value in USD
summary.totalTransactionsintegerTotal number of transactions returned
summary.totalTickersintegerNumber of unique tickers in the result
summary.buyCountintegerNumber of buy transactions
summary.sellCountintegerNumber of sell transactions
import requests
headers = {"Authorization": "Bearer YOUR_API_KEY"}
response = requests.get(
"https://api.finbrain.tech/v2/screener/sentiment",
headers=headers,
params={"market": "NASDAQ", "limit": 100}
)
result = response.json()
# Sort by sentiment score descending
tickers = sorted(result["data"]["data"], key=lambda x: x["score"], reverse=True)
print("Top 10 most bullish NASDAQ tickers:")
for t in tickers[:10]:
print(f" {t['symbol']:>6} ({t['name'][:30]:30}): {t['score']:.3f}")
import requests
headers = {"Authorization": "Bearer YOUR_API_KEY"}
response = requests.get(
"https://api.finbrain.tech/v2/screener/insider-trading",
headers=headers,
params={"limit": 500}
)
result = response.json()
# Filter for large purchases only
large_buys = [
t for t in result["data"]["data"]
if t["transactionType"] == "Buy" and t["totalValue"] >= 1_000_000
]
print(f"Large insider purchases (above $1M):")
for trade in large_buys:
print(f" {trade['symbol']:>6} - {trade['insider']}: "
f"${trade['totalValue']:>12,.0f} ({trade['shares']:,} shares)")
import requests
headers = {"Authorization": "Bearer YOUR_API_KEY"}
# Screen House trades
house = requests.get(
"https://api.finbrain.tech/v2/screener/congress/house",
headers=headers,
params={"limit": 100}
).json()
# Screen Senate trades
senate = requests.get(
"https://api.finbrain.tech/v2/screener/congress/senate",
headers=headers,
params={"limit": 100}
).json()
print(f"Recent House trades: {len(house['data']['data'])}")
print(f"Recent Senate trades: {len(senate['data']['data'])}")
CodeErrorDescription
400Bad RequestInvalid parameters or missing required market/region
401UnauthorizedInvalid or missing API key
404Not FoundEndpoint not found
500Internal Server ErrorServer-side error