Insider Transactions Dataset
Track executive purchases, sales, option exercises, and ownership changes from SEC Form 4 filings. Insider transactions are among the most predictive alternative data signals for equity returns.
What’s Included
Section titled “What’s Included”The Insider Transactions dataset provides:
- Transaction Details: Buy, sell, option exercise, and gift transactions
- Insider Information: Name, title, and relationship to company
- Share Data: Number of shares and price per share
- Ownership Changes: Post-transaction holdings
- Filing Links: Direct links to SEC Form 4 filings
Coverage
Section titled “Coverage”| Filing Type | Description | Update Frequency |
|---|---|---|
| Form 4 | Changes in beneficial ownership | Real-time |
| Form 3 | Initial statement of ownership | Real-time |
| Form 144 | Notice of proposed sale | Real-time |
Transaction Types & Signals
Section titled “Transaction Types & Signals”| Type | Description | Signal |
|---|---|---|
| Purchase | Open market buy | Bullish - insiders buying with their own money |
| Sale | Open market sell | May be neutral (planned sales) or bearish |
| Option Exercise | Stock option converted to shares | Neutral - compensation related |
| Gift | Shares donated | Neutral |
| Automatic | 10b5-1 plan execution | Neutral - pre-planned |
Quick Start
Section titled “Quick Start”from finbrain import FinBrainClient
fb = FinBrainClient(api_key="YOUR_API_KEY")
df = fb.insider_transactions.ticker("AAPL", as_dataframe=True)print(df)import requests
API_KEY = "YOUR_API_KEY"BASE_URL = "https://api.finbrain.tech/v2"
response = requests.get( f"{BASE_URL}/insider-trading/AAPL", headers={"Authorization": f"Bearer {API_KEY}"})
data = response.json()for txn in data["data"]["transactions"]: print(f"{txn['date']}: {txn['insider']} - {txn['transactionType']} ${txn['totalValue']:,.0f}")For complete code examples in Python, JavaScript, C++, Rust, and cURL, see the API Reference.
Visualization
Section titled “Visualization”Plot insider transactions on a price chart with the built-in SDK chart. You must supply your own price data:
from finbrain import FinBrainClientimport yfinance as yf
fb = FinBrainClient(api_key="YOUR_API_KEY")
# Provide your own price dataprice_df = yf.download("NVDA", start="2024-01-01", end="2025-01-01")
# One-line interactive chart with buy/sell markers on pricefb.plot.insider_transactions("NVDA", price_df)
Use Cases
Section titled “Use Cases”Insider Purchase Scanner
Section titled “Insider Purchase Scanner”Build a scanner to find stocks with significant insider buying:
from finbrain import FinBrainClientfrom datetime import datetime, timedelta
fb = FinBrainClient(api_key="YOUR_API_KEY")
def scan_insider_purchases(symbols, days=30, min_value=100000): """Find symbols with significant insider purchases""" date_from = (datetime.now() - timedelta(days=days)).strftime("%Y-%m-%d") date_to = datetime.now().strftime("%Y-%m-%d")
results = []
for symbol in symbols: try: df = fb.insider_transactions.ticker( symbol, date_from=date_from, date_to=date_to, as_dataframe=True )
purchases = df[ (df["transactionType"] == "Buy") & (df["totalValue"] >= min_value) ]
if not purchases.empty: total_value = purchases["totalValue"].sum() results.append({ "symbol": symbol, "purchases": len(purchases), "total_value": total_value }) except Exception: continue
return sorted(results, key=lambda x: x["total_value"], reverse=True)
# Scan tech stockstech_symbols = ["AAPL", "MSFT", "GOOGL", "AMZN", "NVDA", "META", "TSLA"]purchases = scan_insider_purchases(tech_symbols)
for p in purchases: print(f"{p['symbol']}: {p['purchases']} purchases, ${p['total_value']:,.0f}")Cluster Buying Detection
Section titled “Cluster Buying Detection”Detect when multiple insiders are buying - a stronger bullish signal:
from finbrain import FinBrainClient
fb = FinBrainClient(api_key="YOUR_API_KEY")
def detect_cluster_buying(symbol): """Detect cluster buying (multiple insiders buying)""" df = fb.insider_transactions.ticker(symbol, as_dataframe=True)
purchases = df[df["transactionType"] == "Buy"].copy()
# Group by month purchases["month"] = purchases.index.to_series().str[:7] # YYYY-MM
clusters = [] for month, group in purchases.groupby("month"): unique_insiders = group["insider"].unique() if len(unique_insiders) >= 2: clusters.append({ "period": month, "insiders": list(unique_insiders), "total_value": group["totalValue"].sum() })
return clusters
clusters = detect_cluster_buying("AAPL")for c in clusters: print(f"{c['period']}: {len(c['insiders'])} insiders, ${c['total_value']:,.0f}")C-Suite Tracking
Section titled “C-Suite Tracking”Focus on CEO, CFO, and board member transactions - often the most informed insiders:
from finbrain import FinBrainClient
fb = FinBrainClient(api_key="YOUR_API_KEY")
C_SUITE_TITLES = [ "Chief Executive Officer", "CEO", "Chief Financial Officer", "CFO", "Chief Operating Officer", "COO", "President", "Director", "Chairman"]
def get_csuite_transactions(symbol): """Filter for C-suite and board member transactions""" df = fb.insider_transactions.ticker(symbol, as_dataframe=True)
mask = df["relationship"].str.lower().apply( lambda r: any(title.lower() in r for title in C_SUITE_TITLES) ) return df[mask]
csuite = get_csuite_transactions("AAPL")for date, row in csuite.iterrows(): print(f"{date}: {row['insider']} ({row['relationship']})") print(f" {row['transactionType']} ${row['totalValue']:,.0f}")Related Resources
Section titled “Related Resources”- Insider Transactions API Reference - Endpoint details, parameters, and response schema
- Building an Insider Trading Scanner - Step-by-step guide
- Congressional Trading Data - Track politician trades