Politicians Trading API
Track congressional STOCK Act trading disclosures: purchases, sales, and exercises by U.S. Senators and Representatives. Updated daily from official filings.
Overview
The Politicians Trading API provides access to congressional STOCK Act trading disclosures. Under the STOCK Act (2012), members of the U.S. Senate and House of Representatives must publicly disclose securities transactions within 45 days. This data reveals what elected officials are buying and selling in their personal portfolios.
Use cases:
- Track which stocks members of Congress are buying and selling
- Filter by chamber (Senate vs House), party, or state
- Identify stocks with heavy congressional interest
- Cross-reference politician trades with insider trading (Form 4) and institutional flows (13F)
- Build quantitative strategies based on congressional trading signals
Chambers: SENATE, HOUSE.
Transaction types: PURCHASE, SALE, EXCHANGE, OTHER.
Asset types: Stock, ETF (additional types planned).
Ownership types: Self, Spouse, Child, Joint.
Amount ranges: STOCK Act disclosures report dollar amounts as ranges (e.g., "$1,001 - $15,000"), not exact values. The API returns the raw range string plus parsed amountMin and amountMax fields.
Access: All endpoints require a PRO subscription for full data. Free/unauthenticated users see a limited preview with isPreview: true in the response.
GET /activity
Returns recent congressional trading activity across all politicians, sorted by transaction date (newest first). Each entry is a single STOCK Act disclosure record.
Authentication: PRO required. Free users receive a preview of the top 5 trades.
Parameters:
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
lookbackDays |
integer | No | 90 | Number of days to look back. Must be between 1 and 365 (inclusive); returns 400 otherwise |
Example Request:
curl -H "X-SentiSense-API-Key: ss_live_YOUR_KEY" \
"https://app.sentisense.ai/api/v1/politicians/activity?lookbackDays=90"
from sentisense import SentiSenseClient
client = SentiSenseClient(api_key="ss_live_YOUR_KEY")
activity = client.get_politician_activity(lookback_days=90)
for trade in activity["data"]:
print(f"{trade['politicianName']} ({trade['party']}-{trade['state']}): {trade['transactionType']} {trade['ticker']} {trade['amountRange']}")
Response Schema:
| Field | Type | Description |
|---|---|---|
isPreview |
boolean | true when response is limited (Free/unauthenticated) |
previewReason |
string | "LOGIN_REQUIRED", "PRO_REQUIRED", or null |
data |
array | Array of trade objects (see below) |
Trade object:
| Field | Type | Description |
|---|---|---|
politicianName |
string | Full name (e.g., "Nancy Pelosi") |
firstName |
string | First name |
lastName |
string | Last name |
chamber |
string | SENATE or HOUSE |
party |
string | Political party (e.g., "Democrat", "Republican") |
state |
string | Two-letter state code (e.g., "CA") |
bioguideId |
string | Official Bioguide identifier |
imageUrl |
string | URL to politician's headshot image |
ticker |
string | Stock ticker symbol |
assetDescription |
string | Security description from filing |
assetType |
string | Stock or ETF |
transactionType |
string | PURCHASE, SALE, EXCHANGE, or OTHER |
transactionDate |
string | Date of the transaction (ISO format) |
disclosureDate |
string | Date the disclosure was filed |
disclosureDelayDays |
int | Days between transaction and disclosure |
amountRange |
string | Raw STOCK Act range (e.g., "$1,001 - $15,000") |
amountMin |
long | Minimum dollar amount of the range |
amountMax |
long | Maximum dollar amount of the range |
owner |
string | Who made the trade: Self, Spouse, Child, or Joint |
urlSlug |
string | Politician's URL slug for /member/{slug} lookup |
Example Response:
{
"isPreview": false,
"previewReason": null,
"data": [
{
"politicianName": "Nancy Pelosi",
"firstName": "Nancy",
"lastName": "Pelosi",
"chamber": "HOUSE",
"party": "Democrat",
"state": "CA",
"bioguideId": "P000197",
"imageUrl": "https://cdn.sentisense.ai/politicians/P000197.jpg",
"ticker": "NVDA",
"assetDescription": "NVIDIA Corporation",
"assetType": "Stock",
"transactionType": "PURCHASE",
"transactionDate": "2026-03-15",
"disclosureDate": "2026-03-28",
"disclosureDelayDays": 13,
"amountRange": "$500,001 - $1,000,000",
"amountMin": 500001,
"amountMax": 1000000,
"owner": "Spouse",
"urlSlug": "nancy-pelosi"
}
]
}
Free/unauthenticated: same shape with isPreview: true, previewReason: "PRO_REQUIRED", and data truncated to top 5.
GET /filings/{ticker}
Returns congressional trades for a specific stock, sorted newest-first. Use this to see which politicians have been buying or selling a particular ticker.
Authentication: PRO required. Free users receive a preview of the top 3 trades.
Parameters:
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
ticker |
path | Yes | - | Stock ticker symbol (e.g., AAPL) |
lookbackDays |
integer | No | 90 | Number of days to look back. Must be between 1 and 365 (inclusive); returns 400 otherwise |
Example Request:
curl -H "X-SentiSense-API-Key: ss_live_YOUR_KEY" \
"https://app.sentisense.ai/api/v1/politicians/filings/NVDA?lookbackDays=180"
filings = client.get_politician_filings("NVDA", lookback_days=180)
for f in filings["data"]:
print(f"{f['politicianName']}: {f['transactionType']} {f['amountRange']} on {f['transactionDate']}")
Response: Same preview wrapper and trade object schema as /activity.
GET /members
Returns all tracked politicians with trading summary statistics, sorted by total trade count (most active first).
Authentication: PRO required. Free users receive a preview of the top 5 members.
Parameters: None.
Example Request:
curl -H "X-SentiSense-API-Key: ss_live_YOUR_KEY" \
"https://app.sentisense.ai/api/v1/politicians/members"
members = client.get_politician_members()
for m in members["data"]:
print(f"{m['displayName']} ({m['party']}-{m['state']}): {m['totalTrades']} trades ({m['purchaseCount']} buys, {m['saleCount']} sells)")
Response Schema:
| Field | Type | Description |
|---|---|---|
isPreview |
boolean | true when response is limited |
previewReason |
string | "LOGIN_REQUIRED", "PRO_REQUIRED", or null |
data |
array | Array of politician summary objects (see below) |
Politician summary object:
| Field | Type | Description |
|---|---|---|
urlSlug |
string | URL-friendly identifier (use with /member/{slug}) |
displayName |
string | Full display name |
firstName |
string | First name |
lastName |
string | Last name |
chamber |
string | SENATE or HOUSE |
party |
string | Political party |
state |
string | Two-letter state code |
bioguideId |
string | Official Bioguide identifier |
imageUrl |
string | URL to headshot image |
totalTrades |
int | Total number of disclosed trades |
purchaseCount |
int | Number of purchase transactions |
saleCount |
int | Number of sale transactions |
latestTradeDate |
string | Date of most recent trade |
kbEntityId |
string|null | Internal knowledge base entity ID |
sentimentScore |
double|null | SentiSense sentiment score (null when not yet computed) |
GET /member/{slug}
Returns a detailed profile for a single politician, including their summary statistics, recent trades, and most-traded tickers.
Authentication: PRO required. Free users receive a preview-wrapped response.
Parameters:
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
slug |
path | Yes | - | Politician URL slug (e.g., nancy-pelosi). Get slugs from /members |
Example Request:
curl -H "X-SentiSense-API-Key: ss_live_YOUR_KEY" \
"https://app.sentisense.ai/api/v1/politicians/member/nancy-pelosi"
detail = client.get_politician_member("nancy-pelosi")
profile = detail["data"]["profile"]
print(f"{profile['displayName']} - {profile['totalTrades']} trades")
for trade in detail["data"]["recentTrades"]:
print(f" {trade['transactionDate']}: {trade['transactionType']} {trade['ticker']} {trade['amountRange']}")
Response Schema:
| Field | Type | Description |
|---|---|---|
isPreview |
boolean | true when response is limited |
previewReason |
string | "LOGIN_REQUIRED", "PRO_REQUIRED", or null |
data |
object | Politician detail object (see below) |
Politician detail object:
| Field | Type | Description |
|---|---|---|
profile |
object | Politician summary (same schema as /members entries) |
recentTrades |
array | Recent trade objects (same schema as /activity entries) |
topTickers |
array | List of most-traded ticker symbols (strings) |
Example Response:
{
"isPreview": false,
"previewReason": null,
"data": {
"profile": {
"urlSlug": "nancy-pelosi",
"displayName": "Nancy Pelosi",
"chamber": "HOUSE",
"party": "Democrat",
"state": "CA",
"bioguideId": "P000197",
"imageUrl": "https://cdn.sentisense.ai/politicians/P000197.jpg",
"totalTrades": 42,
"purchaseCount": 28,
"saleCount": 14,
"latestTradeDate": "2026-03-15"
},
"recentTrades": [
{
"ticker": "NVDA",
"transactionType": "PURCHASE",
"transactionDate": "2026-03-15",
"amountRange": "$500,001 - $1,000,000",
"owner": "Spouse"
}
],
"topTickers": ["NVDA", "AAPL", "MSFT", "GOOG", "AMZN"]
}
}
Try It
Test endpoints directly from your browser. Paste your API key once — it's saved locally and shared across all widgets. Get a free key
GET/api/v1/politicians/activity
Recent congressional trades across all politicians
curl -H "X-SentiSense-API-Key: ssk_YOUR_KEY" \
"https://app.sentisense.ai/api/v1/politicians/activity"GET/api/v1/politicians/filings/{ticker}
Congressional trades for a specific stock
curl -H "X-SentiSense-API-Key: ssk_YOUR_KEY" \
"https://app.sentisense.ai/api/v1/politicians/filings/AAPL"GET/api/v1/politicians/members
All tracked politicians with trading summaries
curl -H "X-SentiSense-API-Key: ssk_YOUR_KEY" \
"https://app.sentisense.ai/api/v1/politicians/members"GET/api/v1/politicians/member/{slug}
Detailed profile and trades for a specific politician
curl -H "X-SentiSense-API-Key: ssk_YOUR_KEY" \
"https://app.sentisense.ai/api/v1/politicians/member/{slug}"