SEC Insider Trading Monitor avatar

SEC Insider Trading Monitor

Pricing

Pay per usage

Go to Apify Store
SEC Insider Trading Monitor

SEC Insider Trading Monitor

Scrapes and parses SEC Form 4 filings for corporate insider trading activities.

Pricing

Pay per usage

Rating

0.0

(0)

Developer

CQ

CQ

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

6 days ago

Last modified

Share

Fetches and parses lawful SEC Form 3/4/5 insider-ownership filings for a given company straight from the official EDGAR system, and decodes the Section 16 transaction codes into plain English.

"Insider trading" here means the routine, legally-mandated disclosure that corporate directors, officers, and 10%+ owners must file under Section 16 of the Securities Exchange Act. A Form 4 filing is required disclosure and does not imply any wrongdoing. Illegal insider trading (trading on material non-public information) is a separate matter and is not what these filings represent.

Key features

  • ๐Ÿ”‘ No API key required โ€” reads the official SEC EDGAR system, which is free and public.
  • ๐Ÿ—ฃ๏ธ Plain-English transaction codes โ€” every Section 16 code (P, S, A, M, F, G, โ€ฆ) is decoded into a human-readable meaning.
  • ๐Ÿงพ One record per transaction โ€” both non-derivative and derivative lines are parsed, with shares, price, value, and dates.
  • ๐Ÿ“„ Form 3, 4, and 5 โ€” choose which Section 16 forms to pull.
  • ๐Ÿค SEC fair-access compliant โ€” sends the SEC-required User-Agent and throttles to ~8 req/s (under SEC's ~10 req/s ceiling) with timeouts and backoff.
  • โœ… Degrades gracefully โ€” if SEC throttles or blocks the run (HTTP 403/429, common from datacenter IPs) or a company has no matching filings, the run logs a clear line and finishes successfully with an empty/partial dataset instead of failing.
  • ๐Ÿ“ฆ Export & integration ready โ€” flat dataset records drop straight into sheets, dashboards, webhooks, or downstream actors.

Use cases

  • Watchlist monitoring โ€” schedule a daily run per ticker to pick up new Form 4 filings shortly after they post to EDGAR.
  • Quant / research signals โ€” track insider buying vs. selling clusters as an input to a trading or research model.
  • Compliance & surveillance reference โ€” pull a clean, decoded record of a company's routine Section 16 disclosures.
  • Journalism & due diligence โ€” see exactly which officers/directors transacted, when, how many shares, and at what price.
  • Alerting โ€” connect the dataset to Slack/email/webhook so a new insider filing pings your channel automatically.

What it does

  1. Resolves your ticker to a CIK via https://www.sec.gov/files/company_tickers.json.
  2. Reads the company's recent filing history from https://data.sec.gov/submissions/CIK##########.json.
  3. Downloads each matching Form 4 (or 3/5) ownership XML from the EDGAR archive.
  4. Parses every non-derivative and derivative transaction and pushes one record per transaction to the dataset, including the decoded transaction code.

No API key is required. EDGAR is free.

Input

FieldTypeDefaultNotes
symbolstringโ€”Required. Ticker, e.g. AAPL.
formTypesarray["4"]Section 16 forms to fetch (3, 4, 5).
limitinteger10Max filings to fetch and parse (1โ€“200).
userAgentstringgenericSEC requires a descriptive User-Agent or returns HTTP 403. Use Your Company your-email@example.com.

Usage example

Input:

{
"symbol": "AAPL",
"formTypes": ["4"],
"limit": 10,
"userAgent": "Acme Research jane@acme.com"
}

Returns one dataset item per parsed transaction, e.g.:

{
"ticker": "AAPL",
"issuer": "Apple Inc.",
"insider": "Borders Ben",
"relationship": "Officer",
"officerTitle": "Principal Accounting Officer",
"formType": "4",
"securityTitle": "Common Stock",
"isDerivative": false,
"transactionCode": "F",
"transactionCodeMeaning": "Payment of exercise price or tax liability by delivering/withholding securities",
"acquiredDisposed": "Disposed",
"shares": 124,
"pricePerShare": 296.42,
"transactionValue": 36756.08,
"transactionDate": "2026-06-15",
"filingDate": "2026-06-17",
"accessionNumber": "0001140361-26-025620",
"filingUrl": "https://www.sec.gov/Archives/edgar/data/320193/000114036126025620/form4.xml",
"source": "SEC EDGAR",
"disclaimer": "Lawful Section 16 insider transaction report. Filing is mandatory disclosure and does not imply any wrongdoing."
}

Output

One dataset item per insider transaction. Key fields: insider, relationship, transactionCode + transactionCodeMeaning, acquiredDisposed, shares, pricePerShare, transactionValue, transactionDate, filingUrl. See .actor/dataset_schema.json.

pricePerShare and transactionValue are null when the filing expresses the price only via a footnote (common for grants/awards and tax-withholding events), and shares is null when not numerically reported. If a company has no matching filings in its recent EDGAR history, a single informational record with a note field is pushed instead.

You can export the dataset as JSON, CSV, Excel, or HTML from the run's Storage tab, fetch it via the Apify API, or forward it with an integration (Make, Zapier, Slack, webhooks, Google Sheets).

Transaction codes (Form 4 instructions)

P purchase ยท S sale ยท A grant/award ยท M derivative exercise/conversion ยท F shares withheld for tax/exercise price ยท G bona fide gift ยท D disposition to issuer ยท C conversion ยท X/O option exercise ยท and others. The full table is embedded in src/main.js (TRANSACTION_CODES).

SEC fair access

This actor sends the SEC-required User-Agent header (a generic default is used if you don't set your own) and throttles to ~8 requests per second, under the SEC fair-access ceiling of ~10 req/s. Requests time out at 30s and retry transient (429/5xx) errors with backoff. If SEC ultimately throttles or blocks the run, it exits successfully with an empty/partial dataset and a clear log line rather than hanging or failing.

Limitations

  • One company per run. The actor requires a symbol (ticker) and fetches filings for that single issuer. It does not crawl "all insiders" market-wide.
  • Recent filings only. It reads EDGAR's filings.recent block (the issuer's most recent ~1,000 submissions), then keeps the first limit that match formTypes. It does not page into the older historical-filing shards, so very old transactions are out of scope.
  • Ticker-resolvable issuers only. Resolution uses SEC's company_tickers.json; companies without a ticker in that map cannot be looked up by symbol.
  • Parsing is regex-based over the official EDGAR ownership XML. It targets the standard <ownershipDocument> schema; an unusually-structured or malformed filing may yield no parsed transactions (logged and skipped, not fatal).
  • SEC rate-limits and blocks datacenter IPs. SEC EDGAR enforces fair-access limits (~10 req/s) and frequently answers datacenter traffic โ€” which is what Apify runs on โ€” with HTTP 403/429. When that happens (or EDGAR is otherwise unavailable), the run does not fail: it logs a clear line and exits successfully with an empty or partial dataset. Retry later, reduce frequency, or set your own userAgent.
  • A descriptive User-Agent is mandatory. SEC returns HTTP 403 to requests without one. The actor sends a generic default, but SEC recommends you set your own contact via the userAgent input.
  • Form 4 filings lag the trade. Section 16 requires insiders to file within two business days of a transaction, so a purchase/sale appears on EDGAR (and here) up to a couple of business days after it happened โ€” this is not real-time trade data.
  • Section 16 forms only. This reads Form 3/4/5 ownership filings; it does not cover other SEC forms (10-K, 8-K, 13D/G, etc.) or any non-EDGAR source.
  • An unknown ticker returns an empty result, not an error. A ticker missing from SEC's company_tickers.json produces a single informational note record and a successful run. (A truly missing required symbol input is rejected up front, since symbol is a required input.)
  • Not investment advice. Output is raw public-filing data with no analysis, scoring, or recommendation, and makes no claim about the legality or motivation of any reported transaction.

FAQ

Is this legal? Is this "insider trading"? Yes, it's fully legal public data. "Insider trading" here means the routine, legally-required Section 16 disclosure that officers, directors, and 10%+ owners must file. It does not imply wrongdoing and is unrelated to illegal trading on material non-public information.

Do I need an API key or login? No. SEC EDGAR is free and public. You only need to set a descriptive userAgent (SEC requires it).

Why do I have to provide a User-Agent? SEC fair-access rules require a descriptive User-Agent (ideally with a contact email). Without one, EDGAR returns HTTP 403. The actor sets a generic default but you should use your own.

Can I monitor the whole market or many companies at once? Each run targets one ticker. To cover a watchlist, run the actor once per symbol (e.g. via multiple scheduled tasks) and combine the datasets.

How current is the data? It reads the issuer's most recent EDGAR submissions. Pair it with an Apify Schedule to capture new filings as they post.

Why are pricePerShare / shares sometimes null? Some filings express price only in a footnote (common for grants, awards, and tax-withholding events) or don't report a numeric share count. Those fields are null rather than guessed.

How do I get alerted when a new filing lands? Connect the dataset to a webhook or integration (Slack, email, Make, Zapier) so each scheduled run pushes new transactions to you.

Disclaimer

This actor only reproduces public EDGAR data. It is not investment advice and makes no claim about the legality or motivation of any reported transaction.