Skip to content
RockGroup
DocsInsider Radar
Insider RadarSEC Form 46,639 issuers

Insider Radar
Documentation

What company insiders do with their own money. Insider Radar reads every SEC Form 4 filing transaction by transaction and does the one thing an insider screen has to do to be worth anything: separate real conviction from mechanical noise. A compensation grant is not a purchase and a tax-withholding event is not a sale — quarantining them is what leaves the handful of genuine conviction events visible.

Filings~174.9KScored signals~21.2KUpdatedSep 2026

01. What is Insider Radar?

What is Insider Radar?

Every officer, director and 10% owner of a US-listed company must report their own trades in that company’s stock on SEC Form 4, within two business days. It is the most timely disclosure in US markets — and the most misread, because the form makes no distinction in prominence between a chief executive spending two million dollars of their own money and the same executive having a few hundred shares clipped to cover the tax on a vesting grant.

Insider Radar is a daily pipeline and dashboard over those filings with a single job: tell the two apart. Most “insider buying” screens are worthless because they count a compensation grant (code A) as a purchase and a tax-withholding event (code F) as a sale. Insider Radar quarantines the routine flow and labels it, so what is left is small, legible and actually a decision somebody made.

Who spent their own money?

Only open-market purchases at a market price survive the gate. Grants, exercises, gifts, conversions and tax withholding are set aside and labelled, not deleted and not counted.

Is anybody else at the company buying too?

Cluster detection: distinct insiders buying the same issuer inside a rolling 30-day window. Several people independently reaching the same conclusion is the strongest documented insider signal.

How much conviction does this actually represent?

A 0–100 conviction score over six factors — cluster breadth, size against the insider's own prior stake, role seniority, dollar size against market cap, that person's track record and the price context. The full breakdown is on the row.

Has this person ever been right before?

Per-insider hit rate and average forward return on their own past gated buys, measured on adjusted closes at 30, 90 and 180 days, minimum-sample gated.

Insider Radar vs. the other two. Fund Tracker reads Form 13F and ETF X-Ray reads Form N-PORT — both are quarterly positions, what a manager or a fund held on one date. Form 4 is a transaction: a named person, a date, a price and a reason code, filed within two business days. It is the only one of the three that tells you what somebody did rather than what they were left holding.


02. Data Source & Universe

Where does the data come from?

All transaction data is SEC Form 4, retrieved through sec-api.io’s Insider Trading API. The response is fully structured JSON, so there is no XML parsing step and no bespoke schema guessing — the failure mode of hand-rolled Form 4 parsers is a silently mis-mapped footnote, and this avoids the category entirely. A separate pipeline transforms and scores the filings and publishes into a database that only this site’s server reads. Your browser never talks to the warehouse directly.

Filing form
SEC Form 4 (and 4/A amendments)
Filed
Within 2 business days of the transaction
Universe
All US issuers filing Form 4 — no market-cap floor
Volume
~600–2,000 filings per business day
History
Rolling ~12 months
Filings on file
174,852
Transaction legs
406,606
Issuers · insiders
6,639 · 59,708
Scored signals
21,212
Active clusters
1,759
Why there is no market-cap floor

Every comparable screen filters out small companies, usually for liquidity reasons. Insider Radar deliberately does not. Microcap insider buying is historically the strongest insider signal — a chief financial officer at a $60m company knows more, relative to what the market knows, than one at a $600bn company. A cap floor removes exactly the observations the product exists to surface. The market-cap band is available as a filter instead, so the reader chooses rather than the pipeline.

The grain: one row per transaction leg

The unit of storage is the transaction leg, not the filing. One Form 4 routinely reports several transactions of different codes on the same day — an option exercise, the sale that funded it, and the shares withheld for tax. Collapsing that to one row per filing destroys the signal: the filing has no single code, no single price and no single direction, so any summary of it is a fiction. 174,852 filings carry 406,606 legs, and it is the legs that are classified, scored and counted.

The daily run, and why it is late in the evening

The pipeline runs once a day at 22:30 ET, Monday to Friday. That looks unnecessarily late until you watch EDGAR: it accepts Form 4 filings through the evening, and an early-evening run consistently misses the tail of the day’s filings — which then arrive a day late and out of order. One run after the window closes is simpler and more complete than two runs that overlap.

