// guide

SEC Form 4 Transaction Codes: The Complete List

Updated 2026-07-26. By Theodor Nielsen, founder of Form4API.

// answer

A Form 4 transaction code is a one-letter symbol that identifies what kind of event each row of the filing represents. The most common are P (open-market purchase), S (open-market sale), A (grant or award), F (shares withheld for taxes), M (option exercise), and G (gift). Purchases (P) carry the strongest signal; most other codes are compensatory or mechanical and are usually filtered out of analysis.

What a transaction code is

Every transaction reported on a Form 4 carries a one-letter transaction code in the "Transaction Code" column (Table I for common stock, Table II for derivatives). The code is the single most important field on the row: it tells you whether the event was a discretionary open-market purchase, a routine compensation grant, a tax-withholding mechanic, or a gift. The same insider can appear several times in one quarter under wildly different signal-weight codes, so filtering on the code is the first thing almost every analytical workflow does.

The SEC organises the codes into five groups. The full reference lives in the official Form 4 instructions (PDF); the tables below cover every code with plain-English meaning and signal weight.

The complete transaction-code list

General transaction codes

Open-market and privately negotiated trades — the codes that carry the most analytical signal.

CodeMeaningSignalNotes
POpen-market or private purchaseStrong positiveThe insider bought shares with their own money. An insider generally buys for only one reason — they expect the stock to rise — which makes P the single highest-signal code on Form 4.
SOpen-market or private saleMixed / weakThe insider sold shares. Selling has many innocent motivations (diversification, taxes, tuition, scheduled plans), so a lone sale is far weaker than a purchase. Selling into weakness is the subset that carries bearish signal.
VVoluntary early reportContext-dependentA transaction the insider voluntarily reported earlier than the 2-day deadline required. The V flag itself is neutral — the accompanying transaction class carries the signal.

Rule 16b-3 codes (compensation-related)

Transactions between the insider and the company under equity-compensation rules. Mostly mechanical, not discretionary market decisions.

CodeMeaningSignalNotes
AGrant, award, or other acquisitionNeutralA compensation grant or award (RSUs, options, restricted stock). The insider did not choose to buy at this price, so it is not predictive of their view on the stock.
DDisposition to the issuerNeutralShares disposed back to the company (e.g. a share-repurchase tender or forfeiture). A mechanical transfer, not a discretionary sale into the market.
FTax / exercise-price payment by withholdingNeutralShares withheld or delivered to cover the tax bill (or exercise price) on a vesting or exercised grant. Purely compensatory plumbing — routinely mistaken for a bearish sale.
IDiscretionary transaction (16b-3(f))NeutralA discretionary acquisition or disposition inside an employee benefit plan (e.g. moving between fund options in a 401(k)-style plan). Not a market signal.
MExercise / conversion of derivativeNeutral to mildly positiveThe insider exercised options or converted a derivative into shares at a pre-set strike. They chose to convert, but did not make a fresh open-market purchase decision — do not count M as a buy.

Derivative security codes

Events in options, warrants, and convertibles that are not exempted under Rule 16b-3.

CodeMeaningSignalNotes
CConversion of derivativeNeutralA convertible security (preferred stock, convertible note) was converted into common stock.
EExpiration of short positionNeutralA short derivative position expired.
HExpiration of long position (value received)NeutralA long derivative position expired or was cancelled with value received.
OExercise of out-of-the-money derivativeNeutralExercise of a derivative whose strike was above the market price at exercise.
XExercise of in/at-the-money derivativeNeutralExercise of a derivative at or below the market price. Same mechanics as M for signal purposes.

Exempt & small-acquisition codes

Section 16(b)-exempt transfers and small acquisitions — non-market events.

CodeMeaningSignalNotes
GBona fide giftNeutralA non-economic transfer, typically to a trust, charity, or family member. Ownership changes but no money moves — routinely mistaken for a sale.
LSmall acquisition (Rule 16a-6)NeutralA small acquisition that qualifies for reduced reporting under Rule 16a-6.
WAcquisition or disposition by will / descentNeutralShares transferred by will or the laws of inheritance.
ZVoting-trust deposit or withdrawalNeutralA deposit into, or withdrawal from, a voting trust.

Other transaction codes

Catch-alls that usually require reading the filing footnote to interpret.

CodeMeaningSignalNotes
JOther (describe in footnote)Read footnoteA catch-all for transactions that do not fit another code. The insider must describe it in a footnote, which you have to read to interpret.
KEquity swap or similar instrumentRead footnoteA transaction in an equity swap or an instrument with similar economic characteristics.
UTender of shares in change of controlNeutralDisposition of shares tendered in a merger, acquisition, or other change-of-control transaction.

The acquired / disposed (A/D) flag

Alongside the transaction code, every row carries a separate one-letter Acquired (A) or Disposed (D) flag. This is easy to confuse with the transaction code — and confusingly, "A" and "D" are also transaction codes in their own right — but the A/D flag answers a different question: did the insider's holdings go up or down?

