SEC Form 4 Insider Trades by Ticker avatar

SEC Form 4 Insider Trades by Ticker

Pricing

from $1.20 / 1,000 insider transactions

Go to Apify Store
SEC Form 4 Insider Trades by Ticker

SEC Form 4 Insider Trades by Ticker

Parsed insider transactions from SEC Form 4 filings for any US ticker: buys, sales, grants, option exercises, 10b5-1 flags, with reporter role and post-transaction holdings.

Pricing

from $1.20 / 1,000 insider transactions

Rating

0.0

(0)

Developer

Code Craft Colorado

Code Craft Colorado

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 hours ago

Last modified

Categories

Share

Get every insider transaction reported to the SEC for any US-listed company, parsed into one row per transaction. Give it a list of tickers and it returns buys, sales, grants, option exercises, tax withholdings and gifts straight from the Form 4 filings on EDGAR, with the insider's name and role, the price, the share count, the shares owned after the trade, whether it was made under a Rule 10b5-1 plan, the footnotes the filer attached, and a link back to the filing. Every field is a real field from the filing; nothing is estimated or inferred.

It is built to be left running. The data comes from the SEC's own EDGAR endpoints over plain HTTP: no API key, no login, no browser, no proxies. The client identifies itself as the SEC's fair-access policy requires, stays under the SEC's request-rate limit, and backs off when the SEC asks it to. A Form 4 accepted by EDGAR is normally available here within minutes of filing.

At a glance

Three real rows from one run for AAPL: a sale, an RSU settlement, and the shares withheld for tax on that settlement.

transactionDatetransactionCodesecurityTitlesharespricePerSharesharesOwnedFollowing
2026-09-22SCommon Stock2399340.0644391
2026-09-15MRestricted Stock Unit30104null180624
2026-09-15FCommon Stock16228331.3446790

What data does it extract?

Each row is one transaction from one Form 4 (or, if you ask for them, Form 4/A) filing. A filing with three transactions produces three rows that share the same filing-level fields. Holdings-only entries, where a position is reported without a transaction, are skipped.

Issuer and request

  • ticker: the ticker you asked for.
  • issuerCik, issuerName: the company as printed in the filing.

Who filed

  • reporterCik, reporterName: the primary reporting owner, named as EDGAR prints it (surname first, for example Newstead Jennifer).
  • isDirector, isOfficer, isTenPercentOwner, isOther: the relationship boxes on the form. null when the filer left a box out entirely.
  • officerTitle: the officer's title, for example SVP, GC and Government Affairs.
  • coReporters: names of any additional reporting owners on a joint filing. Empty otherwise.

The filing

  • filingDate: the date the form was filed (YYYY-MM-DD). Date filters apply to this field.
  • periodOfReport: the date of the earliest transaction in the filing.
  • accessionNumber: EDGAR's unique filing identifier.
  • form: 4 or 4/A.
  • sourceUrl: the filing's index page on EDGAR, where you can open the original document.

The transaction

  • isDerivative: false for Table I (common stock and other non-derivative securities), true for Table II (options, RSUs, warrants and other derivative securities).
  • securityTitle: what was traded, for example Common Stock or Restricted Stock Unit.
  • transactionDate, deemedExecutionDate: when the transaction happened, and the deemed execution date if one was reported.
  • transactionFormType: the form type recorded against the transaction itself.
  • transactionCode, transactionCodeMeaning: the SEC's one-letter code and its meaning in plain English (see the table below).
  • equitySwapInvolved: whether the filer marked the transaction as involving an equity swap.
  • acquiredDisposed: A for acquired, D for disposed.
  • shares, pricePerShare: the amount and the price per share. Price is null when the filer did not report one, which is common for grants and RSU settlements.
  • sharesOwnedFollowing: shares owned after the transaction, as reported.
  • ownership, indirectOwnershipNature: D for direct, I for indirect, and for indirect holdings the nature of the holding, for example a trust.

Derivative details (Table II rows only, null otherwise)

  • conversionOrExercisePrice: the strike or conversion price.
  • exerciseDate, expirationDate: when the derivative becomes exercisable and when it expires.
  • underlyingSecurityTitle, underlyingShares: the security the derivative converts into and how many shares of it.

Context

  • aff10b5One: true when the filer checked the box stating the transactions were made under a Rule 10b5-1 trading plan. It is a filing-level box, so every row from that filing carries the same value.
  • footnotes: the full text of every footnote attached to this transaction, in the order they are referenced. Filers often put the real detail here: weighted-average prices, vesting schedules, the plan adoption date.

Form 4 transaction codes

transactionCode is the SEC's one-letter code for what kind of transaction took place. The actor fills transactionCodeMeaning from this table, and the transactionCodes input accepts any of these letters as a filter.