TransactionsSEC Form 4 via the sec-api.io Insider Trading API — structured JSON, one record per reported transaction leg.
Sector / industry / exchangeThe sec-api Mapping API. These are Morningstar-style labels (“Financial Services”, “Basic Materials”), not GICS, and the sector filter is populated from the labels that genuinely occur in the data.
Shares outstandingThe sec-api Float API, used as the market-cap denominator. Missing float is recorded as unknown — see the limitations below for why that matters.
PricesDaily adjusted closes from the Yahoo Finance chart endpoint, used for the price-context factor and for every forward return.

03. How to Use

Step-by-step guide

1
Start on the signal feed

It is the default tab and it is the product. Every row is already a gated open-market purchase, ranked by conviction score in the database — so the top of the list is the answer, not the most recent filing.

2
Set the window and the thresholds

The filter card above the tabs holds the lookback in days, a minimum score, a minimum score coverage, a sector and a clusters-only switch. Ninety days is the default because a 90-day forward horizon needs a comparable lookback to be readable.

3
Set coverage to 100% before you rank

Score coverage is the share of the scoring weight that was actually measurable for that row. Partially-covered rows are rescaled, and rescaling inflates them — see the conviction score below. For a like-for-like ranking, filter to full coverage.

4
Expand a row to audit the score

Clicking a row expands it in place to the full factor attribution: every factor, its points, its maximum and whether its inputs were available. A score you cannot take apart is a score you should not use.

5
Click the issuer or the insider

Either one opens the drill-through drawer, which shows the whole reported history for that issuer or that person — including the quarantined flow. This is the context the ranked feed cannot show.

6
Check the noise filter at least once

It is the quarantine made explicit: every reported leg in the window sorted into what it signifies, with a plain-English meaning per bucket and a transaction-code explainer. It is the fastest way to understand why the feed is so much smaller than the filing count.

7
Use the header search when you already have a name

The search box in the page header queries the whole issuer master and opens the same drawer. You do not need the company to be in the current window or above the current score threshold.

A tab you have not opened costs nothing. Loading the page issues one universe-stats call — usually zero, because the server seeds it into the first paint — plus one call for whichever tab is open. The sector-flow rows are fetched once and shared, because the sector filter is built from the labels they contain, so opening Sector flows issues no request at all.


04. Transaction Codes & Noise

Transaction codes, and what counts as noise

Every leg on a Form 4 carries a transaction code in Table I or Table II. The codes are the whole taxonomy, and two of them are the reason naive screens are wrong in both directions at once.

POpen-market purchase. The signal, and effectively the only one. The insider spent their own money at a price the market set. Everything else on this list is set aside.
SOpen-market sale. Weak and ambiguous. Insiders sell to diversify, to pay a tax bill or to buy a house at least as often as because they hold a view. Retained and reported, never treated as a bearish signal.
AGrant, award or other acquisition from the issuer. Noise. This is compensation arriving — the insider chose nothing and paid nothing. Naive screens miscount it as a purchase, which is how a routine annual grant becomes a headline “insider buy”.
FShares withheld by the issuer to pay tax on vesting. Pure noise, and entirely mechanical. The issuer keeps back enough shares to cover the withholding on a vest. Naive screens miscount it as a sale, so every vesting date manufactures a wave of phantom “insider selling”.
MExercise or conversion of a derivative security. Exercising an option. Not a market signal on its own — the strike and the expiry drove the timing, not a view on the price.
XExercise of an in-the-money derivative. Same reasoning as M. Being in the money is a fact about the past, not a decision about the future.
CConversion of a derivative security. One security becoming another. Mechanical.
GBona fide gift. Non-economic, usually estate planning. No price, no decision about value.
DDisposition to the issuer. Shares going back to the company — buyback tender, forfeiture, cancellation. Usually mechanical.
J / K / U / W / ZOther and miscellaneous. Other acquisitions and dispositions, equity swaps, tenders, transfers by will, and voting-trust movements. Retained, bucketed as other, and never scored — the meaning lives in the filing footnote.
Three rules that cut across the codes

The code alone is not enough. Three cross-cutting rules override it, and each exists because the literal reading of the code would have been wrong.

M + S on the same day are paired, not counted twice

An exercise followed by a sale of the same shares, by the same owner at the same issuer on the same date, is collapsed into one exercise_and_sell event. Read literally it is a sale, and it would print as insider selling. It is not a view on the price — it is somebody monetising compensation, which is what stock compensation is for. Paired, labelled, quarantined.

