DEV Community

Cover image for I asked an AI agent whether NVIDIA insiders were selling. It read the filings and found one director.
Michael
Michael

Posted on • Originally published at scrapers.lat

I asked an AI agent whether NVIDIA insiders were selling. It read the filings and found one director.

I run a small event-driven book, and the question I get asked most on any big name is also the one that's hardest to answer honestly: are the insiders selling? Not "is there a scary headline about insider sales," but the real thing. Who sold, how much, was it a decision or a formality, and does it actually mean anything.

If you ask a language model that question cold, you get a fluent paragraph that is worse than useless: confidently phrased, months out of date, and occasionally invented. Insider transactions are a matter of public record, filed on SEC Form 4 within two business days of the trade. There is a right answer sitting in the filings. So this time I didn't ask Claude to know the answer. I gave it the filings and asked it to read them for me.

What follows is a real session. Every number below came out of live SEC data during the chat, through the official Apify MCP server. No mocked screens, no cherry-picked record. The interesting part is not that the agent fetched some data. It's what it did with it.

The one thing I wired up beforehand

The setup is embarrassingly small. Apify's Store has an Actor that reads SEC Form 4 filings and returns each insider transaction as a clean, structured record. I connected it to Claude as a tool through the official Apify MCP server, which turns any Apify Actor into something the model can call mid-conversation. One line of config, one restart. After that, Claude can pull insider filings on its own whenever a question needs them.

The SEC Form 4 Insider Trading Transactions Scraper on the Apify Store

The Actor is the SEC Form 4 Insider Trading Transactions Scraper. Give it a ticker and it returns, per transaction: the insider's name and role, the transaction code and type (open-market buy, open-market sale, grant, gift, tax withholding), the number of shares, the price, the total value, how much of the insider's stake it moved, and whether it ran under a Rule 10b5-1 plan. That last field is the one that separates a real signal from noise, and I'll come back to it. The point is that the agent doesn't get a headline. It gets the same fields a filing does, and it has to reason over them.

Asking the real question

So I asked it the real question, the way I'd ask a junior analyst: don't guess, pull the filings, and tell me what's genuine trading versus routine noise.

Claude pulling NVIDIA's Form 4 filings and separating real open-market sales from grants, gifts and tax withholding

The first thing it did was the thing most people skip. It pulled 40 real transactions and, before saying anything about a "signal," sorted them by transaction code. This matters more than it sounds. A Form 4 marked as a "disposal" is very often not someone choosing to sell:

  • 11 were code A: stock grants to the board and officers, zero cash. Not selling.
  • 8 were code F: shares handed back to cover taxes when awards vested, all on the same day, including CEO Jensen Huang and CFO Colette Kress. This is payroll mechanics, not a market call.
  • 3 were code G: gifts, including a 400,000-share gift by the CEO. A transfer, not a sale.
  • 18 were code S: actual open-market sales. This is the only bucket that carries information.

An analyst who reads "insider disposed of shares" across all 40 of those and panics has misread the filing. The agent didn't. It said, in effect: strip the housekeeping, and the honest headline isn't "insiders are dumping," it's that there are eighteen genuine sales worth looking at, and they look concentrated. Then it offered to go deeper. That framing (noise first, signal second) is exactly what I want and rarely get from an automated tool.

Making it characterize the pattern

A count of sales is still not an answer. Eighteen sales could be the whole C-suite trimming a little, or one person doing something unusual. Those mean opposite things. So I asked it to roll the open-market selling up by person, and to tell me for each whether the sale was discretionary or ran on a pre-set Rule 10b5-1 plan.

Claude rolling up the open-market sellers into a table by person, role, size and 10b5-1 plan status

This is the shot that changed my read of the name. Rolled up by person, five insiders sold on the open market since January, but the values are wildly lopsided: Mark A. Stevens at roughly $445.6M across 2,106,682 shares, then a steep drop to Aarti S. Shah at $3.36M, Stephen C. Neal at $3.34M, Donald F. Robertson Jr at $0.94M, and John Dabiri at $0.13M. Next to each name, the agent put the field that actually carries the signal: was the sale discretionary, or run on a pre-scheduled Rule 10b5-1 plan.

The characterization the agent gave was sharper than "insiders sold $460M of stock," which is the kind of line that ends up in a scary headline. It said: this is not a broad insider exodus. It is essentially one director. Mark A. Stevens accounts for about 99% of the open-market sale dollars, seven trades, all off-plan (discretionary, not on a 10b5-1 schedule), clustered in two waves: a bit in late March, then a heavy June (500,000 shares on the 2nd, another 500,000 on the 4th, 885,000 on the 18th). One June block alone trimmed 6.76% of his own position. Everyone else who sold was small, and three of the four sold under pre-scheduled 10b5-1 plans, which carry little signal by construction. The CEO and CFO you might expect to see selling into a high? Not one open-market sale between them. They appear only for tax withholding.