CodeMeaning
POpen market or private purchase
SOpen market or private sale
AGrant, award or other acquisition
DDisposition to the issuer
FPayment of exercise price or tax liability by delivering or withholding securities
MExercise or conversion of derivative security
GGift
CConversion of derivative security
JOther acquisition or disposition
WAcquisition or disposition by will or the laws of descent and distribution
XExercise of in-the-money or at-the-money derivative security
IDiscretionary transaction
LSmall acquisition under Rule 16a-6
UDisposition pursuant to a tender of shares in a change of control transaction
ZDeposit into or withdrawal from voting trust
VTransaction voluntarily reported earlier than required
KTransaction in equity swap or similar instrument
HExpiration or cancellation of long derivative position with value received
EExpiration of short derivative position
OExercise of out-of-the-money derivative security

For questions about insider sentiment, P and S are the codes that matter: they are the insider's own open-market decisions. A, M and F usually describe compensation mechanics (a grant, its vesting or exercise, and the shares withheld to cover tax). A code not in this table gets a null meaning.

Two more one-letter fields appear on every row:

FieldValueMeaning
acquiredDisposedASecurities were acquired
acquiredDisposedDSecurities were disposed of
ownershipDHeld directly by the reporting owner
ownershipIHeld indirectly, for example through a trust; see indirectOwnershipNature

Input

FieldTypeDefaultWhat it doesWhen to use it
tickersarray of stringsrequiredTickers to fetch, for example ["AAPL", "MSFT"]. Each is resolved to an SEC CIK using the SEC's own ticker file.Always.
startDateYYYY-MM-DDlast 30 daysOnly include filings filed on or after this date. With no dates and no count, the actor returns the last 30 days.Backfills and "since January" questions.
endDateYYYY-MM-DDnoneOnly include filings filed on or before this date.Reproducible historical windows.
maxFilingsPerTickerintegernoneNewest filings first; stop after this many per ticker. Applies only when set, and combines with dates to cap a window. A filing usually holds one to a few transactions.A quick look at the latest few, or a bounded backfill.
includeAmendmentsbooleanfalseAlso process Form 4/A amendments. Amended rows carry form: "4/A".When you need corrections to earlier filings.
includeDerivativesbooleantrueInclude Table II rows: options, RSUs, warrants and other derivatives.Turn off to see only common-stock movements.
transactionCodesarray of codesallKeep only transactions with these codes.["P", "S"] for open-market buys and sells.

Both date filters compare against filingDate, not the transaction date, because that is what EDGAR indexes. Tickers are upper-cased before lookup, so aapl and AAPL are the same.

The latest activity for a watchlist

{
"tickers": ["AAPL", "MSFT", "NVDA"]
}

Open-market purchases only, this year

{
"tickers": ["NVDA"],
"transactionCodes": ["P"],
"startDate": "2026-01-01"
}

A full backfill including amendments, common stock only

{
"tickers": ["AAPL"],
"startDate": "2020-01-01",
"endDate": "2025-12-31",
"maxFilingsPerTicker": 1000,
"includeAmendments": true,
"includeDerivatives": false
}

The actor fetches roughly five filings per second, so 1,000 filings take three to four minutes. The default 30-day window is a handful of filings for most companies and finishes in seconds.

Output example

One row from the run above, with the derivative-only fields (all null on a common-stock row) removed for readability:

{
"ticker": "AAPL",
"issuerCik": "0000320193",
"issuerName": "Apple Inc.",
"reporterCik": "0001780525",
"reporterName": "Newstead Jennifer",
"coReporters": [],
"isDirector": false,
"isOfficer": true,
"isTenPercentOwner": false,
"isOther": false,
"officerTitle": "SVP, GC and Government Affairs",
"filingDate": "2026-09-24",
"periodOfReport": "2026-09-22",
"accessionNumber": "0001140361-26-037584",
"form": "4",
"isDerivative": false,
"securityTitle": "Common Stock",
"transactionDate": "2026-09-22",
"transactionFormType": "4",
"transactionCode": "S",
"transactionCodeMeaning": "Open market or private sale",
"equitySwapInvolved": false,
"acquiredDisposed": "D",
"shares": 2399.0,
"pricePerShare": 340.06,
"sharesOwnedFollowing": 44391.0,
"ownership": "D",
"footnotes": [
"This transaction was made pursuant to a Rule 10b5-1 trading plan adopted by the reporting person on May 5, 2026."
],
"aff10b5One": true,
"sourceUrl": "https://www.sec.gov/Archives/edgar/data/320193/000114036126037584/0001140361-26-037584-index.htm"
}

A Table II row has the same fields plus the derivative details. The RSU settlement from the same run, trimmed to the fields that differ:

{
"isDerivative": true,
"securityTitle": "Restricted Stock Unit",
"transactionCode": "M",
"acquiredDisposed": "D",
"shares": 30104.0,
"pricePerShare": null,
"sharesOwnedFollowing": 180624.0,
"underlyingSecurityTitle": "Common Stock",
"underlyingShares": 30104.0
}

Rows are written to the run's default dataset as they are produced, so you can start reading before the run finishes. Download them from Apify Console or the API as JSON, JSONL, CSV, Excel or XML. The dataset's Transactions view shows the fields most people want first: insider, title, date, code, shares, price, holdings after, and a link to the filing.

Errors and edge cases

