▶ Full Post Text
"Follow the insiders" is one of the most repeated ideas in retail investing. There's been a lot of studies published linking insider purchases to excess returns and there's good reasoning why it should work. Afterall company executives have the best insight into their own company's performance and as Peter Lynch said "Insiders might sell their shares for any number of reasons, but they buy them for only one: they think the price will rise". I'm particularly interested in the direct purchase transactions, when insiders buy their own stock on open market with their own money. I ran a number of queries to test if simply following those insider trades allows you to beat the market.
Important methodology notes first. I built my own database for tracking insider trades and this is where I source my data from. I fetch transaction data from sec-api and use financial data APIs to source prices and additional context for each transaction. I used it to grab every open-market insider purchase filed since January 2025. Then I compared each one to SPY across multiple holding windows. 9,000 purchases across 2,008 tickers, about 16 months of data.
One thing that matters a lot and most research doesn't mention, I measure everything from filing-date close, not the insider's transaction price. This is the price you'd actually get if you saw the filing and bought the stock that day. Most academic research uses the transaction price, which includes the days between when the insider bought and when the filing went public. It measures what the insider got and most often looks better. I'm interested in what you'd get if you followed them.
|Window|N (transactions)|N (unique tickers)|
|:-|:-|:-|
|5 days|8,900|1,999|
|1 month|8,556|1,949|
|3 months|7,290|1,742|
|6 months|5,440|1,462|
|12 months|2,015|771|
*Sample sizes per holding window. N drops at longer windows because newer filings haven't reached those horizons yet. The 12 month window only covers Jan-Apr 2025 filings, the earliest cohort in the dataset.*
# The averages are misleading
Before I show the results, see this. Raw average return across all insider purchases at 3 months is +25.6%. That number is meaningless for the typical follower.
|Window|Raw Mean|Trimmed Mean|Raw Median|Trimmed Median|
|:-|:-|:-|:-|:-|
|3 months|25.61%|5.99%|2.12%|2.12%|
|6 months|26.39%|11.77%|4.23%|4.23%|
*Raw vs P1/P99 trimmed (top and bottom 1% removed). The mean drops by 4x when you remove 2% of the data.*
When removing 2% of observations changes the mean this much, the mean was telling you about the tails, not the typical purchase. A handful of extreme small-cap winners, stocks that went up 500%, 1000%, sometimes more, pull the raw average up. Remove the top and bottom 1% and the mean drops to 6%. The median sits near 2% either way, which is obvious when trimming top and bottom.
I checked the top performers, the ones the trimming removes. They're all micro-caps. $20-50M companies that 10x'd. Real money, real returns. Removing them isn't dismissing them, it's separating their dynamics from the rest of the sample.
When mean and median diverge this much, the "average" is describing a result almost nobody actually gets. A few lottery tickets pull the number up. The median, the result you'd most likely experience, sits near zero.
Every number from here on is P1/P99 trimmed. I show medians alongside means throughout. Those trimmed numbers above were absolute returns. From here on I'm measuring against SPY, what your purchase returned minus what the index returned over the same period.
# If you followed every insider filing, here's what you'd get
|Window|N|Mean|Median|Beat SPY %|SD|
|:-|:-|:-|:-|:-|:-|
|5 days|8,722|\+1.51%|\+0.50%|54.7%|7.89%|
|1 month|8,384|\+1.27%|\-0.08%|49.7%|14.77%|
|3 months|7,145|\+1.14%|\-2.44%|44.3%|29.07%|
|6 months|5,330|\-0.60%|\-7.34%|39.2%|46.37%|
|12 months|1,974|\+0.70%|\-6.82%|41.4%|66.24%|
*SPY-excess returns per holding window. Beat SPY % = share of purchases that outperformed the index. SD = standard deviation of excess returns.*
There's a real short-term lift after these filings. At 5 days, a majority beat SPY by a small amount. Whether that's the market reacting to insider information or simple mean reversion in beaten-down stocks isn't something this dataset can disentangle, but the lift is there.
By 1 month it's a coin flip.
By 3 months, 44% of purchases beat SPY. By 6 months, only 39%. The median trailed by 7.3 points. Real winners exist but they're outnumbered.
One thing worth flagging on the 12 month row. It only covers stuff filed in the first four months of 2025, anything later just hasn't had a year on it yet to be in there. So it's not the same purchases as the 6 month window with more time tacked on, it's a different slice of the data. Even in that slice only 41% beat SPY at the one year mark. More time doesn't seem to fix things.
Look at the SD column. At 6 months it's 46.37%, nearly fifty percentage points of spread around the mean. A mean of -0.60% tells you basically nothing when individual outcomes scatter that widely. It's not that insider purchases don't work. It's that the range of outcomes is so wide that the filing alone doesn't narrow it enough.
I also checked this counting each company once instead of each filing, so a ticker with 10 insider buys counts once, not 10 times. Counting only the first transaction per ticker. Results are slightly better across every window but the direction doesn't change.
|Window|Beat SPY % (per filing)|Beat SPY % (per ticker)|
|:-|:-|:-|
|5 days|54.7%|58.7%|
|1 month|49.7%|52.5%|
|3 months|44.3%|46.4%|
|6 months|39.2%|40.3%|
|12 months|41.4%|44.5%|
*Per-filing vs per-ticker beat-SPY rates. The ticker lens counts each company once (median return across all its filings).*
The gap is consistent but small. Companies with lots of insider filings tend to drag the per-filing numbers down a bit, but even when you control for that, the majority still lost to SPY at 3 months and beyond.
One last thing worth pulling from the first table though. Mean sits above median at every single window, and the gap actually grows at longer horizons (1pp at 5d, 6.7pp at 6m, 7.5pp at 12m). The tails are already trimmed so it's not extreme winners pulling things up. A chunk of these purchases still made enough money to drag the average above the median anyway. At the same when less than 50% beat the SPY. The full sample lost to SPY because the noise washes everything out, but that gap tells you a real chunk of these purchases worked. They're just buried in the pile, and figuring out what separates them from the rest is where this actually gets interesting.
# Full distribution
Here's the full distribution so you can see what we're dealing with.
|Window|P10|P25|Median|P75|P90|
|:-|:-|:-|:-|:-|:-|
|5 days|\-6.41%|\-2.51%|\+0.50%|\+4.41%|\+10.26%|
|1 month|\-14.44%|\-6.75%|\-0.08%|\+7.24%|\+17.55%|
|3 months|\-29.60%|\-14.68%|\-2.44%|\+11.31%|\+33.50%|
|6 months|\-47.86%|\-26.71%|\-7.34%|\+13.39%|\+50.36%|
|12 months|\-72.26%|\-38.95%|\-6.82%|\+20.22%|\+81.65%|
*SPY-excess return distribution by percentile. At 6 months the P10-to-P90 range spans 98 percentage points. At 12 months it's 154.*
At 6 months, the bottom 10% trailed SPY by 48 points. The top 10% beat it by 50. That's the spread you're working with. The filing alone just doesn't tell you which side you end up on.
# Winners vs losers
One number that puts this in perspective. I split winners from losers and looked at the median outcome for each group separately.
|Window|Median Winner (vs SPY)|Median Loser (vs SPY)|Skewness|
|:-|:-|:-|:-|
|5 days|\+3.90%|\-2.89%|0.38|
|1 month|\+7.29%|\-6.72%|0.27|
|3 months|\+13.85%|\-13.03%|0.37|
|6 months|\+20.71%|\-21.23%|0.44|
|12 months|\+29.86%|\-33.31%|0.34|
*Median winner = median SPY excess among purchases that beat SPY. Median loser = median among those that didn't. Skewness uses Pearson's second coefficient.*
At 6 months, the median winner beat SPY by +20.71%. The median loser trailed by -21.23%. Almost perfectly symmetric in magnitude, but 61% of purchases landed on the losing side. The alpha is real for the winners. +21% over the index is substantial. The question is what separates them from the 61% that didn't make it.
Skewness sits between 0.27 and 0.44 across windows, which is just what stock returns look like in general. A stock can go up 200% but it can only go down 100%, so returns always lean a bit to the right. Nothing weird going on. Just means the averages will look better than what most people actually get, because the winners win bigger than the losers lose.
# Does this hold across time?
Checked whether this was driven by one unusual quarter or if it held across the full sample.
|Quarter|N|Median SPY Excess (5D)|Beat SPY % (5D)|Median SPY Excess (1M)|Beat SPY % (1M)|
|:-|:-|:-|:-|:-|:-|
|Q1 2025|1,670|\+0.59%|54.2%|\-0.98%|45.8%|
|Q2 2025|1,975|\-0.26%|48.9%|\-1.45%|45.1%|
|Q3 2025|1,589|\+1.00%|59.8%|\-0.31%|48.4%|
|Q4 2025|1,796|\+0.82%|56.9%|\+1.81%|56.7%|
|Q1 2026|1,636|\+0.58%|55.4%|\+0.85%|53.2%|
*5-day and 1-month SPY excess by filing quarter. Q2 2026 excluded, too early for the windows to be meaningful.*
At 5 days, four of five quarters cluster between 54-60%. Q2 2025 is the weak one. At 1 month it's more mixed, below 50% beat rate for the first three quarters of 2025, then flips positive in Q4 2025 and Q1 2026. The aggregate finding isn't being driven by a single weird quarter.
Side note. I ran this analysis in March on 8,307 transactions. The numbers above are from April with 9,000 transactions. Fixed-period results moved by less than 1.2 percentage points between the two snapshots. The finding replicates with more data.
# So what
If you bought every insider filing at filing-date close, you'd have a brief edge that fades within weeks. The 5-day effect is consistent across most quarters but it's gone by 1 month. By 6 months, 39% beat SPY. The losers outnumber the winners.
But the gems are in there. The mean-median gap in the trimmed data tells you a subset of these purchases produced real outperformance, even after I removed the extreme tails. The filing alone doesn't tell you which side of that subset you'll end up on. That's where context starts to matter. Price setup, who's buying, dollar amount, earnings timing, multiple insiders buying around the same time, and most importantly deep research and the company and its fundamentals.
I already tested narrowing down the full subset with specific parameters and can see promising patterns that product a more approachable subset for deep down research.
# What's next
If this gets a good reception I'll write more. There are a lot of angles I can look at:
* Price trend before the transaction. Does buying into a 6-month drawdown produce different results than buying into a 6-month rally?
* Insider role. CEO vs CFO vs director vs 10%+ owner. Does it matter who's buying?
* Cluster effects. Multiple insiders buying the same stock within a few weeks vs one insider buying alone.
* Valuation at time of purchase. P/E, EV/Revenue, P/B at the time of the transaction.
* Earnings timing. Is buying right after a earnings beat different from buying mid-quarter or before earnings?
* Revenue, earnings growth, profit margin. Are buys in companies with sound financials provide better aggregated results?
Each of these slices the same baseline I just showed you. The interesting question is whether any of them moves the 39% beat rate at 6 months to something materially higher. Some of them do, some of them don't. Let me know which angle you'd want to see first.
# Methodology
* Data source: I built my own database for tracking insider trades. I fetch transaction data from sec-api and use financial data APIs to source prices and additional context. The database covers every open-market insider purchase filed since January 2025.
* Only direct open-market purchases of common stock. No options exercises, no grants, no automatic purchase plans, no preferred shares, no derivatives. Personal capital, market price.
* All returns measured from filing-date close, the price a follower would actually get, not the insider's transaction price. Prices are split and dividend adjusted.
* Each purchase compared to SPY over the identical holding window.
* P1/P99 trimmed per window (top and bottom 1% removed). Medians shown alongside means throughout.
* Standard deviation measures total dispersion of SPY-excess returns per window. Skewness uses Pearson's second coefficient.
* 9,000 purchases, 2,008 tickers, Jan 2025 through Apr 2026. Returns as of April 27, 2026.
* Failed companies are represented in the data. Six transactions show last-close returns at -99% or worse. Tickers that lost \~100% are in the dataset, they don't get scrubbed. Only 5 transactions out of 9,000 (0.06%) have no last-close price data, mostly M&A-related corporate actions. Survivorship isn't a meaningful factor here.
* 16-month window, one market regime. Equal-weight, a $50K purchase and a $5M purchase count the same. No transaction costs. SPY ignores sector differences but it's the comparison most investors actually make.
* Observational study on one specific dataset. Not a universal claim about insider trading.