That is a genuinely different story than the aggregate number tells. "The board is bailing" would be wrong. "One director has been selling large, discretionary blocks" is right, and it's specific enough to actually do something with, like read his filing history, or check whether it's a known diversification pattern.

Context, and being honest about the limits

The last thing I did was the part that keeps this from turning into a conspiracy board. I asked whether any of the selling lined up with company disclosures, and (explicitly) to be blunt about what this signal does and doesn't tell me. Because the same MCP connection can expose more than one Actor, the agent reached for a second tool without being told which one.

Claude chaining the EDGAR filings tool for context and then stating plainly what the signal is not: not investment advice and not a claim of wrongdoing

It pulled NVIDIA's recent 8-Ks and noted one honest timing coincidence: Stevens' largest single-day selling, roughly $186M across two blocks on 2026-06-18, fell on the same day the company filed an 8-K (Item 8.01, Other Events). It flagged the date and immediately declined to draw a line through it. Then it said the thing I most needed it to say, unprompted:

This is a faster way to read the public record. It is not investment advice, and it is not a claim that anyone did anything wrong. Off-plan open-market sales by a director are legal and ordinary: people sell for taxes, diversification, estate planning, a new house, and a hundred reasons that have nothing to do with a view on the stock. "Discretionary versus 10b5-1" is a factual box on the filing, not an accusation. A sale that happens to land on an 8-K date is a coincidence worth a footnote, not evidence of anything. Do your own diligence.

I want to be equally blunt in print: nothing here is a recommendation, and nothing here implies illegality. The value of the exercise is not a verdict. It's that a task that used to mean opening EDGAR, pulling every Form 4, decoding transaction codes by hand, and rolling them up in a spreadsheet became a three-message conversation, with the noise stripped, the outlier named, and the caveats stated out loud.

What the agent actually did

Strip the theatrics and the useful pattern is this: the agent didn't fetch a fact, it reasoned over a filing set. Three moves, in order, that I'd want from a human:

  • It separated signal from noise before interpreting. Grants, gifts, and tax withholding got sorted out first, so an $8-figure "disposal" that was really a payroll tax event never got mistaken for a bearish sale.
  • It characterized rather than aggregated. "One director is 99% of the selling, all discretionary" is an insight. "$460M of insider sales" is a number that misleads.
  • It stated its own limits. It named a timing coincidence and then refused to make it mean something, and it labeled the whole output as public-record summarization, not advice.

None of my judgment moved to the machine. I still decide whether Stevens' selling matters for the thesis. What moved was the mechanical, error-prone middle (the fetching and decoding and de-noising), which is exactly the part a person under time pressure gets wrong.

Build the same agent

You can reproduce this today with a free Apify account and any MCP-capable client (Claude Desktop, Cursor, or your own agent):

  1. Get your Apify API token from the Apify Console under Settings → Integrations.
  2. Add the official Apify MCP server and list the Actors you want in the tools parameter. For the insider-activity agent above, that's the Form 4 Actor plus the EDGAR filings Actor for context:
{
  "mcpServers": {
    "apify": {
      "url": "https://mcp.apify.com?tools=scrapers_lat/sec-form4-insider-trades-scraper,scrapers_lat/sec-edgar-filings-scraper",
      "headers": { "Authorization": "Bearer YOUR_APIFY_TOKEN" }
    }
  }
}
Enter fullscreen mode Exit fullscreen mode
  1. Restart the client and ask it, in plain English, whether a company's insiders have been buying or selling, and to separate real open-market trades from grants and tax withholding. It will pick the right tool, pull the filings, and characterize the pattern.

📌 Note: each tool call is a real Actor run billed to your Apify account (this one is pay-per-result, a fraction of a cent per lookup). To watch a whole basket of tickers continuously, run the Actor on a schedule through the Apify API instead of one call per chat.

🏹 Extend it: widen the window with dateFrom on a name with heavier activity, or pin the agent to one behaviour by passing transactionCode (P for open-market buys, S for open-market sales) so it never sees the housekeeping in the first place. Add more Actors to the tools list and the same agent covers more of the disclosure surface without a line of new code.

The Actors used in this piece: SEC Form 4 Insider Trading Transactions Scraper and SEC EDGAR Filings Scraper. Everything shown is real output from live runs, and none of it is investment advice.

Top comments (0)