# 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, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per usage

This Actor is paid per platform usage. The Actor is free to use, and you only pay for the Apify platform usage, which gets cheaper the higher subscription plan you have.

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

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use 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

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "SEC Insider Conviction Pipeline: Form 4 Buys + 8-K Catalysts",
        "description": "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.",
        "version": "0.1",
        "x-build-id": "Qr7Q74HoCPikqgebd"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/scrapemint~sec-insider-conviction-pipeline/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-scrapemint-sec-insider-conviction-pipeline",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/scrapemint~sec-insider-conviction-pipeline/runs": {
            "post": {
                "operationId": "runs-sync-scrapemint-sec-insider-conviction-pipeline",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/scrapemint~sec-insider-conviction-pipeline/run-sync": {
            "post": {
                "operationId": "run-sync-scrapemint-sec-insider-conviction-pipeline",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "tickers": {
                        "title": "Tickers to watch",
                        "type": "array",
                        "description": "Stock tickers to evaluate. Examples: [\"NVDA\", \"AAPL\", \"PLTR\"]. Provide tickers or CIKs (at least one list is required).",
                        "default": [],
                        "items": {
                            "type": "string"
                        }
                    },
                    "ciks": {
                        "title": "CIKs to watch",
                        "type": "array",
                        "description": "SEC Central Index Keys, if you prefer them over tickers. Leading zeros are optional. Combines with the ticker list.",
                        "default": [],
                        "items": {
                            "type": "string"
                        }
                    },
                    "lookbackDays": {
                        "title": "Lookback window (days)",
                        "minimum": 7,
                        "maximum": 365,
                        "type": "integer",
                        "description": "How far back to evaluate insider transactions and 8-K filings. 90 days captures a quarter of accumulation without stale signal.",
                        "default": 90
                    },
                    "minBuyValueUsd": {
                        "title": "Minimum insider buy value (USD)",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Ignore insider transactions below this dollar value. 0 includes every reported transaction. Raise it to filter out token purchases.",
                        "default": 0
                    },
                    "maxItemsTotal": {
                        "title": "Max filings per source",
                        "minimum": 50,
                        "maximum": 2000,
                        "type": "integer",
                        "description": "Hard cap on rows pulled from each EDGAR source (Form 4 and 8-K) per run. Controls total cost.",
                        "default": 300
                    },
                    "includeHiringEnrichment": {
                        "title": "Add LinkedIn hiring enrichment",
                        "type": "boolean",
                        "description": "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.",
                        "default": false
                    },
                    "linkedinCompanyMap": {
                        "title": "Ticker to LinkedIn company URL map",
                        "type": "array",
                        "description": "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.",
                        "default": []
                    },
                    "proxyConfiguration": {
                        "title": "Proxy configuration",
                        "type": "object",
                        "description": "Optional Apify proxy passed to the child actors. EDGAR does not require a proxy; the LinkedIn enrichment stage benefits from residential.",
                        "default": {
                            "useApifyProxy": true
                        }
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
