SEC Insiders parses Form 4 filings of S&P 500 companies to detect discretionary buy/sell clusters. In addition to these findings, we compute contextual market metrics and automatically generate shareable market commentary.
Built with a focus on creating a system that provides succinct, dispassionate analysis of insider activity, while leveraging modular construction to allow future extensibility.
- Ingests Form 4 filings
- Parses XML filings from the SEC
- Normalizes transactions into structured records
- Stores data in SQLite
- Filters for quality-signal activity
- We exclude: 10b5-1 plan transactions, option exercises, exercise-related sales, equity swaps
- Focus on discretionary open-market buys (P) and sells (S)
- Detects clusters
- Groups transactions by:
- CIK
- Transaction code
- Rolling time window (configurable)
- Identifies multi-insider accumulation or distribution events
- Groups transactions by:
- Adds contextual metrics
- Moving averages (20MA, 200MA)
- Price location vs MA
- Transaction size in relation to holdings
- Role aggregation (CEO, CFO, Director, etc.)
- Generates output
- Renders shareable images, which are automatically posted to Bluesky and X
SEC XML Feed
↓
XML Parser → Normalizer
↓
SQLite (WAL mode)
↓
Cluster Engine
↓
Metric Enrichment (Price relation to 20/200 MA)
↓
Renderer HTML → Puppeteer / PublisherTo limit noise, we first exclude officers that are typically not affiliated with daily business. Such as titles that contain: retired, former, emeritus, interim, advisor, etc.
A Purchase Cluster Qualifies if:
- The transactions are in a 45-day window (subject to change)
- The minimum transaction in the window is met (currently 3)
- An equity swap wasn't involved
- Was not an option exercise
- Was not the result of an exercise or exercise-related sale
- Was not a predetermined sale under a 10b5-1 plan
- The weighted average purchase price is less than the 20 MA and 200 MA
A Sale Cluster Qualifies if:
- The transactions are in a 45-day window (subject to change)
- The minimum transaction in the window is met (currently 3)
- An equity swap wasn't involved
- Was not an option exercise
- Was not the result of an exercise or exercise-related sale
- Was not a predetermined sale under a 10b5-1 plan
- The weighted average purchase price is greater than the 200 MA
- Node.js (ESM)
- TypeScript
- SQLite (better-sqlite3)
- Puppeteer (image generation)
- Docker (deployment)
- LaunchAgent (timed runs)
This tool surfaces public SEC filings and applies filtering logic. It does not constitute investment advice.