# SEC Form 4 Insider Trading Scraper: Insider Buys & Sells Alerts (`radiant_opuntia/sec-form4-insider-alerts`) Actor

Daily feed of SEC Form 4 insider transactions from official EDGAR data: who bought or sold, ticker, shares, price, total value, role (CEO, CFO, director, 10% owner), 10b5-1 flag. Filter by ticker, buys/sells, minimum value and role. 'Only new' mode for insider-trading alerts.

- **URL**: https://apify.com/radiant_opuntia/sec-form4-insider-alerts.md
- **Developed by:** [GovData Feeds](https://apify.com/radiant_opuntia) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$3.00 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

**Scrape SEC Form 4 insider trading filings into one clean row per transaction: who bought or sold, how many shares, at what price, and whether it was a pre-planned 10b5-1 trade.**

**Rate your experience:** if you have used this Actor, you can tell us how it went on the [reviews page](https://apify.com/radiant_opuntia/sec-form4-insider-alerts/reviews). Honest feedback of any kind helps us improve it.

### What it does and who it is for

This Actor reads **SEC Form 4** filings from EDGAR (full-text search plus the filing XML itself) and returns one record per transaction: **insider name and role, company and ticker, transaction date and code, shares, price per share, total dollar value, shares owned afterwards, ownership type and the 10b5-1 plan flag**. Values come from the filed document.

Filter by look-back days or exact dates, tickers, transaction codes (P purchase, S sale, A grant, M option exercise, F tax withholding, G gift and more), insider role, minimum transaction value, derivative transactions, 10b5-1 plan trades and amended filings. Turn on **Only new** for daily insider-buying alerts.

#### Use cases

- **Investors and traders:** spot open-market insider purchases (code P) shortly after filing.
- **Quant and research teams:** build datasets of insider buys and sells by ticker, role or size.
- **Newsletters and finance writers:** a daily "largest insider buys" feed.
- **Fintech and alerting apps:** add structured insider data to your product.
- **AI agents:** answer "which officers bought more than $250k of their own stock this week?".

### Why use this instead of the free official site or API

The underlying data is public and the official sources are free. What this Actor adds is convenience: each filing is turned into analysis-ready transaction rows.

| What you need | Official site / API | This Actor |
|---|---|---|
| Reading a Form 4 | Open each filing; one filing can hold several transactions and several owners | One flat row per transaction, with value (shares × price) calculated when both are reported |
| Filtering buys vs sells | Not in the filing list | Transaction code filter (default is purchases and sales) |
| Skipping pre-planned trades | Read the footnotes and checkbox yourself | Exclude 10b5-1 plan trades with one switch; the flag is on every row |
| Watching specific companies | Look up each company's filings | List of tickers in one input |
| Only new filings | Track accession numbers yourself | **Only new** mode with a named alert |

If you only need a single lookup now and then, the official site is fine. If you want the same data on a schedule, as flat rows you can feed to a spreadsheet, CRM or agent, this saves the glue work.

### Data fields

| Field | Type | What it contains |
|---|---|---|
| `accessionNumber` | text | SEC accession number of the filing. |
| `form` | text | Form type (4, or 4/A for amendments). |
| `filedDate` | date | Date the filing was submitted. |
| `periodOfReport` | date | Period of report stated on the filing. |
| `ticker` | text | Issuer trading symbol. |
| `issuerName` | text | Issuer company name. |
| `issuerCik` | text | Issuer SEC Central Index Key. |
| `insiderName` | text | Reporting person's name. |
| `insiderCik` | text | Reporting person's CIK. |
| `insiderTitle` | text | Officer title or relationship stated on the filing. |
| `isOfficer` | boolean | Whether the reporting person is an officer. |
| `isDirector` | boolean | Whether the reporting person is a director. |
| `isTenPercentOwner` | boolean | Whether the reporting person owns more than 10%. |
| `otherReportingOwners` | text | Other reporting owners on a joint filing, if any. |
| `securityTitle` | text | Title of the security traded. |
| `isDerivative` | boolean | true for derivative-table transactions (options, warrants). |
| `transactionDate` | date | Date of the transaction. |
| `transactionCode` | text | SEC transaction code (P, S, A, M, F, G and so on). |
| `transactionType` | text | Plain-language name for the transaction code. |
| `acquiredOrDisposed` | text | A for acquired, D for disposed. |
| `shares` | integer | Number of shares or units in the transaction. |
| `pricePerShare` | number | Price per share, when reported. |
| `transactionValue` | number | Shares multiplied by price per share, only when both are reported. |
| `sharesOwnedAfter` | integer | Shares owned after the transaction. |
| `ownership` | text | Direct or Indirect ownership. |
| `ownershipNature` | text | Description of indirect ownership (for example a trust or fund). |
| `underlyingSecurity` | text | Underlying security for derivative transactions. |
| `exercisePrice` | text | Exercise or conversion price for derivative securities. |
| `tenB5OnePlan` | boolean | true when the filing indicates a Rule 10b5-1 trading plan. |
| `filingUrl` | text | Link to the filing index on EDGAR. |
| `xmlUrl` | text | Link to the filing's XML document. |
| `scrapedAt` | datetime | When the Actor collected the record (UTC). |

Fields a source does not publish are `null`.

### "New since yesterday" alerts

Turn on **Only new** and the Actor remembers what it has already returned, so each scheduled run delivers only records you have not seen before.

1. Open the Actor in Apify Console and set the input, with **Only new since last run** switched on and a fixed alert name (`stateKey`). Example input:

```json
{
  "daysBack": 2,
  "transactionCodes": ["P"],
  "insiderRoles": ["officer", "director"],
  "minTransactionValue": 100000,
  "excludeTenB5One": true,
  "maxResults": 200,
  "onlyNew": true,
  "stateKey": "daily-insider-buys"
}
```

2. Click **Save as task**, then open **Schedules**, create a schedule (for example the cron expression `0 7 * * *` for every day at 7:00 in the time zone you pick) and add the task to it.
3. Under the task's **Integrations**, send the results to Slack, email, Google Sheets, a webhook or your own system.

Insiders must file within two business days of a trade, so a 2-day look-back with Only new catches each filing once.

The first run returns everything that matches your window (all matching transactions from the look-back window); later runs return only unseen records. Use a different alert name for each task so each keeps its own memory. A run with nothing new returns no results.

### Cost per run

This Actor uses **pay-per-result pricing: $3.00 per 1,000 results ($0.003 per result)**, with the Apify platform fee included. You are charged for the records a run returns and nothing is added on top for platform usage. A run that finds nothing new returns no results, so it has no per-result charge. The **Max results** input caps what a run can return (and so what it can cost).

**Worked example:** a daily alert for open-market purchases above $100,000 that returns 12 transactions costs 12 × $0.003 = $0.036 per run, about $1.08 for a 30-day month. 5,000 transactions cost $15.00.

The pricing is configured in Apify Console; the Pricing tab on this page is the authoritative source if it ever differs from this text.

### Example input and output

The output below comes from real test runs of this Actor. Email addresses are masked and very long text is shortened here; the Actor returns the full values.

Input used for the example:

```json
{
  "daysBack": 2,
  "transactionCodes": ["P"],
  "insiderRoles": ["officer", "director"],
  "minTransactionValue": 100000,
  "excludeTenB5One": true,
  "onlyNew": true,
  "stateKey": "daily-insider-buys",
  "maxResults": 200
}
```

Output (the first 2 records of a test run):

```json
[
  {
    "accessionNumber": "0001193125-26-429073",
    "form": "4",
    "filedDate": "2026-10-22",
    "periodOfReport": "2026-10-22",
    "ticker": "RAPP",
    "issuerName": "Rapport Therapeutics, Inc.",
    "issuerCik": "2012593",
    "insiderName": "PAUL STEVEN M",
    "insiderCik": "1237564",
    "insiderTitle": "Director",
    "isOfficer": false,
    "isDirector": true,
    "isTenPercentOwner": false,
    "otherReportingOwners": null,
    "securityTitle": "Common Stock",
    "isDerivative": false,
    "transactionDate": "2026-10-22",
    "transactionCode": "P",
    "transactionType": "Open-market purchase",
    "acquiredOrDisposed": "A",
    "shares": 35714,
    "pricePerShare": 27.28,
    "transactionValue": 974277.92,
    "sharesOwnedAfter": 77380,
    "ownership": "Indirect",
    "ownershipNature": "By Paul Capital Strategy III Fund LLC",
    "underlyingSecurity": null,
    "exercisePrice": null,
    "tenB5OnePlan": false,
    "filingUrl": "https://www.sec.gov/Archives/edgar/data/1237564/000119312526429073/0001193125-26-429073-index.htm",
    "xmlUrl": "https://www.sec.gov/Archives/edgar/data/1237564/000119312526429073/ownership.xml",
    "scrapedAt": "2026-10-23T10:41:47.262Z"
  },
  {
    "accessionNumber": "0001193125-26-429071",
    "form": "4",
    "filedDate": "2026-10-22",
    "periodOfReport": "2026-10-22",
    "ticker": "RAPP",
    "issuerName": "Rapport Therapeutics, Inc.",
    "issuerCik": "2012593",
    "insiderName": "MARAGANORE JOHN",
    "insiderCik": "1180432",
    "insiderTitle": "Director",
    "isOfficer": false,
    "isDirector": true,
    "isTenPercentOwner": false,
    "otherReportingOwners": null,
    "securityTitle": "Common Stock",
    "isDerivative": false,
    "transactionDate": "2026-10-22",
    "transactionCode": "P",
    "transactionType": "Open-market purchase",
    "acquiredOrDisposed": "A",
    "shares": 8239,
    "pricePerShare": 26.3799,
    "transactionValue": 217344,
    "sharesOwnedAfter": 8239,
    "ownership": "Indirect",
    "ownershipNature": "By John M. Maraganore Revocable Trust",
    "underlyingSecurity": null,
    "exercisePrice": null,
    "tenB5OnePlan": false,
    "filingUrl": "https://www.sec.gov/Archives/edgar/data/1180432/000119312526429071/0001193125-26-429071-index.htm",
    "xmlUrl": "https://www.sec.gov/Archives/edgar/data/1180432/000119312526429071/ownership.xml",
    "scrapedAt": "2026-10-23T10:41:47.444Z"
  }
]
```

### Limits worth knowing

- Form 4 must be filed within two business days of a trade, so very recent trades may not be filed yet.
- EDGAR search returns at most 10,000 filings per query. Narrow the dates for large pulls.
- Some transactions (grants, gifts, option exercises) have no price, so `pricePerShare` and `transactionValue` are `null`.
- Provide tickers that EDGAR can resolve; if none of the tickers resolve, the run ends with no results.
- The Actor sends a declared User-Agent and keeps a polite request rate, as the SEC requires.

### FAQ

#### What does `transactionValue` mean?

Shares multiplied by price per share, calculated only when both numbers are in the filing.

#### What are the transaction codes?

P is an open-market purchase, S a sale, A a grant or award, M an option exercise, F tax withholding and G a gift. The `transactionType` field spells it out.

#### Why is a price empty?

Some transactions, such as grants and option exercises, are reported without a price.

#### Can I exclude pre-planned sales?

Yes. Turn on the 10b5-1 exclusion; every row also carries the `tenB5OnePlan` flag.

#### Is this investment advice?

No. It is raw filing data for research.

### Related Actors

More Actors from GovData Feeds, all on Apify:

- [grants-gov-alerts](https://apify.com/radiant_opuntia/grants-gov-alerts): US federal grant opportunities (Grants.gov): ceilings, deadlines, eligibility
- [sec-form-d-alerts](https://apify.com/radiant_opuntia/sec-form-d-alerts): SEC Form D filings: companies that just raised money
- [usaspending-awards-alerts](https://apify.com/radiant_opuntia/usaspending-awards-alerts): New federal contract, grant and loan awards (USAspending)
- [fda-recall-alerts](https://apify.com/radiant_opuntia/fda-recall-alerts): FDA food, drug and medical device recalls
- [fda-compliance-alerts](https://apify.com/radiant_opuntia/fda-compliance-alerts): FDA 510(k) clearances, MAUDE adverse events and warning letters
- [cpsc-recall-alerts](https://apify.com/radiant_opuntia/cpsc-recall-alerts): CPSC consumer product safety recalls
- [us-building-permits-alerts](https://apify.com/radiant_opuntia/us-building-permits-alerts): New building permits from nine city open-data portals
- [clinical-trials-alerts](https://apify.com/radiant_opuntia/clinical-trials-alerts): New ClinicalTrials.gov studies by condition, sponsor and phase
- [federal-register-alerts](https://apify.com/radiant_opuntia/federal-register-alerts): Federal Register rules, proposed rules and notices
- [contractor-license-alerts](https://apify.com/radiant_opuntia/contractor-license-alerts): New contractor licenses in WA, OR and NY with bond and insurance
- [ofac-sanctions-alerts](https://apify.com/radiant_opuntia/ofac-sanctions-alerts): OFAC sanctions screening and change alerts
- [new-business-registrations-alerts](https://apify.com/radiant_opuntia/new-business-registrations-alerts): New LLC and corporation registrations (NY, CO, OR, CT)
- [epa-echo-enforcement-alerts](https://apify.com/radiant_opuntia/epa-echo-enforcement-alerts): EPA ECHO facilities with new environmental penalties
- [restaurant-inspections-alerts](https://apify.com/radiant_opuntia/restaurant-inspections-alerts): Restaurant health inspections from seven US jurisdictions
- [code-violations-alerts](https://apify.com/radiant_opuntia/code-violations-alerts): Building, housing and property code violations from six cities

*Data comes from SEC EDGAR, a US government source. This Actor is not affiliated with or endorsed by the SEC. It is not investment advice.*

# Actor input Schema

## `daysBack` (type: `integer`):

Look back this many days from today. Ignored if a start date is set.

## `startDate` (type: `string`):

Filing date in YYYY-MM-DD format. Overrides 'Filed within last N days'.

## `endDate` (type: `string`):

Filing date in YYYY-MM-DD format. Defaults to today.

## `tickers` (type: `array`):

Only insiders of these companies, e.g. AAPL, NVDA, TSLA. Leave empty for every company. This also makes the run much faster.

## `transactionCodes` (type: `array`):

Which SEC transaction codes to keep. P = open-market purchase, S = open-market sale. The others are awards, option exercises, tax withholding and gifts, which are usually noise.

## `insiderRoles` (type: `array`):

Keep only filings by these kinds of insiders. Leave empty for all.

## `minTransactionValue` (type: `integer`):

Shares multiplied by price must be at least this. 0 = off.

## `includeDerivatives` (type: `boolean`):

Also return options, RSUs and other derivative securities (Table II of Form 4).

## `excludeTenB5One` (type: `boolean`):

Skip filings flagged as made under a Rule 10b5-1 trading plan. Useful for finding discretionary insider buying.

## `includeAmendments` (type: `boolean`):

Also return corrected filings.

## `onlyNew` (type: `boolean`):

Remember what was already returned and output only transactions not seen in earlier runs of this same search. Ideal with a daily Schedule + email/Slack/webhook integration.

## `stateKey` (type: `string`):

Separate memory for 'only new' mode. Defaults to a key derived from your filters.

## `maxResults` (type: `integer`):

Stop after this many transactions.

## Actor input object example

```json
{
  "daysBack": 2,
  "tickers": [],
  "transactionCodes": [
    "P",
    "S"
  ],
  "insiderRoles": [],
  "minTransactionValue": 0,
  "includeDerivatives": false,
  "excludeTenB5One": false,
  "includeAmendments": false,
  "onlyNew": false,
  "maxResults": 50
}
```

# Actor output Schema

## `results` (type: `string`):

All SEC Form 4 insider transactions returned by this run (flat JSON items in the default dataset).

## `runSummary` (type: `string`):

Counts of filings checked, transactions pushed and transactions skipped as already seen (only-new mode).

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "daysBack": 2,
    "transactionCodes": [
        "P",
        "S"
    ],
    "minTransactionValue": 0,
    "includeDerivatives": false,
    "excludeTenB5One": false,
    "includeAmendments": false,
    "onlyNew": false,
    "maxResults": 50
};

// Run the Actor and wait for it to finish
const run = await client.actor("radiant_opuntia/sec-form4-insider-alerts").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "daysBack": 2,
    "transactionCodes": [
        "P",
        "S",
    ],
    "minTransactionValue": 0,
    "includeDerivatives": False,
    "excludeTenB5One": False,
    "includeAmendments": False,
    "onlyNew": False,
    "maxResults": 50,
}

# Run the Actor and wait for it to finish
run = client.actor("radiant_opuntia/sec-form4-insider-alerts").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "daysBack": 2,
  "transactionCodes": [
    "P",
    "S"
  ],
  "minTransactionValue": 0,
  "includeDerivatives": false,
  "excludeTenB5One": false,
  "includeAmendments": false,
  "onlyNew": false,
  "maxResults": 50
}' |
apify call radiant_opuntia/sec-form4-insider-alerts --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,radiant_opuntia/sec-form4-insider-alerts"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/9uh9QG6myGIWDoT2v/builds/Sap2aBhTllFjzZLe3/openapi.json
