SEC Insider Trading Monitor
Pricing
Pay per usage
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
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
21 hours ago
Last modified
Categories
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-Agentand throttles to ~8 req/s (under SEC's ~10 req/s ceiling) with timeouts and backoff. - ✅ Fails fast, never hangs — a missing ticker or a 403 ends with a clear error instead of partial/garbage output.
- 📦 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 and get every new Form 4 as it's filed.
- 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
- Resolves your ticker to a CIK via
https://www.sec.gov/files/company_tickers.json. - Reads the company's recent filing history from
https://data.sec.gov/submissions/CIK##########.json. - Downloads each matching Form 4 (or 3/5) ownership XML from the EDGAR archive.
- 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
| Field | Type | Default | Notes |
|---|---|---|---|
symbol | string | — | Required. Ticker, e.g. AAPL. |
formTypes | array | ["4"] | Section 16 forms to fetch (3, 4, 5). |
limit | integer | 10 | Max filings to fetch and parse (1–200). |
userAgent | string | generic | SEC 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"}
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 sets the SEC-required User-Agent header 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, then fail fast with a
clear error rather than hanging.
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.recentblock (the issuer's most recent ~1,000 submissions), then keeps the firstlimitthat matchformTypes. 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). - A missing/invalid ticker or a 403 from SEC (generic User-Agent) ends the run with a clear error message rather than partial/garbage output.
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.