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/lobbyingScreen corporate lobbying filingsNo
GET /v2/screener/government-contractsScreen government contract awardsNo
GET /v2/screener/reddit-mentionsScreen Reddit mentionsNo (optional)
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"] == "Purchase" 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'])}")

Corporate Lobbying Screener Response (200 OK)

Section titled “Corporate Lobbying Screener Response (200 OK)”
{
"success": true,
"data": {
"data": [
{
"company": "AAPL",
"companyName": "Apple Inc.",
"date": "2025-09-15",
"registrantName": "Fierce Government Relations",
"income": 150000,
"expenses": 0,
"quarter": "Q3"
}
],
"summary": {
"totalFilings": 1,
"totalCompanies": 1,
"totalSpend": 150000
}
},
"meta": { "timestamp": "2026-03-12T12:00:00.000Z" }
}
FieldTypeDescription
data[].companystringStock ticker symbol
data[].companyNamestringCompany name
data[].datestringFiling date (YYYY-MM-DD)
data[].registrantNamestringLobbying firm name
data[].incomenumberIncome reported (USD)
data[].expensesnumberExpenses reported (USD)
data[].quarterstringFiling quarter (Q1-Q4)
summary.totalFilingsintegerTotal number of filings returned
summary.totalCompaniesintegerNumber of unique companies
summary.totalSpendnumberSum of income + expenses across all filings

Government Contracts Screener Response (200 OK)

Section titled “Government Contracts Screener Response (200 OK)”
{
"success": true,
"data": {
"data": [
{
"symbol": "LMT",
"name": "Lockheed Martin Corporation",
"awardId": "CONT_AWD_0001",
"awardAmount": 50000000,
"recipientName": "Lockheed Martin Corporation",
"startDate": "2025-06-01",
"awardingAgency": "Department of Defense",
"naicsDescription": "Aircraft Manufacturing"
}
],
"summary": {
"totalContracts": 150,
"totalTickers": 45,
"totalValue": 2500000000
}
},
"meta": { "timestamp": "2026-03-17T15:05:59.853Z" }
}
FieldTypeDescription
data[].symbolstringStock ticker symbol
data[].namestringCompany name
data[].awardIdstringUnique contract award identifier
data[].awardAmountnumberTotal award value in USD
data[].recipientNamestringCompany receiving the contract
data[].startDatestringContract start date (YYYY-MM-DD)
data[].awardingAgencystringFederal agency issuing the contract
data[].naicsDescriptionstringNAICS industry description
summary.totalContractsintegerTotal number of contracts returned
summary.totalTickersintegerNumber of unique tickers
summary.totalValuenumberSum of all award amounts (USD)

Reddit Mentions Screener Response (200 OK)

Section titled “Reddit Mentions Screener Response (200 OK)”
{
"success": true,
"data": {
"data": [
{
"symbol": "TSLA",
"name": "Tesla, Inc.",
"date": "2026-03-16T14:00:00.000Z",
"totalMentions": 57,
"subreddits": {
"wallstreetbets": 45,
"stocks": 12
}
}
],
"summary": {
"totalEntries": 1,
"totalTickers": 1,
"averageMentions": 57,
"topMentioned": ["TSLA"],
"subredditNames": ["stocks", "wallstreetbets"]
}
},
"meta": { "timestamp": "2026-03-17T15:05:59.853Z" }
}
FieldTypeDescription
data[].symbolstringStock ticker symbol
data[].namestringCompany name
data[].datestringSnapshot timestamp (ISO 8601)
data[].totalMentionsintegerTotal mentions across all subreddits
data[].subredditsobjectMention counts keyed by subreddit name
summary.totalEntriesintegerTotal entries returned
summary.totalTickersintegerUnique tickers in result
summary.averageMentionsnumberAverage mentions per entry
summary.topMentionedarrayTop tickers by mention count
summary.subredditNamesarrayList of subreddit names in data
CodeErrorDescription
400Bad RequestInvalid parameters or missing required market/region
401UnauthorizedInvalid or missing API key
403ForbiddenAuthenticated, but not authorized to access this resource
404Not FoundEndpoint not found
429Too Many RequestsRate limit exceeded — wait and retry
500Internal Server ErrorServer-side error