/api/v1/scrapping/insider-tradingScrape an insider trading filing (Form 3 / 4 / 5) by URL.
Scrape an insider trading filing (Form 3 / 4 / 5) by URL. Returns parsed insider identity, issuer, and per-transaction details (transaction date, code, shares, price, post-transaction holdings). Use this for one-off Form 4 lookups when you have the URL; for the curated FinRadar insider transactions surface use /insider-module/api/insiders/transactions/latest.
Why use this
Common use case
Single-filing Form 3 / 4 / 5 scraper — pass an insider filing URL, receive parsed insider identity (name, CIK, role flags), issuer info, per-transaction rows (date, code, shares, price, post-transaction holdings), and the Rule 10b5-1 / Section 16 status flags critical for trading-pattern analytics. Heavy (10 tokens) — runs a Python subprocess that fetches + BeautifulSoup-parses EDGAR's Form 4 viewer page. For NEW integrations strongly prefer GET /insider-module/api/insiders/transactions/latest — the curated FinRadar insider surface aggregates total_beneficial_ownership across all ownership vehicles (direct + indirect trusts/entities), enriches with Sharadar sector/industry, and is purpose-built for insider-screening workflows. The scrapping endpoint is preserved for: (a) sec-api.io migration compatibility, (b) tutorial follow-along, (c) one-off URL-driven lookups where you don't need the Form-4-as-a-Service shape. The Rule 10b5-1 flag is critical for analytics — pre-arranged sales (Rule 10b5-1 = true) are scheduled in advance and considered "clean"; raw discretionary sales (false) are higher-signal for sentiment analysis. Note: returns Form 3 (initial holdings) and Form 5 (annual reconciliation) too, in addition to the standard Form 4 — check data.formtype to route processing.
Parameters
| Name | In | Required | Default | Allowed | Description | Example |
|---|---|---|---|---|---|---|
| link | query | required | — | — | Full SEC EDGAR URL of the Form 4 (or Form 3 / Form 5) viewer page (the page that displays the formatted form, not the XML directly). Returns 400 BAD_REQUEST when missing. Get from `linkToFilingDetails` in `/scrapping/cik` responses or from RSS alert payloads. Server-side fetches via Python subprocess with a 5-minute timeout. | https://www.sec.gov/cgi-bin/browse-edgar?action=getcompany&CIK=0001214156&type=4 |
Response schema
| Field | Type | Nullable | Description |
|---|---|---|---|
| query | object | no | Echo of input parameters. |
| query.formType | string | no | Always `"Form 4"` — endpoint name preserved even when the underlying filing is a Form 3 or Form 5. |
| query.link | string | no | Echoed input URL. |
| data | object | no | Parsed Form 3/4/5 record — see `data.*` fields. Camel-cased field names preserved from EDGAR's stored form. |
| data.formtype | string | no | Detected form type — `3`, `4`, `5`, `4/A`, etc. Use to route processing logic (Form 3 = initial holdings; Form 4 = changes; Form 5 = annual reconciliation). |
| data.formtitle | string | no | Filing title as displayed in the EDGAR viewer (e.g. `"FORM 4 STATEMENT OF CHANGES IN BENEFICIAL OWNERSHIP"`). |
| data.formstatement | string | no | The legal statement block from the form header — typically references Section 16(a) of the Securities Exchange Act. |
| data.omb_approval | object | no | OMB approval block — `{ombnumber, hoursperresponse}`. Useful for forensic / audit-trail work; ignore for analytics. |
| data.notSubjectToSection16 | boolean | no | `true` when the insider has marked the "no longer subject to Section 16" checkbox (e.g. departing executives filing a final Form 4). False otherwise. |
| data.rule10b51Plan | boolean | no | `true` when the transaction is executed under a pre-arranged Rule 10b5-1 plan (a SEC-sanctioned defense against insider-trading allegations — "I scheduled this sale 6 months ago, not based on material non-public info"). Critical signal for insider-transaction analytics — Rule 10b5-1 sales are pre-planned, raw discretionary sales aren't. |
| data.issuer | object | no | Issuer info — see `data.issuer.*` fields. |
| data.issuer.cik | string | yes | Issuer CIK as parsed from the form's issuer block. Null when the parse fails (rare). |
| data.issuer.name | string | yes | Issuer's legal entity name (e.g. `"APPLE INC"`). |
| data.issuer.tradingSymbol | string | yes | Issuer's ticker as reported on the Form 4 (e.g. `"AAPL"`). Authoritative for the filing — use this rather than CIK→ticker lookup if available. |
| data.issuer.transactiondate | string | yes | Date of earliest transaction in the filing (typically the trade date for Form 4). |
| data.amendmentDate | string | yes | Date of original filing when this is an amendment (`/A` suffix). Null on non-amendments. |
| data.individualOrJoint | string | yes | `Individual` or `Joint/Group` — Form 4 supports group filings by multiple insiders sharing a single submission. |
| data.reportingOwners | array | no | Array of reporting owners — typically 1 element on individual filings, multiple on joint/group filings. Each entry: `{name, cik, address, relationship: {director, officer, tenPercentOwner, other, officerTitle}}`. |
| data.nonDerivativeTransactions | array | no | Array of non-derivative (i.e. direct equity) transactions. Each entry: `{title, transactionDate, transactionCode, transactionAmount, transactionPrice, sharesOwnedFollowingTransaction, ownership}`. Empty array when no direct-equity activity. |
| data.derivativeTransactions | array | no | Array of derivative (option / warrant / convertible) transactions. Includes additional fields for strike price, expiration, underlying security. Empty array when no derivative activity. |
| data.signature | object | yes | Signature block — `{signatureName, signatureDate}`. The signature is the insider's electronic signature confirming the filing. |
Sample response
- "query":
- "formType": "Form 4"
- "link": "https://www.sec.gov/cgi-bin/browse-edgar?action=getcompany&CIK=0001214156&type=4"
- "data":
- "formtype": "4"
- "formtitle": "FORM 4 STATEMENT OF CHANGES IN BENEFICIAL OWNERSHIP"
- "formstatement": "OMB APPROVAL Filed pursuant to Section 16(a)..."
- "omb_approval":
- "notSubjectToSection16": false
- "rule10b51Plan": true
- "issuer":
- "amendmentDate": null
- "individualOrJoint": "Individual"
- "reportingOwners":
- "nonDerivativeTransactions":
- "derivativeTransactions": []
- "signature":
Errors
| Status | Label | Description |
|---|---|---|
| 200 | OK | Request succeeded. |
| 400 | Bad Request | Invalid query, body, or path parameter. |
| 401 | Unauthorized | Missing or invalid Authorization header / api_Token. |
| 402 | Payment Required | Insufficient token balance for this call. Top up |
| 429 | Too Many Requests | Rate limit exceeded for your tier (see /pricing for tier limits). Tier limits |
| 500 | Server Error | Unexpected server-side failure. Retry with backoff; report if persistent. |
Code samples
curl "https://api.finradar.ai/api/v1/scrapping/insider-trading?api_Token=YOUR_API_KEY" \
-H "Authorization: Bearer YOUR_JWT_TOKEN"Generate an API key in /account/credentials to run live queries (literal YOUR_API_KEY placeholder shown until then).