When something cannot be processed, the actor records it and carries on. Failures are written to a record named ERRORS in the run's default key-value store, as a JSON array with one entry per failure. Each entry has the ticker and a plain-text error; failures on a specific filing also carry the accessionNumber and sourceUrl. The record exists only when something failed, and the run's status message reports the count of transactions, filings and errors. No row is charged for a failure.

  • Ticker not in the SEC registry. Tickers are resolved with the SEC's own company_tickers.json. Some ETFs and foreign listings are not in it. The ticker is recorded as Ticker not found in SEC registry and the run moves on.
  • A filing that cannot be fetched or parsed. If EDGAR returns an error for the filing's XML document, or the document is not a well-formed ownership document, that filing is skipped and recorded with its accession number and link. Other filings are unaffected.
  • Transient EDGAR errors. Server errors and connection failures are retried with increasing delays before a filing is given up on.
  • SEC throttling. The SEC caps automated traffic at 10 requests per second; the actor runs at about half that by default. If the SEC still answers with its throttle response, the actor pauses (30 seconds the first time, escalating to 10 minutes for repeated throttles in a row), halves its request rate for the rest of the run, retries, and only creeps back toward the normal rate after a stretch of successful requests. A throttled run finishes late rather than failing. If the SEC keeps refusing requests for a cumulative 20 minutes in one run, the run stops with a status message saying so; every row already delivered is kept.
  • Run charge limit. If you set a maximum charge on the run and it is reached, the actor stops pushing rows and finishes normally with the rows delivered so far.

How much does it cost?

The billable unit is one dataset row, and one row is one transaction from one Form 4 filing. Apply the filters (transactionCodes, includeDerivatives, the date range, maxFilingsPerTicker) and you pay only for the rows that pass them.

There are no other events beyond Apify's standard actor start. Resolving tickers, reading the EDGAR submissions index, fetching filings, pausing for the SEC, and writing the ERRORS record are not charged. Filings that fail to parse, tickers that cannot be resolved, and filings that contain only holdings produce no rows and cost nothing.

Current per-row pricing is on the Pricing tab of this page.

Use cases

  • Watch a portfolio for insider buying and selling and push new rows to a dashboard or a chat channel on a schedule.
  • Alert on open-market purchases (transactionCodes: ["P"]) by officers and directors, the signal most insider-activity strategies are built on.
  • Backfill a database of insider activity with startDate and maxFilingsPerTicker: 1000, then run daily with the defaults to keep it current.
  • Separate planned selling from discretionary selling with aff10b5One, and read the plan adoption date from footnotes.
  • Track how an executive's stake changes over time with sharesOwnedFollowing.
  • Give an AI agent a reliable answer to "what have insiders at this company been doing lately?" with a filing link for every claim.

Run it on a schedule, from the API, or from an agent

The actor runs the same way from a saved task on a Console schedule, from the Apify API or the JavaScript and Python clients, and as a tool through Apify's MCP server, so an AI agent can call it directly. The input JSON is identical in every case, and the results are in the run's dataset whichever way it was started.

All four run against official public APIs with no proxies or credentials.

FAQ

Is this legal? Yes. Form 4 filings are public records that the SEC publishes for anyone to read. This actor uses the SEC's official EDGAR endpoints, identifies itself with the company name and a contact address as the SEC's fair-access policy requires, and stays under the SEC's published request-rate limit.

How current is the data? EDGAR's submissions feed updates in near real time. A Form 4 accepted this afternoon is usually returned by the next run within minutes. filingDate typically trails transactionDate by a day or two, which is the filing deadline insiders work to.

Why are some fields null? Filers sometimes replace a value with a footnote, for example when a price is a weighted average or an exercise date depends on vesting, and grants and RSU settlements often have no price at all. The footnote text is in footnotes, so nothing is lost. Derivative-only fields are always null on common-stock rows.

Why is isDirector sometimes false and sometimes null? false means the filer marked "no". null means the filer left that element out of the filing altogether, which EDGAR permits. Treat both as "not a director" unless the distinction matters to you.

Does aff10b5One apply to each transaction individually? No. It is a single checkbox on the filing, so every row from that filing carries the same value, including grant, exercise and tax-withholding rows that are not themselves trades. Read the footnotes on a row to see which transactions the filer attributes to the plan.

A ticker returned nothing. Check the run's ERRORS record in the key-value store. Tickers not in the SEC's registry are reported there. If the ticker resolved but no rows came back, the company may have no Form 4 filings in your date range, or every filing in range was filtered out by transactionCodes or includeDerivatives.

How do I avoid double-counting amended filings? Leave includeAmendments off unless you need corrections. When it is on, amended rows carry form: "4/A" and their own accessionNumber, so you can prefer the amendment and drop the original in your own processing.

Can I look up by CIK or company name instead of ticker? Not currently. The input is a list of tickers, resolved through the SEC's ticker file. Companies without a ticker in that file cannot be fetched.

What happens if the SEC rate-limits the run? The actor pauses, slows down and retries, so the run finishes late rather than failing; after 20 minutes of cumulative cooldown it stops with a status message and keeps every row already delivered. See "Errors and edge cases".

Something is missing or wrong? Open an issue on the actor's Issues tab. Include the accessionNumber or sourceUrl of the filing if the problem is with a specific row.