The 10b5-1 flag beats every code

If the filing carries the aff10b5One flag, the leg is bucketed as planned_10b5_1 regardless of its code — including code P. The trade executed on a schedule set out in a plan adopted months earlier, so it carries no information about the insider's view today. This override wins over everything else on this page, because a scheduled purchase is not a decision to purchase now.

Even a code P can be routine

A routineness detector flags a leg when, for the same insider at the same issuer over a trailing twelve months, there are four or more prior purchases AND a regular cadence AND a uniform size. That shape is a standing arrangement — a DRIP or an ESPP-style monthly deduction — not a judgement about the price. It is reported as routine and excluded from the feed, and the noise panel prints how many legs it caught.

Quarantined is not deleted. Every classified leg stays in the warehouse and stays visible in the noise panel and the drill-through drawer. The point is not to hide the routine flow — it is roughly everything, and a reader who does not see it will not believe the feed. The point is that it is labelled, so it is never mistaken for a decision.


05. The Conviction Score

The conviction score

The score is a 0–100 ranking of open-market purchases. It is not a price target and it is not a probability — it is an ordering, so that a reader with two hundred buys in a window reads the twenty that carry the most information first.

The gate comes first

A leg is scoreable only if all four hold: the code is P, the trade was on the open market, it is not a 10b5-1 plan execution, and it is not routine.

Fail the gate and the score is NULL, not 0, and the leg does not appear in the feed at all. This is the distinction the whole product turns on: a grant is not a low-conviction event that belongs at the bottom of the ranking, it is not a conviction event. Sorting it to the bottom with a zero would imply it is on the same scale as a real buy, and would let it drift up the list the moment somebody sorted by a different column.

Six factors, 100 points
Cluster breadth · 25How many distinct insiders bought the same issuer inside a rolling 30-day window. The heaviest weight on the page, because independent agreement between several people who all know the company is the strongest documented insider signal — far stronger than any single large purchase.
Size vs. prior stake · 20Shares bought divided by the holding the insider already had. Raising your own position by 40% is a different act from adding a token round lot to a stake you were granted, and the dollar figure alone cannot tell the two apart.
Role seniority · 15CFO ≥ CEO > other officer > director > 10% owner. The CFO ranks at the top deliberately: they see the numbers before anybody else in the building, and they see them in detail.
Dollar size vs. market cap · 15The purchase value as a share of market capitalisation, log-scaled. $1m at a $100m issuer is a statement; $1m at a $100bn issuer is a rounding error. Log scaling stops a handful of megacap buys from compressing everything else into the bottom of the range.
Insider track record · 15The average forward return on that person’s own past gated buys. Some insiders buy well and repeatedly; some buy every dip and are wrong every time. Nothing else on this list is evidence about the individual.
Price context · 10The discount to the trailing 52-week high. Buying into a drawdown is a different act from buying strength, and the weight is deliberately the smallest — it is context, not conviction.
Three properties that make it honest
The breakdown is persisted and rendered, not just computed

Every factor's points, maximum and availability are stored with the row and shown in the UI, expandable per signal. A score a portfolio manager cannot audit is a score a portfolio manager will not trust, and rightly — an opaque 0–100 is indistinguishable from a number somebody made up.

A missing input is excluded from the denominator, never scored zero

Where a factor's inputs do not exist, the factor is marked unavailable and dropped from the denominator entirely. The score is computed over the weight that WAS available and rescaled to 0–100, and score_coverage reports what fraction of the weight that was. Scoring it zero would punish an issuer for a gap in our data rather than for anything the insider did.

Below 50 points of available weight there is no score at all

If less than half the weight could be measured, the score is NULL rather than a low number. Assembling a 0–100 ranking out of 30 points of evidence is not a cautious estimate; it is inventing a number and then dressing it in two significant figures.

Rescaling has a cost, and here it is. Dividing by a smaller denominator inflates a partially-covered row. It is worse than a generic rounding concern, because the two price-dependent factors — price context and track record, 25 of the 100 points between them — are exactly the ones a weak buy scores lowest on. So a signal at an issuer with no price history can outrank a fully-measured buy that genuinely scored badly, purely because the evidence against it was never gathered.

The dashboard therefore exposes score coverage as a column and as a filter. Set it to 100% whenever you are comparing scores against each other; leave it open only when you are browsing.

One more explicit fallback: where an insider has too few matured prior buys to measure, the track-record factor applies a documented neutral prior— half of the factor’s weight — and labels itself as having done so. That is preferable to both alternatives: a zero would treat an unknown history as a bad one, and a fabricated figure would be worse than either.


06. The Five Panels

The five panels

Signal feed

The default tab and the product. One row per gated, scored open-market purchase, ordered by conviction score in SQL. Each row expands in place to the full factor attribution; clicking the issuer or the insider opens the drill-through drawer. Column sorting reorders the returned set, and the footer says so — the server chose those rows BY SCORE, so re-sorting by dollar value gives you the largest of the highest-scoring buys, not the largest buys.

Cluster buys

Issuers where two or more distinct insiders bought inside a 30-day window, with the role mix and the aggregate dollars. This is the panel to open first if you only have a minute: breadth is the heaviest factor in the score for a reason.

Noise filter

The quarantine, made explicit. Every reported leg in the window grouped by bucket, with a plain-English “what this signifies” line per bucket that comes from the warehouse rather than the UI, plus the transaction-code explainer. Bars are scaled to the largest bucket in the response and the footer states it.

Insider track record

Per-person hit rate and average forward return on their own past gated buys, sortable, and gated on a minimum sample the reader sets. Somebody with two prior buys has no track record, and the panel declines to imply otherwise.

Sector flows

Net insider dollars by sector and month as a hand-rolled heatmap — no charting library, because rows are sectors and columns are months. Filterable by market-cap band. Cells absent from the data are hatched rather than tinted palest, because “nobody bought here” and “we have no data here” are different facts.

The drill-through drawer shows the quarantine too, on purpose. Click any issuer or insider and the drawer reports the whole reported flow, routine legs included. An executive whose only prior activity is an annual grant and the tax withheld on it is a different proposition from one who has bought every drawdown for three years — and the ranked feed, which by construction contains only gated buys, shows you neither history. The score tells you about one event; the drawer tells you about the person.


07. Forward Returns & Prices

Forward returns and prices

Every scoreable leg is measured forward at 30, 90 and 180 days, on adjusted closes. Those returns feed the track-record factor and the track-record panel, so two decisions about them matter more than they look.

Why adjclose, and why the reason is dividends

The pipeline reads adjcloserather than the raw close. The usual justification for that is splits — and here it would be wrong. This endpoint’s unadjusted close is already fully back-adjusted for splits, so reading the wrong field produces no split cliff at all. There is no obvious break in the series to catch the mistake.

What it produces instead is a silent few-percent-a-year drag concentrated entirely in dividend payers — the missing total return. That is much worse than a visible break, because it is systematic: it would rank insiders at value names, utilities and banks below insiders at non-payers, purely as an artefact of the field name. The measured gap on this data is 12.28% for XOM over three years.

A missing price is never a zero return

Every scoreable leg carries one row per horizon, and that row either has a return or a status explaining its absence. It never has both, and it never has neither.

okThe horizon has elapsed and both prices exist. This is the only status the track record consumes.
not_maturedThe horizon has not elapsed yet. A buy from last week has no 180-day return, and it will not have one for six months.
no_end_priceMatured but unpriceable at the end date — the issuer was acquired, halted or delisted in between.
no_tickerThe issuer does not trade. Non-traded REITs, interval funds and BDCs file Form 4 and legitimately have no price.
no_price_seriesThe ticker exists but no usable series could be retrieved for it.

None of those is 0%. Recording a delisting as a flat outcome is the single most damaging shortcut available here: it makes acquisitions and bankruptcies both disappear into the middle of the distribution, and it biases the whole backtest exactly where the information is most valuable — because a takeover at a premium and a wipeout are the two outcomes an insider is most likely to have seen coming.

Two CHECK constraints make the mistake unrepresentable rather than merely discouraged: a non-ok status carrying a number, and an ok status carrying none, are both rejected — in the local store and in Postgres.

Price coverage is 2,482 of 2,538 tickers (97.8%). Every ticker that could not be priced is recorded with a reason and none is dropped, so the gap is countable rather than invisible.


08. Limitations & Known Gaps

Limitations and known gaps

These are documented here as prominently as the features, because most of them look like bugs to a reader who has not been told, and a caveat you can see is worth more than a figure you cannot check.

