Field NotesRun it. Publish what came back.Issue 01
I Opened 1,598 Insider Clusters. 80 Were Real Buys.
I pulled 149,166 Form 4 filings to test the trade everyone screens for. Then I read the filings and found out what I was actually measuring.
AJ Lands · August 5, 2026 · 4 min read
5%of the clusters I opened contained real buying
There is a trade that gets screened constantly. Several executives at the same company file a Form 4 in the same two weeks, and it reads as shared conviction. They are not allowed to trade on inside information or tip each other, so independent buying at the same moment is supposed to mean something. I went to check it against the filings themselves rather than a screener. The filings had a different story.
149,166
I pulled 149,166 filings, which is less than half of them.
EDGAR has a free full-text search API that almost nobody uses seriously. I queried it 53 times, one 14-day window at a time, from August 2024 through July 2026. 1,493 pages, four errors, 149,166 filings on my hard drive.
Here is the first thing I got wrong. My harvester caps each window at 3,000 filings, and 50 of the 53 windows blew through that cap. When I went back and counted the real universe, it was about 349,000 filings. I had 43 percent of them, and the busiest stretches, proxy season in particular, are the most underrepresented.
So everything below describes a large truncated sample, not a census. I did not know that while I was working. I found it while fact-checking this issue, which is the only reason you are reading it here instead of in a reply.
t = 0.70
The signal came back as nothing.
Any ticker with two or more insider filings inside one window counted as a cluster. That gave me 14,357 of them.
The test: buy at the next open after the cluster, hold ten days, subtract what the market did anyway, and charge yourself 24 basis points, because pretending trades are free is how backtests lie. After dropping clusters at issuers I could not resolve to a listed ticker, collapsing overlapping windows into unique ticker-date events, and dropping anything without clean price history, 204 events were left to measure. That is a small and liquidity-skewed slice of 14,357, and the result belongs to that slice.
It came back at plus 1.04 percent, t-statistic 0.70. Shuffle the dates at random and you would see a result at least this big nearly half the time. There is no signal there.
0 of 25
Then I opened the filings and read them.
Before writing up a null I like to look at the raw data, mostly out of superstition. I pulled 25 clusters and parsed the XML to see what the insiders had actually done.
None of the 25 contained a purchase. Every filing in that sample was an option exercise, a vesting event, a grant, or a scheduled sale. Twenty-five is a small sample and it cannot prove a universal claim, but zero out of twenty-five is a loud enough hint to stop and rethink the design.
The explanation is boring and complete. Executive compensation runs on a corporate calendar, so the paperwork lands in the same fortnight at the same company every year. I had built an expensive detector for the fact that companies pay people on a schedule.
80 of 1,598
Real buying is about 5% of what the screen calls a cluster.
The fix is obvious and expensive. Only count a cluster if at least two of its filings carry transaction code P, which the SEC uses for a voluntary cash purchase, open market or privately negotiated, as opposed to anything compensation-derived. And throw it out if any filing in the cluster is a sale. That means fetching and parsing the XML behind each filing, one at a time.
1,598 clusters opened. 5,998 fetches. 80 confirmed. That is 5 percent of the clusters I actually inspected.
One caveat that matters: the scan stopped when it reached 80 confirmed, because that was the target I set. 80 is where I stopped looking, not how many exist. Against all 14,357 clusters the rate would be 0.56 percent, but that number quietly assumes every cluster I never opened was not a buy, so treat 5 percent of inspected as the honest figure and 0.56 percent as a floor.
+6.17%
The real ones move. I am still not trading it.
53 of the 80 had enough price history to measure. Average over ten days: plus 6.17 percent, t-statistic 2.44, which is p equals 0.018. That clears the bar people quote.
This is the part where I am supposed to tell you I found an edge. No. It is 53 events, measured in the same data I went looking in, on a sample that stopped at a target I picked. The t-statistic is a naive pooled one with no correction for overlapping holding periods, which inflates it. And I have run on the order of a thousand other strategy tests across my systems, which is enough attempts that something crossing 2.0 is expected rather than surprising.
It goes to forward testing, where it gets to be wrong in public. Then I will believe it or bury it.
4,414
The activist version fails the same way, from the far end.
Same weekend, different idea. When an activist files an SC 13D disclosing a big stake, does the stock drift afterward? 4,414 filings across eight quarters, 57 events with usable prices. Plus 3.52 percent, t-statistic 0.82. Null again.
The academic work really does document 7 to 8 percent around these events, and it is not wrong. It is measured over a window that opens well before the filing date. The money accrues while the activist is quietly accumulating. By the time the disclosure is public you are buying the receipt for somebody else's idea.
Both of these signals have the same shape, which is the actual finding of the week: the information is pre-public, and the filing is the paperwork that follows it.
The honest scoreboard: one truncated harvest, one dead signal, one explanation I did not expect, and one small cohort that survived and now has to prove itself out of sample. The corrections in this issue came from fact-checking my own draft against the source files, which found three claims I had overstated. That process is going to run on every issue, and when it catches me I will show you where.
No signup, no email capture. Point a reader at https://notes.ajai.agency/rss.xml and new issues arrive wherever you already read things.