What would your bot do if it woke up tomorrow and saw that an Nvidia director had just sold $47 million of stock? Fire a sell order? Post an alert to Slack? Most of the insider-tracking bots I’ve seen in the wild would do exactly that, and most of them would be wrong, because they treat a filing as a verdict when it’s really just a row in a database.
Here’s the news that set this off. Bloomberg and Quartz reported that in the third quarter of 2026, Mark Stevens, a venture capitalist and Nvidia director, topped the list of insider stock sellers after unloading over $47 million worth of Nvidia shares. The quarter was turbulent for tech stocks generally, with plenty of warnings floating around about the risks building up in AI. Stevens wasn’t alone on the AI-linked side of the list, either. Jayshree Ullal, CEO of Arista Networks, and Jeff Bezos, founder of Amazon.com, both showed up. The Washington Service, which tracks insider buying and selling, put the combined net worth of those three at $302 billion.
That’s the whole factual core. Four names, one dollar figure, one quarter, one tracking firm. And it’s a useful case study for anyone building bots on top of regulatory data, because the gap between what the data says and what your bot concludes is where almost all the bugs live.
Insider filings are events, not opinions
A Form 4 tells you that a transaction happened. It does not tell you why. A director selling through trusts that hold indirect interests is a different situation from an executive hitting the market directly, and both can be different again from a sale executed under a pre-scheduled plan set up months earlier. Reporting on Stevens’ transactions noted multiple sales on September 3 and 4, 2026, routed through trusts holding his indirect interests. If your bot flattens all of that into “insider sold, bearish,” you’ve thrown away the only part of the record that carried meaning.
This is the same mistake I see in sentiment bots that score a headline without checking whether it’s an opinion column or a court filing. The schema is doing you a favor by preserving the distinction. Don’t normalize it away for the sake of a tidier table.
What a sane pipeline looks like
If I were building this today, I’d structure it in layers and keep each one boring:
- Ingest raw, store raw. Pull filings and keep the original documents immutably. When your parser is wrong in six months, you’ll want to replay history rather than refetch it.
- Parse into a typed record. Issuer, filer, role, transaction type, direct versus indirect ownership, share count, date, and whether the trade was executed under a pre-arranged plan. Keep nullable fields nullable instead of guessing defaults.
- Enrich separately. Dollar value, percentage of holdings sold, and historical frequency for that filer belong in a derived layer you can recompute without touching the source of truth.
- Score last, and score cautiously. Any scoring step should be swappable. Treat it as a hypothesis, not a fact.
- Alert with context attached. A notification that says “director sold $47M via trusts, indirect holdings, two-day window” is useful. One that says “SELL SIGNAL: NVDA” is a liability.
Base rates will humble you
The reason I’m cautious here isn’t squeamishness about automated trading. It’s that insider selling is extremely common for people whose compensation is mostly equity. Large sales by very wealthy executives are the normal state of the world, not a departure from it. When the combined net worth of three sellers runs to $302 billion, the interesting question stops being “did they sell” and becomes “did they sell differently than usual.”
That reframing changes your architecture. You stop building a threshold alert and start building a baseline. You need per-filer history, rolling windows, and a notion of expected behavior before any deviation means anything. That’s more work, and it’s the work that separates a bot that produces insight from a bot that produces noise at scale.
Build the dashboard before the trader
My standing advice for anyone starting this project: ship the read-only version first. Make a clean feed with solid filters, good deduplication, and links back to the source documents. Live with it for a quarter. You’ll learn where your parser breaks, which filers are chronically noisy, and how often your gut reaction to a headline number would have been premature.
Then, if you still want the bot to act on its own, you’ll at least know what it’s acting on. Journalists had the full context on Stevens’ sales because they read the filings and the circumstances around them. Your bot deserves the same standard before it gets permission to spend your money.
🕒 Published: