Back to Editorial
2026-08-16//InsiderAlpha Research//Updated 2026-08-16

Form 4 Transaction Codes in Practice: What 1.63 Million Rows Reveal

An empirical guide to SEC Form 4 codes shows why grants, exercises and tax withholding dominate the raw data—and why code P represents only 3.00% of the release.

The most common mistake in insider-trading analysis happens before any model is built: treating every reported acquisition as a buy and every disposition as a sale.

SEC Form 4 does not describe one kind of transaction. It combines purchases, sales, compensation awards, option exercises, tax withholding, gifts and less common ownership changes. The transaction code—not the direction flag—explains what happened.

We measured every observed code in the July 29, 2026 InsiderAlpha Form 4 Research Database. The release contains 1,633,946 publishable rows across 1,771 issuers from January 2000 through July 2026.

The central result is unusually clear:

Code P appears in only 49,046 rows, or 3.00% of the release. Codes A, M and F—awards, exercises and exercise-price or tax-related dispositions—account for 969,088 rows, or 59.31%.

This is why a raw “acquired shares” filter is not an insider-buying screener.

The five codes that dominate Form 4 data

CodePractical meaningRowsShare of releaseDefault research treatment
SOpen-market or private sale499,81430.59%Sale, but inspect plan and holdings context
AGrant, award or other acquisition under Rule 16b-3389,20923.82%Compensation; not a purchase
MExercise or conversion of a derivative security320,71919.63%Exercise; inspect related rows
FSecurity delivered or withheld for exercise price or tax liability259,16015.86%Mechanical disposition; not an ordinary sale
POpen-market or private purchase49,0463.00%Purchase candidate

These definitions follow the official SEC Form 4 instructions. The wording matters: code P covers an open-market or private purchase, so the code alone does not prove that an order executed anonymously on an exchange.

The five largest codes account for 92.90% of all rows. Most practical classification errors can therefore be prevented by interpreting these five correctly.

The complete observed code distribution

The release contains 18 transaction codes. This is the observed distribution, not a claim that every code permitted by the SEC appears in the data.

CodeRowsShareWhat it generally represents
S499,81430.589%Open-market or private sale
A389,20923.820%Grant, award or other Rule 16b-3 acquisition
M320,71919.628%Exercise or conversion of a derivative security
F259,16015.861%Exercise-price or tax-liability payment with securities
P49,0463.002%Open-market or private purchase
G48,1372.946%Bona fide gift
J30,9951.897%Other transaction requiring explanation
D16,5531.013%Disposition to the issuer under Rule 16b-3
C15,1960.930%Conversion of a derivative security
X1,5720.096%Exercise of an in-the-money or at-the-money derivative
L1,4650.090%Small acquisition under Rule 16a-6
I1,4590.089%Discretionary employee-benefit-plan transaction
W4000.024%Acquisition or disposition by will or inheritance rules
Z1340.008%Deposit into or withdrawal from a voting trust
O300.002%Exercise of an out-of-the-money derivative
U260.002%Disposition connected with a tender offer, merger or acquisition
E200.001%Expiration of a short derivative position
H110.001%Expiration or cancellation of a long derivative position with value received

Codes such as J require the filing explanation. A production classifier should preserve the footnotes and source accession instead of forcing every uncommon code into bullish, bearish or neutral labels.

For a concise reference to each major code, use the Form 4 transaction-code guide.

“Acquired” does not mean “purchased”

Form 4 contains two concepts that are easy to confuse:

  • Transaction code A describes a grant, award or other acquisition under Rule 16b-3.
  • Acquired/disposed flag A says only that beneficial ownership increased on that transaction row.

In the canonical records with an explicit direction flag, 391,613 rows were marked acquired. Only 19,078 of those rows used transaction code P. By contrast, 361,166 used one of the non-purchase acquisition codes A, M, G or C.

That means a query such as this is semantically wrong:

SQL
SELECT *
FROM transactions
WHERE acquired_disposed = 'A';

It captures grants, exercises, gifts and conversions alongside purchases. A purchase screen must begin with "Type" = 'P', then apply security-table, amendment, price and provenance rules.

One filing can describe an economic sequence

A second failure mode is interpreting every row independently. Among 351,623 SEC-linked accessions in the release, 97,742—or 27.8%—contain more than one distinct transaction code.

The most frequent multi-code combinations were:

Codes in one filingFilingsTypical question to investigate
A + F23,026Was part of an award withheld for taxes?
M + S22,189Were exercised securities sold in the same filing?
F + M21,343Did withholding accompany an option exercise?
A + F + M6,052Does the filing combine compensation and exercise mechanics?
F + M + S2,601How much exposure remained after exercise, withholding and sale?

The combinations do not prove motive. They show why accession-level context matters. An M row followed by an S row is economically different from a standalone P row, even if both contain acquired shares somewhere in the filing.

Do later returns differ by code?

To describe—not trade—the observed paths, we collapsed rows to one ticker–transaction date–code company-day from January 2007 onward. We used the median return where several rows shared that identity and required a mature 180-day outcome.

CodeMature company-daysIssuersMedian 30DMedian 90DMedian 180DPositive at 180D
P14,4851,206+1.92%+4.83%+8.07%65.2%
S107,3381,403+0.82%+2.99%+5.58%60.7%
G21,0991,026+1.12%+3.08%+5.47%61.5%
A42,0831,160+1.00%+2.69%+5.31%60.6%
F39,6641,086+0.76%+2.47%+5.22%60.1%
M55,5041,021+0.79%+2.67%+4.93%60.0%

Code P had the strongest raw median and positive-outcome rate in this comparison. That does not prove that code P creates excess returns. The outcomes are absolute security returns, not benchmark-adjusted returns, and the code cohorts differ by issuer, period, role and transaction motivation.

The table supports a narrower conclusion: transaction semantics separate economically different populations before any predictive model is attempted.

A defensible classification policy

For most insider-activity products, the safest default policy is:

  1. Count P as a reported purchase candidate and S as a reported sale candidate.
  2. Keep A, M, F, G, D and C out of discretionary buy/sell totals by default.
  3. Inspect related rows inside the same accession before interpreting exercises or compensation events.
  4. Preserve transaction_table, security_title, ownership_nature, shares_owned_after and footnotes.
  5. Resolve amendments through canonical identity rather than counting originals and corrections twice.
  6. Use accepted_at—not the private transaction date—when simulating what a public user could have known.
  7. Label footnote-derived attributes as detected language, not verified intent.

The companion implementation guide, How to Build an Insider Trading Screener That Does Not Count Grants as Buys, turns those rules into a reproducible DuckDB query.

Methodology and limitations

Counts come from the versioned July 29, 2026 database release. The release combines SEC-linked canonical records with validated historical records. Historical rows without a canonical accession remain distinguishable through provenance fields.

The return comparison starts in 2007, groups by ticker, transaction date and code, and uses only events with available 180-day outcomes. It does not control for market regime, size, sector, liquidity, delisting, filing delay or repeated observations from the same issuer. It is descriptive evidence, not investment advice.

Transaction-code definitions are abbreviated for research use. The official instructions and filing footnotes remain authoritative.

Conclusion

Form 4 is not noisy because the SEC codes are unclear. It becomes noisy when an analysis discards them.

In this release, purchases were rare: code P represented 3.00% of rows, while awards, exercises and tax-related dispositions represented 59.31%. More than one quarter of SEC-linked filings contained multiple codes, often reflecting connected compensation, exercise and sale mechanics.

The practical lesson is simple: classify the transaction before measuring its size, timing or outcome. Researchers can inspect the 64-field schema in the free 10,000-row sample or query targeted records through the InsiderAlpha API.

Inspect before purchasing

Preview 10,000 real rows and all 64 fields

Validate the schema and research workflow before buying the 1,633,946-row release. No email or account is required for the sample.

  • Reproduce a published report
  • Run the included queries with DuckDB
  • CSV, Parquet and DuckDB in the full release
  • Three months of API access included
Download 10,000-row sample
Buy full dataset · $99Review full release details

One-time payment · instant download · regular price $199

Tags
Form 4Transaction CodesInsider TradingSEC FilingsData Quality