Senate Trades Dataset
Access trading activity from US Senators. Track stock purchases and sales disclosed under the STOCK Act for systematic trading strategies that follow political insiders.
What’s Included
Section titled “What’s Included”The Senate Trading dataset provides:
- Senator Name: Name of the Senate member
- Transaction Type: Purchase or Sale
- Amount Range: Transaction size bracket as reported
- Transaction Date: When the trade occurred
- Historical Data: Years of senate trading history
Coverage
Section titled “Coverage”| Filing Type | Description | Update Frequency |
|---|---|---|
| Periodic Transaction Report | Stock trades by senators | As filed |
| Annual Financial Disclosure | Comprehensive holdings | Annual |
Amount Ranges
Section titled “Amount Ranges”Senate disclosures report amounts in ranges:
| Range | Minimum | Maximum |
|---|---|---|
| $1,001 - $15,000 | $1,001 | $15,000 |
| $15,001 - $50,000 | $15,001 | $50,000 |
| $50,001 - $100,000 | $50,001 | $100,000 |
| $100,001 - $250,000 | $100,001 | $250,000 |
| $250,001 - $500,000 | $250,001 | $500,000 |
| $500,001 - $1,000,000 | $500,001 | $1,000,000 |
| $1,000,001 - $5,000,000 | $1,000,001 | $5,000,000 |
| Over $5,000,000 | $5,000,001 | N/A |
Note: The amount field can be an exact value (e.g., "$360.00") or a range (e.g., "$15,001 - $50,000").
Quick Start
Section titled “Quick Start”from finbrain import FinBrainClient
fb = FinBrainClient(api_key="YOUR_API_KEY")
# Get senate trades as DataFramedf = fb.senate_trades.ticker("S&P 500", "META", as_dataframe=True)print(df.head())For complete code examples in Python, JavaScript, C++, Rust, and cURL, see the API Reference.
Use Cases
Section titled “Use Cases”Senate Trade Alert System
Section titled “Senate Trade Alert System”Build alerts for significant senate purchases:
from finbrain import FinBrainClient
fb = FinBrainClient(api_key="YOUR_API_KEY")
LARGE_TRADES = [ "$500,001 - $1,000,000", "$1,000,001 - $5,000,000", "Over $5,000,000"]
def scan_large_senate_trades(tickers): """Find stocks with large senate purchases""" results = []
for ticker in tickers: try: trades = fb.senate_trades.ticker("S&P 500", ticker)
large_purchases = [ t for t in trades.get("senateTrades", []) if t["type"] == "Purchase" and t["amount"] in LARGE_TRADES ]
if large_purchases: results.append({ "ticker": ticker, "trades": large_purchases }) except Exception: continue
return results
# Scan popular stockstickers = ["NVDA", "AAPL", "MSFT", "GOOGL", "AMZN", "META", "TSLA"]alerts = scan_large_senate_trades(tickers)
for alert in alerts: print(f"\n{alert['ticker']}:") for trade in alert['trades']: print(f" {trade['senator']}: {trade['amount']}")Follow Specific Senators
Section titled “Follow Specific Senators”Track trading activity of specific senators:
from finbrain import FinBrainClient
fb = FinBrainClient(api_key="YOUR_API_KEY")
def get_senator_trades(senator_name, tickers): """Get all trades by a specific senator""" trades_list = []
for ticker in tickers: try: trades = fb.senate_trades.ticker("S&P 500", ticker)
sen_trades = [ {**t, "ticker": ticker} for t in trades.get("senateTrades", []) if senator_name.lower() in t["senator"].lower() ]
trades_list.extend(sen_trades) except Exception: continue
return trades_list
# Track a specific senator's tradessenator_trades = get_senator_trades( "Tuberville", ["NVDA", "AAPL", "MSFT", "GOOGL", "AMZN", "META"])
for trade in senator_trades: print(f"{trade['date']}: {trade['ticker']} - {trade['type']} {trade['amount']}")Trade Activity Analysis
Section titled “Trade Activity Analysis”Analyze buying vs selling activity for a ticker:
from finbrain import FinBrainClient
fb = FinBrainClient(api_key="YOUR_API_KEY")
def analyze_senate_activity(market, ticker): """Analyze senate trading activity for a ticker""" trades = fb.senate_trades.ticker(market, ticker)
trade_data = trades.get("senateTrades", [])
purchases = [t for t in trade_data if t["type"] == "Purchase"] sales = [t for t in trade_data if t["type"] == "Sale"]
return { "ticker": ticker, "total_trades": len(trade_data), "purchases": len(purchases), "sales": len(sales), "buy_sell_ratio": len(purchases) / len(sales) if sales else float('inf'), "senators": list(set(t["senator"] for t in trade_data)) }
analysis = analyze_senate_activity("S&P 500", "META")print(f"Total trades: {analysis['total_trades']}")print(f"Purchases: {analysis['purchases']}, Sales: {analysis['sales']}")print(f"Buy/Sell Ratio: {analysis['buy_sell_ratio']:.2f}")Multi-Senator Buying Signal
Section titled “Multi-Senator Buying Signal”Find stocks where multiple senators are buying:
from finbrain import FinBrainClient
fb = FinBrainClient(api_key="YOUR_API_KEY")
def find_cluster_buying(ticker, min_buyers=2): """Find if multiple senators are buying a stock""" trades = fb.senate_trades.ticker("S&P 500", ticker)
purchases = [ t for t in trades.get("senateTrades", []) if t["type"] == "Purchase" ]
# Count unique senators making purchases buyers = set(p["senator"] for p in purchases)
if len(buyers) >= min_buyers: return { "ticker": ticker, "unique_buyers": len(buyers), "total_purchases": len(purchases), "senators": list(buyers) }
return None
# Check multiple tickersfor ticker in ["NVDA", "AAPL", "MSFT", "GOOGL", "META"]: result = find_cluster_buying(ticker) if result: print(f"{ticker}: {result['unique_buyers']} unique senator buyers")Related Resources
Section titled “Related Resources”- Senate Trades API Reference - Endpoint details, parameters, and response schema
- House Trades Dataset - US House Representatives trading data
- Congressional Trade Signals Guide - Build trading strategies
- Insider Transactions - Corporate insider trades
- Python SDK Documentation