# SEC Insider Conviction Pipeline: Form 4 Buys + 8-K Catalysts (`scrapemint/sec-insider-conviction-pipeline`) Actor

Find companies where insiders are buying on the open market AND filing material 8-K catalysts. Chains SEC Form 4 with 8-K events, joins on issuer CIK, and scores each company 0-100 by conviction tier. Core tier is 100% SEC EDGAR, no antibot risk. Pay per scored company.

- **URL**: https://apify.com/scrapemint/sec-insider-conviction-pipeline.md
- **Developed by:** [Ken M](https://apify.com/scrapemint) (community)
- **Categories:** Business
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per event

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/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

## SEC Insider Conviction Pipeline: Form 4 Buys + 8-K Catalysts

Find companies where insiders are **buying on the open market** at the same time the company is **filing material 8-K events**. The pipeline pulls both signals straight from SEC EDGAR, joins them per company, and scores each one 0 to 100 with a conviction tier you can act on.

The core signal is **100% SEC EDGAR**: public, free, structured filings with no antibot risk. Optional LinkedIn hiring enrichment is off by default.

### What it does

1. **Form 4 insider transactions.** Pulls every reported insider transaction for your tickers over the lookback window and isolates open-market purchases (transaction code P), which are the real conviction buys, from sales (code S).
2. **8-K material events.** Pulls material corporate filings for the same companies and categorizes the item codes into catalysts (M\&A, earnings, executive changes, financing, cybersecurity) and bearish risk flags (bankruptcy, delisting, impairment, non-reliance restatement, auditor change, layoffs).
3. **Optional hiring momentum.** When enabled with a ticker-to-LinkedIn-URL map, adds open-role count and hiring trend as a growth confirmation.
4. **Join and score.** Joins all sources on issuer CIK and scores each company:
   - Insider buy intensity (cluster buys by multiple insiders, total dollar value, buy/sell balance)
   - Material catalyst presence and type
   - Optional hiring momentum

### Output

One row per company:

```json
{
  "cik": "1045810",
  "ticker": "NVDA",
  "company": "NVIDIA CORP",
  "convictionScore": 78,
  "tier": "high-conviction",
  "distressed": false,
  "riskFlags": [],
  "insider": {
    "distinctBuyers": 3,
    "buyValueUsd": 1840000,
    "distinctSellers": 0,
    "sellValueUsd": 0,
    "netBuyValueUsd": 1840000,
    "clusterBuy": true,
    "topBuyers": [{ "name": "...", "title": "Director", "valueUsd": 900000, "date": "2026-05-12" }]
  },
  "catalysts": ["earnings", "exec_change"],
  "catalystDetail": ["Earnings / results of operations", "Executive / board change"],
  "eightKFilings": [{ "filingDate": "2026-05-22", "url": "https://www.sec.gov/...", "itemCodes": ["2.02"] }],
  "hiring": null,
  "lookbackDays": 90
}
```

#### Tiers

- **high-conviction** — score 70+, a cluster buy (2+ distinct insiders buying), and a material catalyst, with no bearish risk flag.
- **accumulation** — at least one insider open-market buy and a score of 40+.
- **watch** — appeared in the window but did not clear the accumulation bar, or carries a bearish risk flag.

`distressed: true` marks any company with a bearish 8-K (bankruptcy, delisting, non-reliance restatement, etc.); these are capped at the watch tier no matter how strong the buying.

### Input

| Field | Description |
| --- | --- |
| `tickers` | Tickers to evaluate, e.g. `["NVDA","PLTR"]`. Provide tickers or CIKs. |
| `ciks` | SEC CIKs (leading zeros optional). |
| `lookbackDays` | Window for both Form 4 and 8-K. Default 90. |
| `minBuyValueUsd` | Drop insider transactions below this dollar value. |
| `maxItemsTotal` | Cap on rows pulled per EDGAR source per run. |
| `includeHiringEnrichment` | Turn on LinkedIn hiring momentum (requires the map below). |
| `linkedinCompanyMap` | `[{ "ticker": "NVDA", "companyUrl": "https://www.linkedin.com/company/nvidia/" }]`. There is no automatic ticker-to-LinkedIn lookup, so you supply these. |

### Pricing and combined cost

You are charged per scored company: **watch $0.04 / accumulation $0.10 / high-conviction $0.18**. The first 3 high-conviction rows per run are free so you can validate output.

This pipeline calls two child actors on your behalf — **sec-form4-insider-tracker** and **sec-8k-event-tracker** (and **linkedin-company-hiring-tracker** only when enrichment is on). Those actors charge their own per-event fees, which appear on your bill **in addition** to this pipeline's per-company charge. Keep `maxItemsTotal` sized to your ticker list to control the combined cost.

### Who it is for

Retail investors, finance newsletter writers, and quant hobbyists who want insider accumulation cross-referenced with material catalysts in one scored feed, without scraping or parsing EDGAR XML themselves.

# Actor input Schema

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

Stock tickers to evaluate. Examples: \["NVDA", "AAPL", "PLTR"]. Provide tickers or CIKs (at least one list is required).

## `ciks` (type: `array`):

SEC Central Index Keys, if you prefer them over tickers. Leading zeros are optional. Combines with the ticker list.

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

How far back to evaluate insider transactions and 8-K filings. 90 days captures a quarter of accumulation without stale signal.

## `minBuyValueUsd` (type: `integer`):

Ignore insider transactions below this dollar value. 0 includes every reported transaction. Raise it to filter out token purchases.

## `maxItemsTotal` (type: `integer`):

Hard cap on rows pulled from each EDGAR source (Form 4 and 8-K) per run. Controls total cost.

## `includeHiringEnrichment` (type: `boolean`):

Optional. When on AND you supply the ticker to LinkedIn URL map below, the pipeline adds hiring momentum to the conviction score. Off keeps the run 100% SEC EDGAR with no antibot exposure.

## `linkedinCompanyMap` (type: `array`):

Only used when hiring enrichment is on. Each entry maps a ticker to its LinkedIn company URL, e.g. {"ticker": "NVDA", "companyUrl": "https://www.linkedin.com/company/nvidia/"}. There is no automatic ticker to LinkedIn lookup, so you must supply these.

## `proxyConfiguration` (type: `object`):

Optional Apify proxy passed to the child actors. EDGAR does not require a proxy; the LinkedIn enrichment stage benefits from residential.

## Actor input object example

```json
{
  "tickers": [
    "NVDA",
    "PLTR",
    "SOFI"
  ],
  "ciks": [],
  "lookbackDays": 90,
  "minBuyValueUsd": 0,
  "maxItemsTotal": 300,
  "includeHiringEnrichment": false,
  "linkedinCompanyMap": [],
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# 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",
        "PLTR",
        "SOFI"
    ],
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("scrapemint/sec-insider-conviction-pipeline").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",
        "PLTR",
        "SOFI",
    ],
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("scrapemint/sec-insider-conviction-pipeline").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 '{
  "tickers": [
    "NVDA",
    "PLTR",
    "SOFI"
  ],
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call scrapemint/sec-insider-conviction-pipeline --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

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