# Form 144 API — Planned Insider Sales Before They Happen (`smartmoney-data/sec-form-144-planned-insider-sales`) Actor

SEC Form 144 notices of proposed insider stock sales: which executives, directors and affiliates plan to sell, how many shares, dollar value, planned sale date, broker and 10b5-1 plan date. Any ticker or the whole market. Official EDGAR data, pay per result.

- **URL**: https://apify.com/smartmoney-data/sec-form-144-planned-insider-sales.md
- **Developed by:** [SmartMoney Data](https://apify.com/smartmoney-data) (community)
- **Categories:** Business, AI, Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$3.00 / 1,000 planned insider sales

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

## Form 144 API — Planned Insider Sales Before They Happen

**See which executives, directors and major holders plan to sell their stock — the day they file the notice, often before the sale shows up anywhere else.**

Before an insider or affiliate sells restricted or control stock, they must file **SEC Form 144**: a notice of proposed sale. Form 4 tells you about a sale *after* it happened; Form 144 is the **early warning**. This Actor turns the raw EDGAR notices into clean rows: who is selling, how many shares, the dollar value, the planned sale date, the broker, and whether the sale runs under a pre-scheduled Rule 10b5-1 plan.

> Part of the **SmartMoney Data** suite: [Insider Trades](https://apify.com/smartmoney-data/sec-insider-trades-tracker) · [Hedge Fund 13F Holdings](https://apify.com/smartmoney-data/sec-13f-hedge-fund-tracker) · [Congress Stock Trades](https://apify.com/smartmoney-data/congress-stock-trades-tracker) · [Form 144 Planned Sales](https://apify.com/smartmoney-data/sec-form-144-planned-insider-sales) · [13D/13G Activist Stakes](https://apify.com/smartmoney-data/sec-13d-13g-activist-stakes)

### What you can do with it

- 🚨 **Early sell alerts:** get notified when a CEO or director files to sell a stock you own.
- 🔍 **Separate signal from noise:** discretionary sales (no 10b5-1 plan) are often more telling than scheduled ones. Filter to just those.
- 📊 **Supply overhang:** see how much stock insiders plan to unload relative to shares outstanding.
- 📰 **Newsletters & content:** "Biggest planned insider sales this week", ready-made.
- 🤖 **AI agents:** "Is anyone at NVIDIA planning to sell?" as a single tool call.

### Features

- ✅ **Seller name and relationship:** officer, director, 10% holder or other affiliate
- ✅ **Shares to be sold, aggregate market value and estimated price per share**
- ✅ **% of shares outstanding**, to spot unusually large sales
- ✅ **Approximate sale date, exchange and broker**
- ✅ **Rule 10b5-1 plan flag and plan adoption date**
- ✅ **How the shares were acquired** (RSU vesting, option exercise, open market…) with dates
- ✅ **Sales in the past 3 months** by the same seller, with proceeds
- ✅ **Any ticker, or the latest notices market-wide**
- ✅ Filters for minimum value, relationship, 10b5-1 plan and amendments. **You only pay for rows you keep.**
- ✅ Per-ticker **summary** of planned selling, largest first
- ✅ Link to the official filing on every row

### How to use it

#### Planned sales for your watchlist, last 30 days

```json
{ "tickers": ["NVDA", "AAPL", "TSLA"], "lookbackDays": 30 }
```

#### Latest notices across the whole market, $1M+ only

```json
{ "minValueUsd": 1000000 }
```

#### Only discretionary sales by officers and directors

```json
{
  "tickers": ["META", "AMZN", "MSFT"],
  "planFilter": "noPlan",
  "relationships": ["Officer", "Director"],
  "lookbackDays": 90
}
```

### Output

One row per class of securities in a notice. Example (illustrative values):

```json
{
  "ticker": "NVDA",
  "issuerName": "NVIDIA CORP",
  "sellerName": "Doe Jane",
  "relationshipToIssuer": "Officer, Director",
  "securitiesClass": "Common",
  "sharesToBeSold": 50000,
  "marketValueUsd": 9125000,
  "estPricePerShare": 182.5,
  "pctOfSharesOutstanding": 0.0002,
  "approxSaleDate": "2026-09-28",
  "exchange": "NASDAQ",
  "broker": "Morgan Stanley Smith Barney LLC Executive Financial Services",
  "acquisitionNature": "Restricted Stock Vesting",
  "acquiredDate": "2025-03-15",
  "is10b5_1Plan": true,
  "planAdoptionDate": "2026-03-10",
  "sharesSoldPast3Months": 50000,
  "proceedsPast3MonthsUsd": 8550000,
  "noticeDate": "2026-09-25",
  "isAmendment": false,
  "filingDate": "2026-09-25",
  "filingUrl": "https://www.sec.gov/Archives/edgar/data/…-index.htm"
}
```

Each row also includes `acquisitions` and `salesPast3Months` arrays with the line-by-line detail. Download as **JSON, CSV, Excel, XML or HTML**, or fetch via API. The **`SUMMARY`** record in the key-value store totals planned shares and dollar value per ticker.

### Use it from code or an AI agent

**Python**

```python
from apify_client import ApifyClient

client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("smartmoney-data/sec-form-144-planned-insider-sales").call(
    run_input={"tickers": ["NVDA"], "planFilter": "noPlan"}
)
for s in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(s["sellerName"], s["sharesToBeSold"], s["approxSaleDate"])
```

**JavaScript**

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

const client = new ApifyClient({ token: 'YOUR_APIFY_TOKEN' });
const run = await client.actor('smartmoney-data/sec-form-144-planned-insider-sales').call({ minValueUsd: 1000000 });
const { items } = await client.dataset(run.defaultDatasetId).listItems();
```

**AI agents:** add this Actor as a tool through the [Apify MCP server](https://mcp.apify.com). **No-code:** schedule it daily and send new notices to Google Sheets, Slack, Discord, email, Zapier or Make.

### Pricing

**Pay per result:** you're charged for each planned sale returned; filtered-out notices are free. See the **Pricing** tab for current rates. Set a *maximum cost per run* and the Actor stops cleanly when it's reached.

### FAQ

**Does a Form 144 mean the insider will definitely sell?**
No. It's a notice of a *proposed* sale. Most are followed by a sale, but some aren't. Pair it with the [Insider Trades Tracker](https://apify.com/smartmoney-data/sec-insider-trades-tracker) to see the Form 4 that confirms the sale.

**Who has to file Form 144?**
Affiliates of the company (officers, directors, large holders) and anyone selling restricted stock, when they plan to sell more than 5,000 shares or $50,000 in any 3-month period.

**What is a 10b5-1 plan?**
A pre-arranged trading plan adopted in advance, often months earlier. Plan sales are usually routine. Sales without a plan are discretionary, so set `planFilter` to `noPlan` to see only those.

**How far back does the data go?**
Form 144 became electronic on EDGAR in April 2023. Earlier notices were filed on paper and aren't available as data; they're skipped and counted in `SUMMARY.nonXmlFilingsSkipped`.

**Why is `ticker` empty for some rows?**
A few issuers (e.g. delisted or non-US-listed companies) have no ticker in the SEC's list. Issuer name and CIK are always present.

**Is this legal to use?**
Yes. Form 144 notices are public filings published by the US Securities and Exchange Commission.

### Related Actors

- 👔 [SEC Insider Trades Tracker](https://apify.com/smartmoney-data/sec-insider-trades-tracker): Form 4 buys and sells by CEOs and directors.
- 🏦 [Hedge Fund 13F Holdings Tracker](https://apify.com/smartmoney-data/sec-13f-hedge-fund-tracker): what Berkshire, Pershing Square & co. bought and sold last quarter.
- 🏛️ [Congress Stock Trades Tracker](https://apify.com/smartmoney-data/congress-stock-trades-tracker): stock trades by US Senators and Representatives.
- 🎯 [13D & 13G Activist Stakes](https://apify.com/smartmoney-data/sec-13d-13g-activist-stakes): activist funds and 5%+ owners, with their stated purpose.

### Support

Found a bug or need a feature? Open an issue on the **Issues** tab or email **smartmoney-data@googlegroups.com**. We usually reply within a day.

*Data is provided for informational purposes only and is not investment advice.*

# Actor input Schema

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

US stock tickers to track (e.g. NVDA, AAPL). Leave empty to pull the latest Form 144 notices market-wide.

## `lookbackDays` (type: `integer`):

Only include notices filed within this many days (ticker mode).

## `maxFilingsPerTicker` (type: `integer`):

Upper bound on Form 144 notices parsed for each ticker.

## `latestFilingsCount` (type: `integer`):

When no tickers are given, how many of the most recent Form 144 notices on EDGAR to parse.

## `minValueUsd` (type: `integer`):

Skip notices whose aggregate market value is below this. 0 keeps everything.

## `relationships` (type: `array`):

Keep only sellers whose relationship contains one of these words, e.g. Officer, Director, 10% owner. Leave empty for all.

## `planFilter` (type: `string`):

Pre-scheduled 10b5-1 plan sales are routine; discretionary sales (no plan) are often the more interesting signal.

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

Also return amended notices.

## `secUserAgent` (type: `string`):

The SEC asks automated clients to identify themselves as 'Company Name email@domain.com'. Put your own contact here for heavy use.

## Actor input object example

```json
{
  "tickers": [
    "NVDA",
    "AAPL",
    "TSLA"
  ],
  "lookbackDays": 30,
  "maxFilingsPerTicker": 50,
  "latestFilingsCount": 40,
  "minValueUsd": 0,
  "relationships": [],
  "planFilter": "all",
  "includeAmendments": true,
  "secUserAgent": "SmartMoney Data Form 144 Tracker smartmoney-data@googlegroups.com"
}
```

# Actor output Schema

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

No description

## `summary` (type: `string`):

No description

# 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 = {
    "tickers": [
        "NVDA",
        "AAPL",
        "TSLA"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("smartmoney-data/sec-form-144-planned-insider-sales").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 = { "tickers": [
        "NVDA",
        "AAPL",
        "TSLA",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("smartmoney-data/sec-form-144-planned-insider-sales").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 '{
  "tickers": [
    "NVDA",
    "AAPL",
    "TSLA"
  ]
}' |
apify call smartmoney-data/sec-form-144-planned-insider-sales --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,smartmoney-data/sec-form-144-planned-insider-sales"
        }
    }
}
```

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/46cmBiPXZE6zColT3/builds/yzx5cYVYM9y691bY2/openapi.json
