# OpenInsider (`maximedupre/openinsider`) Actor

Search public OpenInsider SEC Form 4 trades by market, ticker, screener URL, insider name, or CIK. Get structured company and insider details, transaction values, ownership fields, dates, and source links when available.

- **URL**: https://apify.com/maximedupre/openinsider.md
- **Developed by:** [Maxime Dupré](https://apify.com/maximedupre) (community)
- **Categories:** Business, Developer tools, News
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.70 / 1,000 insider trades

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

### 🔎 OpenInsider Form 4 research

For analysts, researchers, and developers, this Actor searches public OpenInsider data and returns structured SEC Form 4 insider-trade rows. Review company and insider identity, transaction and ownership details, trade and filing dates, direct SEC filing links, and source links in one dataset.

This is public market data for research and review, not investment advice.

**Use cases**

- Review one ticker's public insider trades with **[OpenInsider Stock](https://apify.com/maximedupre/openinsider/examples/openinsider-stock)**.
- Collect transaction details and filing links with **[SEC Form 4 Insider Trading](https://apify.com/maximedupre/openinsider/examples/sec-form-4-insider-trading)**.
- Find purchase-focused records with **[Insider Buying Stock Screener](https://apify.com/maximedupre/openinsider/examples/insider-buying-stock-screener)**.
- Narrow a submitted OpenInsider screener URL with **[SEC Form 4 Insider Trading Screener](https://apify.com/maximedupre/openinsider/examples/sec-form-4-insider-trading-screener)**.
- Start a public Form 4 review with **[Insider Trading Website](https://apify.com/maximedupre/openinsider/examples/insider-trading-website)**.
- Look up public purchase filings with **[Insider Buying](https://apify.com/maximedupre/openinsider/examples/insider-buying)**.

#### 📊 Public Form 4 trade rows

**What it returns**

Each saved row is one public SEC Form 4 insider-trade transaction found through the selected scope. Rows include company and insider identity, normalized roles, raw transaction and ownership values, trade and filing dates, a direct SEC filing link, and OpenInsider source links when provided.

When the same source trade is found again through another submitted value or search path, the Actor ignores the later match. The saved row represents the first eligible match.

#### ▶️ Search one insider-trade scope

**How to run**

1. Choose one `target`: `recent-market`, `ticker`, `screener`, `insider-name`, or `insider-cik`.
2. Add the value for that target, such as a stock ticker, one OpenInsider screener URL, insider names, or SEC CIKs.
3. Add optional transaction, date, and absolute trade-value filters.
4. Set `maxItems` if you want a result limit. The form defaults to 10; leave it empty to return all available results until the source is exhausted.
5. Start the Actor and open the dataset link when the run finishes.

Each run uses one search scope. It does not combine separate market, ticker, screener, and person searches in one run. The source is public, so you do not need an OpenInsider or SEC API key.

#### ⚙️ Input

**Input fields**

| Field | Type | What it does |
| --- | --- | --- |
| `target` | string | Selects one scope: `recent-market`, `ticker`, `screener`, `insider-name`, or `insider-cik`. |
| `ticker` | string | Stock ticker used with the `ticker` target. |
| `screenerUrl` | string | One OpenInsider screener URL used with the `screener` target. |
| `insiderNames` | string\[] | One or more names used with the `insider-name` target. The Actor resolves each name to an SEC filer and searches across affiliated companies. |
| `insiderCiks` | string\[] | One or more SEC CIK strings used with the `insider-cik` target. Enter digits only; leading zeros are allowed. |
| `transactionCategories` | string\[] | Optional transaction categories. An empty value includes all categories. |
| `transactionCodes` | string\[] | Optional exact Form 4 transaction codes, such as `P` or `S`. An empty value includes all codes. |
| `dateFilter` | object | Chooses a trade-date range or a filing lookback window. Use only the fields for the chosen mode. |
| `dateFilter.mode` | string | Selects `trade-date-range` or `filing-lookback`. |
| `dateFilter.from` | date string | Start of the trade-date range in `YYYY-MM-DD` form. |
| `dateFilter.to` | date string | End of the trade-date range in `YYYY-MM-DD` form. |
| `dateFilter.lookbackDays` | integer | Number of days back from the run date to include SEC filings. Use a positive number with `filing-lookback`. |
| `tradeValue` | object | Sets a lower value, an upper value, or both. Values are absolute dollar amounts. |
| `tradeValue.minimum` | number | Keeps trades at or above this dollar amount. |
| `tradeValue.maximum` | number | Keeps trades at or below this dollar amount. |
| `maxItems` | integer | Stops after this many saved records. Leave it empty to return all available results until the source is exhausted. |

**Default input example**

This is the public input from a successful current-beta run:

```json
{
  "target": "recent-market",
  "maxItems": 10
}
```

#### 🧾 Output

**Output link**

| Field | Type | What it does |
| --- | --- | --- |
| `datasetItems` | URL string | Links to the structured insider-trade rows from this run. |

**Dataset row fields**

Optional fields can be absent when the source does not provide them.

| Field | Type | What it does |
| --- | --- | --- |
| `companyName` | string | Company name in the trade. |
| `ticker` | string | Stock ticker for the company. |
| `companyCik` | string (optional) | SEC CIK for the company, when reported. |
| `insiderName` | string | Name of the insider in the filing. |
| `insiderCik` | string (optional) | SEC CIK for the insider, when reported. |
| `insiderRole` | string (optional) | Normalized insider role, such as CEO or director. |
| `transactionCategory` | string (optional) | Form 4 transaction category, when reported. |
| `transactionType` | string | Plain-language transaction type. |
| `transactionCode` | string | Form 4 transaction code from the source. |
| `ownershipType` | string (optional) | Ownership value, such as Direct or Indirect. |
| `ownershipCode` | string (optional) | Raw ownership code, when available. |
| `shares` | number | Number of shares in the transaction. |
| `pricePerShare` | number | Price paid or received for one share. |
| `totalTradeValue` | number | Total dollar value of the transaction. |
| `tradeDate` | date string | Date when the trade took place. |
| `filingDate` | date string | Date when the SEC Form 4 was filed. |
| `filingUrl` | URL string | Direct link to the original SEC Form 4 filing. |
| `accessionNumber` | string (optional) | SEC accession number for the filing, when reported. |
| `isAmendment` | boolean (optional) | Whether the filing is an amendment, when reported. |
| `isMultipleTransaction` | boolean (optional) | Whether the filing marks a multiple-transaction row, when reported. |
| `isDerivative` | boolean (optional) | Whether the filing includes a derivative transaction, when reported. |
| `sharesOwnedAfter` | number (optional) | Shares held after the transaction, when reported. |
| `ownershipChangeShares` | number (optional) | Change in owned shares reported for the transaction, when available. |
| `ownershipChangePercent` | number (optional) | Percent change in ownership reported for the transaction, when available. |
| `sourcePageUrl` | URL string (optional) | OpenInsider page for the trade, when provided. |
| `insiderProfileUrl` | URL string (optional) | OpenInsider profile page for the insider, when provided. |

**Example row from the current beta run**

This genuine row is from a successful `recent-market` run. It is shown in full.

```json
{
  "companyName": "Amalgamated Financial Corp.",
  "companyCik": "0001823608",
  "ticker": "AMAL",
  "insiderName": "Bruce Maryann",
  "insiderCik": "0001551962",
  "insiderRole": "Dir",
  "transactionCategory": "Sale",
  "transactionType": "Sale",
  "transactionCode": "S",
  "ownershipType": "Direct",
  "ownershipCode": "D",
  "shares": -2138,
  "pricePerShare": 49.55,
  "totalTradeValue": -105943,
  "tradeDate": "2026-07-30",
  "filingDate": "2026-08-03",
  "filingUrl": "http://www.sec.gov/Archives/edgar/data/1823608/000182360826000180/xslF345X03/wk-form4_1785782623.xml",
  "accessionNumber": "0001823608-26-000180",
  "isAmendment": false,
  "isMultipleTransaction": false,
  "isDerivative": false,
  "sharesOwnedAfter": 17804,
  "ownershipChangeShares": -2138,
  "ownershipChangePercent": -11,
  "sourcePageUrl": "http://openinsider.com/latest-insider-trading",
  "insiderProfileUrl": "http://openinsider.com/insider/Bruce-Maryann/1551962"
}
```

#### 💳 Pricing

The Actor uses pay-per-event pricing. Each successfully parsed public SEC Form 4 trade saved to the dataset is the billable event. Check the pricing panel for the current rate.

#### 🔌 Integrations

**API and exports**

Read the dataset through the Apify API or export it from Apify for scripts, spreadsheets, and review tools.

**Video guide**

https://www.youtube.com/watch?v=bNACk1\_S\_6w\&list=PLObrtcm1Kw6MUrlLNDbK9QRg8VDJg0gOW\&index=4

#### ❓ FAQ

##### Can one run use more than one search scope?

No. Choose one `target` for each run. You can run separate searches for market activity, a ticker, a screener URL, or a person.

##### What does the insider-name search return?

The Actor resolves a submitted name to an SEC filer and returns matching trades across affiliated companies when the source provides them.

##### Can I use an SEC CIK?

Yes. Choose `insider-cik` and enter a CIK as digits only. Leading zeros are allowed.

##### What happens if I submit several names or CIKs?

The input accepts arrays for `insiderNames` and `insiderCiks`. Use one identifier kind in a run, and review the rows returned for the values that the source resolves.

##### Why can a trade value be negative?

The source can report sales with negative shares and a negative `totalTradeValue`. Check `transactionType` and `transactionCode` for the transaction direction.

##### Are the filing links original SEC links?

Yes. `filingUrl` points to the original SEC Form 4 filing. The row can also include the OpenInsider source page and insider profile links.

##### Do I need an OpenInsider or SEC API key?

No. The Actor reads public source data and does not ask for source credentials or an API key.

##### Is this the OpenInsider API?

No. This is an Apify Actor that reads public OpenInsider data and exposes its own structured dataset through Apify.

##### What happens when the same trade matches twice?

The Actor saves the first eligible match and ignores later matches of the same source trade. One row describes that first saved match.

##### Does this Actor give investment advice?

No. It returns public Form 4 records and source links for research. It does not recommend buying, selling, or holding a security.

##### What is insider trading?

Here, it means public SEC Form 4 records about trades reported by company insiders. The Actor reports filing data; it does not judge a trade or give advice.

##### Is insider trading illegal?

The Actor cannot decide legality from a filing. Laws depend on the facts and the place involved, so get qualified legal advice for a specific question.

##### Will the results always be complete or current?

No guarantee covers completeness, freshness, speed, or availability. Results depend on the public records and source availability when the run starts.

### 📝 Changelog

**0.0: Initial release**

### 🆘 Support

For issues, questions, or feature requests, [file a ticket](https://console.apify.com/actors/maximedupre~openinsider/issues) and I'll fix or implement it in less than 24h 🫡

### 🔗 Related Actors

- [SEC 13F Manager Quarterly Report Scraper](https://apify.com/maximedupre/sec-13f-manager-quarterly-report-scraper) — Compare quarterly institutional holdings with public insider trades.
- [Stocktwits Scraper](https://apify.com/maximedupre/stocktwits-scraper) — Add public ticker messages and sentiment context to a trade review.
- [MarketWatch Scraper](https://apify.com/maximedupre/marketwatch) — Pair insider trades with financial news articles for company research.
- [OpenInsider Scraper](https://apify.com/crawlerbros/open-insider-scraper) — Use a direct OpenInsider scraping workflow when you need its source view.
- [SEC Insider Trading Tracker — Form 4 API](https://apify.com/ryanclinton/sec-insider-trading) — Send Form 4 data into an API or AI-agent workflow.

**Made with ❤️ by Maxime Dupré**

# Actor input Schema

## `target` (type: `string`):

Choose the kind of insider-trade search to run.

## `ticker` (type: `string`):

For the Stock ticker target, enter one stock ticker, such as AAPL.

## `screenerUrl` (type: `string`):

For the Screener query target, enter one OpenInsider screener URL. The actor uses that scope for this run.

## `insiderNames` (type: `array`):

For the Insider name target, enter one or more names. The actor resolves each name to an SEC filer and searches across affiliated companies.

## `insiderCiks` (type: `array`):

For the SEC CIK target, enter one or more insider CIKs. Use digits only; leading zeros are allowed.

## `transactionCategories` (type: `array`):

Optionally enter one or more transaction categories. This filter applies to every Target; leave it empty to include all categories.

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

Optionally enter one or more exact Form 4 transaction codes, such as P or S. This filter applies to every Target; leave it empty to include all codes.

## `dateFilter` (type: `object`):

Optionally choose a trade-date range or filing lookback window for every Target. Use only the fields for the mode you choose; the other date fields are ignored.

## `tradeValue` (type: `object`):

Optionally set a lower value, an upper value, or both. Values are absolute dollar amounts and apply to every Target.

## `maxItems` (type: `integer`):

Stop after this many records. Leave it empty to return all available results until the source is exhausted.

## Actor input object example

```json
{
  "target": "recent-market",
  "maxItems": 10
}
```

# Actor output Schema

## `datasetItems` (type: `string`):

URL for the structured insider-trade records from this run.

# 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 = {
    "target": "recent-market",
    "maxItems": 10
};

// Run the Actor and wait for it to finish
const run = await client.actor("maximedupre/openinsider").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 = {
    "target": "recent-market",
    "maxItems": 10,
}

# Run the Actor and wait for it to finish
run = client.actor("maximedupre/openinsider").call(run_input=run_input)

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

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

```

## CLI example

```bash
echo '{
  "target": "recent-market",
  "maxItems": 10
}' |
apify call maximedupre/openinsider --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=maximedupre/openinsider",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/X3b2cR8Hb3QgxsGKa/builds/Y0DhXPm3Ots9BMA7X/openapi.json
