Every SEC filing, surfaced and scored: Form 4 insider trades with realized 30/90/180/365-day returns, 10-K language-change signals, 8-K disclosures, 13D activists, and 13F holdings. Search by ticker or insider.
No reviews yetBe the first to leave a review for InsiderDelta
Maker
📌
Hi Product Hunt 👋 I built InsiderDelta because SEC filings are full of signal but raw EDGAR is unusable. We surface and score every Form 4 insider trade with its realized 30/90/180/365-day return, flag year-over-year language changes in 10-Ks, and track 13D activists and 13F smart-money flows - all searchable by ticker or insider. There's also a clean REST API. Would love your feedback!
Report
How does the 30/90/180/365-day return calculation handle cases where the insider's Form 4 is filed days or even weeks after the actual transaction date?
Report
Maker
Good question: Returns are measured from the close on the transaction date (rolled forward to the next trading day if it lands on a weekend or holiday), not the filing date. So what you see is the insider's realized return, not what a follower could have captured, since a Form 4 can post up to two business days after the trade and sometimes later.
Report
How do you actually score the insider trade returns, are you tracking the price from the exact filing date or from the day after, and does that match what I'd see if I tried to replicate it myself?
Report
Maker
Basis is the close on the transaction date, not the filing date and not the day after. The 30/90/180/365d horizons run forward from that basis, rolling forward if the target lands on a non-trading day, and the sign flips for sales, so a sale followed by a rally counts against the insider.
On replicating it: your question sent me back through the numbers and it turned up a real bug, so thank you. Our price vendor silently restates a ticker's entire price history when the stock splits, but our ingest was incremental, so it only ever fetched new rows and never re-read the restated ones. That left a permanent discontinuity at every split. Cardlytics (CDLX) did a 1:10 reverse split, and one insider's sale was showing a -349% 90-day return while the same trade's 30-day return sat at a perfectly reasonable +8.5%, because that window stopped just short of the split. Forty tickers were wrong, going back to 2022. It's fixed now: we detect the discontinuity by checking the close on each side of every known split against the split ratio, refetch the full history, and recompute. Corrected numbers are live at https://insiderdelta.com/issuers...
The raw per-tranche Form 4 rows are always preserved, so you can recompute under whatever convention you prefer.
Report
Looked up a few insiders I follow and the realized return breakdown on Form 4 trades is genuinely useful, way more than just seeing the buy or sell. Curious how the language-change signals on 10-Ks hold up over a full cycle though.
Report
Maker
Thanks, and your skepticism is well placed. I went and measured it rather than guess. Across the scored 10-Ks we have since 2020, the year-over-year tone shift has almost no relationship with the next 30 days of returns. Loughran-McDonald's published effect is a 1 to 3 point spread between the top and bottom tone-shift deciles, and we do not reproduce it. Caveat on my own check: those are raw returns with no market or size adjustment, and our universe skews small-cap, so it is a first pass rather than a verdict.
So I don't sell the language signal as alpha. What it reliably does is detection, not prediction. It tells you a company rewrote 40% of its risk factors this year, or that its MD&A got measurably more negative, and it links you to the changed paragraphs so you can read them yourself. That is a diligence tool, and it is how I use it. The realized-return breakdown you found useful sits on much firmer ground, because it is measured rather than predicted.
Report
How does the realized return calculation handle cases where an insider sells shares they acquired through multiple lots at different prices? Trying to figure out if the 30/90/180/365 day numbers are weighted averages or based on a specific accounting method like FIFO.
Report
Maker
Neither, a single Form 4 often reports one day's trade across several price tranches as separate rows. We aggregate per (filing, owner, transaction date, transaction code): shares summed, price as a share-weighted average. FIFO or specific-identification would need lot-level cost basis, and Form 4 doesn't provide it, so any pipeline claiming FIFO here is inventing the lots.
The raw per-tranche rows are preserved in the database, so you can recompute under a different convention if you have the cost basis from somewhere else. Also: we use the closing price on the transaction date as the basis rather than the reported price per share, because filings often report VWAPs, midpoints, or literally "various" for block trades. Using close keeps the basis consistent across every insider so the returns are comparable.
Report
A solid take on insider data, the realized return windows on Form 4 are really useful for filtering out noise. One thing that would help: a backtested cluster score that groups repeat insiders buying within the same week, so you can spot conviction patterns faster than scrolling through individual trades.
Report
Maker
Good news: that exists, it's the cluster-buys screen. It follows Cohen, Malloy & Pomorski (2012): at least 3 distinct insiders buying the same issuer on the open market inside a rolling 30-day window (tightenable to a week, it's a parameter), above a dollar threshold, and only on "seasoned" issuers so we don't flag three founders registering pre-existing stakes at a fresh IPO.
How does the 30/90/180/365-day return calculation handle cases where the insider's Form 4 is filed days or even weeks after the actual transaction date?
Good question: Returns are measured from the close on the transaction date (rolled forward to the next trading day if it lands on a weekend or holiday), not the filing date. So what you see is the insider's realized return, not what a follower could have captured, since a Form 4 can post up to two business days after the trade and sometimes later.
How do you actually score the insider trade returns, are you tracking the price from the exact filing date or from the day after, and does that match what I'd see if I tried to replicate it myself?
Basis is the close on the transaction date, not the filing date and not the day after. The 30/90/180/365d horizons run forward from that basis, rolling forward if the target lands on a non-trading day, and the sign flips for sales, so a sale followed by a rally counts against the insider.
On replicating it: your question sent me back through the numbers and it turned up a real bug, so thank you. Our price vendor silently restates a ticker's entire price history when the stock splits, but our ingest was incremental, so it only ever fetched new rows and never re-read the restated ones. That left a permanent discontinuity at every split. Cardlytics (CDLX) did a 1:10 reverse split, and one insider's sale was showing a -349% 90-day return while the same trade's 30-day return sat at a perfectly reasonable +8.5%, because that window stopped just short of the split. Forty tickers were wrong, going back to 2022. It's fixed now: we detect the discontinuity by checking the close on each side of every known split against the split ratio, refetch the full history, and recompute. Corrected numbers are live at https://insiderdelta.com/issuers...
The raw per-tranche Form 4 rows are always preserved, so you can recompute under whatever convention you prefer.
Looked up a few insiders I follow and the realized return breakdown on Form 4 trades is genuinely useful, way more than just seeing the buy or sell. Curious how the language-change signals on 10-Ks hold up over a full cycle though.
Thanks, and your skepticism is well placed. I went and measured it rather than guess. Across the scored 10-Ks we have since 2020, the year-over-year tone shift has almost no relationship with the next 30 days of returns. Loughran-McDonald's published effect is a 1 to 3 point spread between the top and bottom tone-shift deciles, and we do not reproduce it. Caveat on my own check: those are raw returns with no market or size adjustment, and our universe skews small-cap, so it is a first pass rather than a verdict.
So I don't sell the language signal as alpha. What it reliably does is detection, not prediction. It tells you a company rewrote 40% of its risk factors this year, or that its MD&A got measurably more negative, and it links you to the changed paragraphs so you can read them yourself. That is a diligence tool, and it is how I use it. The realized-return breakdown you found useful sits on much firmer ground, because it is measured rather than predicted.
How does the realized return calculation handle cases where an insider sells shares they acquired through multiple lots at different prices? Trying to figure out if the 30/90/180/365 day numbers are weighted averages or based on a specific accounting method like FIFO.
Neither, a single Form 4 often reports one day's trade across several price tranches as separate rows. We aggregate per (filing, owner, transaction date, transaction code): shares summed, price as a share-weighted average. FIFO or specific-identification would need lot-level cost basis, and Form 4 doesn't provide it, so any pipeline claiming FIFO here is inventing the lots.
The raw per-tranche rows are preserved in the database, so you can recompute under a different convention if you have the cost basis from somewhere else. Also: we use the closing price on the transaction date as the basis rather than the reported price per share, because filings often report VWAPs, midpoints, or literally "various" for block trades. Using close keeps the basis consistent across every insider so the returns are comparable.
A solid take on insider data, the realized return windows on Form 4 are really useful for filtering out noise. One thing that would help: a backtested cluster score that groups repeat insiders buying within the same week, so you can spot conviction patterns faster than scrolling through individual trades.
Good news: that exists, it's the cluster-buys screen. It follows Cohen, Malloy & Pomorski (2012): at least 3 distinct insiders buying the same issuer on the open market inside a rolling 30-day window (tightenable to a week, it's a parameter), above a dollar threshold, and only on "seasoned" issuers so we don't flag three founders registering pre-existing stakes at a fresh IPO.