A purchase (P) is always Acquired; a sale (S) is always Disposed. But the flag matters most for the ambiguous codes: an option exercise (M) is Acquired, while the tax withholding (F) that pays for it is Disposed. When you compute net insider activity, use the A/D flag on the share count, not the transaction code alone.

Which codes actually carry signal

Most transaction codes are mechanical and carry no directional information. Only a handful are worth weighting:

  • P (purchase) — the strongest signal. An insider buys for one reason. Strongest of all as a cluster buy.
  • S (sale) — weak on its own, meaningful when it is selling into price weakness. See signal vs noise on selling.
  • Everything else (A, D, F, I, M, C, E, H, O, X, G, L, W, Z, J, K, U) — compensatory or mechanical. Filter out for signal work.

One more filter matters regardless of code: exclude Rule 10b5-1 plan trades, which are pre-scheduled and carry no information advantage even when the code is P or S.

A worked example

Suppose a CFO's Form 4 shows three rows on the same day:

  • M — exercised 10,000 options at a $12 strike (Acquired).
  • F — 3,800 shares withheld to cover the tax bill (Disposed).
  • S — sold 6,200 shares on the open market at $41 (Disposed).

A naive reader sees "insider dumped 10,000 shares." In reality this is a routine exercise-and-sell: the insider converted vested options, paid the tax in stock, and sold the rest. There is no fresh conviction here in either direction — no P, and the S is the mechanical back-half of an option exercise. This is exactly why filtering on the transaction code (and excluding M/F) is step one of any honest analysis.

Filtering by transaction code via API

Rather than downloading every filing and filtering client-side, Form4API exposes the transaction code as a query parameter so you fetch only the codes you care about — for example, open-market purchases for a single ticker:

curl "https://api.form4api.com/v1/transactions?ticker=AAPL&code=P&per_page=10" \
  -H "X-Api-Key: $FORM4API_KEY"

Every transaction is returned amendment-aware and 10b5-1 flagged, with ticker / CIK / CUSIP already joined. See the API docs for the full parameter list, or the complete Form 4 guide for how the codes fit into the rest of the filing.

Frequently asked questions

What do the transaction codes on SEC Form 4 mean?

Each row of a Form 4 carries a one-letter transaction code that identifies the nature of the event. The most common are P (open-market purchase), S (open-market sale), A (grant or award), F (shares withheld for taxes), M (option exercise or derivative conversion), and G (gift). The SEC groups the full set into general codes (P, S, V), Rule 16b-3 compensation codes (A, D, F, I, M), derivative codes (C, E, H, O, X), exempt and small-acquisition codes (G, L, W, Z), and other codes (J, K, U). The code is the single most important field for anyone analysing Form 4 data, because it separates a discretionary purchase from mechanical compensation plumbing.

What is a P transaction on Form 4?

Code P is an open-market or privately negotiated purchase — the insider bought shares with their own money at the prevailing price. It is considered the highest-signal transaction code because insiders sell for many reasons but generally buy for only one: they expect the stock to rise. When several insiders at the same company file P transactions in a short window (a cluster buy), the signal is stronger still.

What is the difference between code S and code F on Form 4?

Code S is a genuine open-market sale — the insider chose to sell shares into the market. Code F is not a market sale at all: it is shares automatically withheld (or delivered) to cover the tax bill or exercise price when a grant vests or an option is exercised. Treating F transactions as bearish sales is one of the most common mistakes in reading Form 4 data. To measure real selling pressure, filter to code S and exclude F.

Does an M transaction mean the insider bought stock?

No. Code M is the exercise of an option or conversion of a derivative into shares at a pre-set strike price — the insider converted securities they already held, rather than making a fresh open-market purchase. M is frequently followed by an S transaction on the same day (exercise and immediately sell). If you are looking for genuine buying conviction, filter on code P and exclude M.

Which Form 4 transaction codes matter for trading signals?

Open-market purchases (P) carry the most signal, followed by open-market sales (S) when they occur into price weakness. Compensation and mechanical codes — A (grants), F (tax withholding), M and X (exercises), D (disposition to issuer), G (gifts) — carry little or no directional signal and are usually filtered out. A practical filter is: open-market only (P and S), exclude Rule 10b5-1 plan trades, weight officers and directors over passive 10%+ holders, and prioritise clusters over single trades.

How do I filter Form 4 data by transaction code via API?

Form4API exposes the transaction code as a field on every parsed transaction, so you can request only the codes you care about — for example ?code=P for open-market purchases. This lets you skip the compensatory noise (A, F, M) at the query layer instead of downloading everything and filtering client-side. See the /docs reference for the full list of query parameters.

Get more from this data

Get API key

500 free requests / day. No credit card.

Get API key

View API docs

curl / JavaScript / Python examples for every endpoint.

View API docs

See pricing

Free, $49, $149, $499 — pick the tier that fits.

See pricing