Twelve months of history is a small sample, and the weights are not tuned. At a 90-day horizon, twelve months yields only a few non-overlapping observations per person. The six scoring weights are a documented first cut and have deliberately not been fitted, because fitting six weights to twelve months of history at a 90-day horizon is fitting noise and then reporting the fit as evidence. Read the score as an ordering to triage by, not as a calibrated forecast.

One decision can arrive as ten filings

Section 16 requires every person with a pecuniary interest to file separately, so a single fund purchase can arrive as ten Form 4s — a partnership plus nine partners, identical date, identical share count, identical price. Counting those as ten insiders would manufacture a cluster out of one decision, and cluster breadth is the heaviest factor in the score.

Cluster breadth therefore counts decision units, collapsing legs that match on date, shares and price. 458 such groups exist, covering 1,155 of 21,212gated legs. The consequence is worth stating plainly: somebody cross-checking a cluster against EDGAR will count more filings than the dashboard’s insider count shows. That is the collapse working, not a discrepancy.

Five more things that look like bugs and are not
Market cap uses the latest float, not the float on the trade date

The dollar-size factor divides by the LATEST reported shares outstanding. For a company that has issued heavily since the purchase, the denominator is too large and the factor understates the buy. Separately, 372 of 2,693 scoreable issuers have no float data at all; that is recorded as unknown and never as zero — a zero denominator would hand those issuers a maximum score on the factor, which is the opposite of the truth.

143 issuers report a ticker of “NONE” or “N/A”

The literal strings, in the tradingSymbol field. Most are genuinely unpriceable — interval funds, non-traded REITs, BDCs — and are recorded as having no ticker. But 29 were real listed companies whose filer simply left the field blank or filled it with a placeholder, and those were recovered through the Mapping API rather than written off.

Two filings carry impossible dates, and they are in the public record

One live filing reports a transaction date in 2036 — that is present in the original SEC submission, not introduced here. Another reports a transaction from 2002 filed in 2026, twenty-four years late. Both are detected and given their own status rather than silently trusted or silently dropped. Filers make errors, and the errors reach the public record.

A number changed since your last visit

Form 4/A amendments restate history. A superseded filing's legs are MARKED as superseded, never deleted, so the correction stays auditable and the original stays inspectable. A figure moving between visits is an amendment, not a sync bug.

Some rows show a size of “—” but still carry a score

A dollar value is not computable for every instrument. For debt and convertible securities, Form 4 reports the PRINCIPAL in the shares field and sometimes the same principal again in the price field, so a naive shares × price is meaningless — it would print a number several orders of magnitude wrong and look plausible. Those values are recorded as unavailable and rendered as a dash, rather than published as a figure nobody could defend.


09. Disclaimer

Important limitations

The filings are facts. The classification, the cluster detection and the score are a model. A Form 4 is a disclosure: a person, a date, a code, a price. Everything Insider Radar adds on top — which bucket a leg belongs in, whether two purchases are one decision, whether a code P is routine, and what the conviction score is — is our interpretation of that disclosure, not part of it.

Insider purchases are not predictions. Insiders are better informed about their own company than the market is. They are not better informed about the market, the sector or the macro environment, and they are frequently early. A high conviction score means a well-placed person made a real decision with their own money — nothing more.

Not investment advice

Insider Radar is provided for informational and research purposes only. Nothing in it constitutes investment advice, a recommendation to buy, sell or hold any security, a solicitation or an offer.

The score is an algorithmic output

The conviction score, the cluster detection, the routineness verdict and the track-record figures are formulas applied to filed data. The full factor breakdown is shown beside every score. They are not judgements about any company or any person.

Filing accuracy passes through

Form 4 data is used as filed. An error in the original filing — a wrong date, a placeholder ticker, a principal amount in the price field — is reproduced faithfully, flagged where it is detectable, and corrected only when the filer amends.

Verify against the original filing

Every row links to its Form 4 on EDGAR. Before acting on any figure here, open the filing and read it, including the footnotes — the footnotes routinely carry the reason a transaction happened, and no structured field captures that.

No representations as to accuracy

Rock Group makes no representations or warranties as to the accuracy, completeness or timeliness of any data on this page or in the product.

Original filings are public. Look any of them up on SEC EDGAR by company name, insider name or CIK and compare.

Ready to explore?

Rock Group · Insider Radar Documentation · Last updated September 2026
Questions? Contact us