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):

Method Example
Bearer token (recommended) Authorization: Bearer YOUR_API_KEY
X-API-Key header X-API-Key: YOUR_API_KEY
Query parameter ?apiKey=YOUR_API_KEY
Legacy query parameter ?token=YOUR_API_KEY
Endpoint Description Requires market/region?
GET /v2/screener/sentiment Screen sentiment across tickers Yes (market OR region)
GET /v2/screener/analyst-ratings Screen analyst ratings No (optional)
GET /v2/screener/insider-trading Screen insider trades No
GET /v2/screener/congress/house Screen House trades No
GET /v2/screener/congress/senate Screen Senate trades No
GET /v2/screener/news Screen news articles No (optional)
GET /v2/screener/put-call-ratio Screen put/call ratios No (optional)
GET /v2/screener/linkedin Screen LinkedIn data Yes (market OR region)
GET /v2/screener/app-ratings Screen app ratings Yes (market OR region)
GET /v2/screener/lobbying Screen corporate lobbying filings No
GET /v2/screener/government-contracts Screen government contract awards No
GET /v2/screener/reddit-mentions Screen Reddit mentions No (optional)
GET /v2/screener/predictions/daily Screen daily predictions No (optional)
GET /v2/screener/predictions/monthly Screen monthly predictions No (optional)
Parameter Type Required Description
apiKey string No Your API key (if not using header auth)
limit integer No Number of results to return (1-20,000)
market string No Filter by market name (e.g., NASDAQ, S&P 500)
region string No Filter 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" }
}
Field Type Description
data[].symbol string Stock ticker symbol
data[].name string Company name
data[].date string Date of the sentiment score (YYYY-MM-DD)
data[].score number Sentiment score from -1 (bearish) to 1 (bullish)
summary.totalTickers integer Number of tickers in the result
summary.averageScore number Average sentiment score across all tickers
summary.bullishCount integer Number of tickers with positive sentiment
summary.bearishCount integer Number of tickers with negative sentiment
summary.neutralCount integer Number 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" }
}
Field Type Description
data[].symbol string Stock ticker symbol
data[].name string Company name
data[].date string Transaction date (YYYY-MM-DD)
data[].insider string Insider name
data[].relationship string Insider’s role or relationship to the company
data[].transactionType string Type of transaction (e.g., Sale, Buy)
data[].shares integer Number of shares traded
data[].totalValue integer Total transaction value in USD
summary.totalTransactions integer Total number of transactions returned
summary.totalTickers integer Number of unique tickers in the result
summary.buyCount integer Number of buy transactions
summary.sellCount integer Number 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" }
}
Field Type Description
data[].company string Stock ticker symbol
data[].companyName string Company name
data[].date string Filing date (YYYY-MM-DD)
data[].registrantName string Lobbying firm name
data[].income number Income reported (USD)
data[].expenses number Expenses reported (USD)
data[].quarter string Filing quarter (Q1-Q4)
summary.totalFilings integer Total number of filings returned
summary.totalCompanies integer Number of unique companies
summary.totalSpend number Sum 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" }
}
Field Type Description
data[].symbol string Stock ticker symbol
data[].name string Company name
data[].awardId string Unique contract award identifier
data[].awardAmount number Total award value in USD
data[].recipientName string Company receiving the contract
data[].startDate string Contract start date (YYYY-MM-DD)
data[].awardingAgency string Federal agency issuing the contract
data[].naicsDescription string NAICS industry description
summary.totalContracts integer Total number of contracts returned
summary.totalTickers integer Number of unique tickers
summary.totalValue number Sum 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" }
}
Field Type Description
data[].symbol string Stock ticker symbol
data[].name string Company name
data[].date string Snapshot timestamp (ISO 8601)
data[].totalMentions integer Total mentions across all subreddits
data[].subreddits object Mention counts keyed by subreddit name
summary.totalEntries integer Total entries returned
summary.totalTickers integer Unique tickers in result
summary.averageMentions number Average mentions per entry
summary.topMentioned array Top tickers by mention count
summary.subredditNames array List of subreddit names in data
Code Error Description
400 Bad Request Invalid parameters or missing required market/region
401 Unauthorized Invalid or missing API key
403 Forbidden Authenticated, but not authorized to access this resource
404 Not Found Endpoint not found
429 Too Many Requests Rate limit exceeded — wait and retry
500 Internal Server Error Server-side error