# SEC Filings Signals: Form D, 8-K, insider trades, 13F deltas (`veniara/sec-signals`) Actor

Unified, deduplicated SEC filing signals: Form D fundraises, classified 8-K events, Form 4 insider trades (buy/sell normalized) and 13F quarter-over-quarter deltas. Pay per event; reruns charge only for new events. Public-domain SEC data; not affiliated with the SEC.

- **URL**: https://apify.com/veniara/sec-signals.md
- **Developed by:** [Veniara](https://apify.com/veniara) (community)
- **Categories:** Lead generation, Developer tools, Automation
- **Stats:** 2 total users, 1 monthly users, 0.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.00 / 1,000 event record delivereds

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

### What does SEC Filings Signals do?

**SEC Filings Signals turns raw SEC filings into a clean, deduplicated stream of events you can act on** — Form D fundraises, classified 8-K events, Form 4 insider trades with buy/sell normalization, and 13F quarter-over-quarter position changes — all in **one unified JSON schema**. It reads only first-party SEC endpoints (full-text search, `data.sec.gov`, and the EDGAR archive), respects the SEC's published fair-access limits, and **charges per event, only for events that are new since your last run**.

Run it on a schedule on the Apify platform, pull results through the API, or pipe them into n8n, Make, Google Sheets, or your own webhook.

### Why use SEC Filings Signals?

- **One feed instead of four scrapers.** Form D, 8-K, Form 4 and 13F events share the same envelope: `eventType`, `accession`, `cik`, `issuerName`, `ticker`, `filedAt`, `payload`, `signal`, `sourceUrl`.
- **Signals, not just records.** 8-Ks are classified by item with a materiality score (bankruptcy, restatement, auditor change, change of control…). Form 4 trades are normalized into open-market buys vs. planned (10b5-1) sales, with cluster/CEO/director tags. 13F filings become *deltas* — new, added, trimmed, exited — with portfolio weight. Form D raises come with amount sold, exemption, industry and investor count.
- **Pay only for what's new.** With `onlyNew` (default on), the Actor remembers what it already delivered to you and charges only for new events on every rerun.
- **Privacy-conscious by default.** Person-level fields (insider and officer names) are off unless you turn on `includePersons`, and even then the Actor never outputs addresses or contact details.
- **Optional AI summary.** Turn on `enrich` to add a one-paragraph plain-English summary and materiality tags per event. You are charged for a summary **only when it is produced**; if the enrichment service is unavailable the event is still delivered and no summary charge is made.

### How to use SEC Filings Signals

1. Choose the **Signal type**: 8-K events, Form D fundraises, Form 4 insider trades, or 13F deltas.
2. Optionally set a **date range** (default: the last 3 days) and a **watchlist** of tickers or CIKs.
3. Optionally add a **full-text query** (e.g. `"going concern"`) to narrow 8-K or Form D results.
4. Set **Max events** to cap your spend for the run, then click **Start**.
5. Download the dataset (JSON, CSV, Excel, HTML) or connect an integration. Schedule the Actor daily to get a continuous feed.

### Input

| Field | Type | Default | Notes |
|---|---|---|---|
| `mode` | `8k` | `formD` | `form4` | `13f` | `8k` | Which filings to turn into events |
| `startDate`, `endDate` | `YYYY-MM-DD` | last 3 days | Filing date range |
| `ciks` | list | `[]` | Tickers or 10-digit CIKs to watch |
| `query` | string | — | EDGAR full-text search phrase |
| `maxEvents` | integer | `100` | Hard cap per run |
| `onlyNew` | boolean | `true` | Skip events already delivered in earlier runs |
| `includePersons` | boolean | `false` | Include insider/officer names, roles and SEC CIKs (never addresses/contacts) |
| `enrich` | boolean | `false` | Add AI summary + materiality (charged only on success) |

### Output

```json
{
  "eventType": "form4.trade",
  "accession": "0000123456-26-000077",
  "cik": "0000123456",
  "issuerName": "Example Robotics Corp",
  "ticker": "EXRB",
  "sic": "3569",
  "form": "4",
  "filedAt": "2026-08-21",
  "sourceUrl": "https://www.sec.gov/Archives/edgar/data/123456/000012345626000077/0000123456-26-000077-index.htm",
  "source": "U.S. Securities and Exchange Commission (public information)",
  "processedAt": "2026-08-22T14:40:00+00:00",
  "payload": {
    "transactions": [{"date": "2026-08-19", "code": "P", "label": "open-market purchase", "shares": 25000, "pricePerShare": 12.4, "value": 310000.0, "ownedAfter": 1250000}],
    "openMarketBuyValue": 310000.0,
    "aff10b5One": false
  },
  "signal": {"score": 0.73, "tags": ["open-market-buy", "ceo-buy", "director-buy"]},
  "summary": "The CEO bought 25,000 shares on the open market at $12.40 ..."
}
```

You can download the dataset in various formats such as JSON, HTML, CSV, or Excel.

#### Event types

| `eventType` | What's in `payload` | Deterministic? |
|---|---|---|
| `8k.item` | items with labels, headline, materiality score, tags | yes |
| `formD.raise` | amounts offered/sold/remaining, exemptions, industry, securities type, investors, first-sale date, amendment flag | yes |
| `form4.trade` | normalized transactions, open-market buy/sell totals, 10b5-1 flag, role tags, score | yes |
| `13f.delta` | kind (new/added/trimmed/exited), shares before/after, value, portfolio % | yes (needs a prior quarter; the first run seeds state) |
| `summary` (field) | plain-English summary, materiality, extra tags | AI, optional |

### How much does it cost?

Pricing is per event (see the **Pricing** tab): a small start fee per run, a per-event fee for each delivered record, an additional fee for classified 8-K and parsed Form D events, and a premium fee for each AI summary. With `onlyNew` you are never charged twice for the same event. Set `maxEvents` and your Apify maximum charge per run to cap spend precisely.

### Tips

- Schedule daily with `onlyNew: true` and a watchlist for a cheap, continuous feed.
- For 13F, run once to seed the prior quarter, then again after the next filing window (45 days after quarter end) to get deltas.
- Use `query` to find thematic 8-Ks fast (`"material weakness"`, `"data breach"`, `"going concern"`).
- Keep `includePersons` off unless you need names; it keeps your own data-handling obligations lighter.

### FAQ, disclaimers, and support

**Is this legal?** The data is U.S. government public information that "may be copied or further distributed by users of the web site without the SEC's permission" (sec.gov). The Actor declares a User-Agent as the SEC requires, stays under the SEC's 10-requests-per-second limit, uses no proxy rotation, and never scrapes HTML pages or paths the SEC disallows for robots.

**Affiliation.** This Actor is not affiliated with, endorsed by, or operated by the U.S. Securities and Exchange Commission. Filings can be amended or withdrawn; always verify against the source filing linked in `sourceUrl` before acting.

**Personal data.** Names of insiders and officers are public-record data filed with the SEC. The Actor outputs them only when `includePersons` is on, limited to name, role and SEC CIK. If you are a person named in a filing and want an event removed from a dataset we control, use the Issues tab.

**Limits.** The SEC rate limit is shared by all runs of this Actor; very large backfills are throttled deliberately. Use the SEC's bulk index files for multi-year history.

**Support.** Report problems or request a new signal type in the **Issues** tab — we aim to respond within 12 hours.

# Actor input Schema

## `mode` (type: `string`):

Which filings to turn into events.

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

Earliest filing date to include. Default: 3 days ago.

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

Latest filing date to include. Default: today.

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

Optional. Only filings by these issuers/filers. Accepts 10-digit CIKs or tickers (tickers resolved via SEC's public ticker map).

## `query` (type: `string`):

Optional EDGAR full-text search phrase to narrow 8-K / Form D results (e.g. "going concern").

## `maxEvents` (type: `integer`):

Stop after this many events have been emitted in this run.

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

Skip events already emitted by a previous run of this Actor in your account (state is kept in the Actor's key-value store). You are charged only for new events.

## `includePersons` (type: `boolean`):

Form 4 / Form D name natural persons (insiders, officers). Off = issuer-level only. On = name, role and SEC CIK only — never addresses or contact details.

## `enrich` (type: `boolean`):

Adds a one-paragraph plain-English summary and materiality tags. Charged only when the summary is actually produced; if the enrichment service is unavailable the event is still delivered without a summary and no summary charge is made.

## Actor input object example

```json
{
  "mode": "8k",
  "ciks": [],
  "maxEvents": 100,
  "onlyNew": true,
  "includePersons": false,
  "enrich": false
}
```

# Actor output Schema

## `events` (type: `string`):

All delivered event records: 8-K items, Form 4 trades, Form D raises, 13F baselines and deltas.

## `dataset` (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 = {};

// Run the Actor and wait for it to finish
const run = await client.actor("veniara/sec-signals").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 = {}

# Run the Actor and wait for it to finish
run = client.actor("veniara/sec-signals").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 '{}' |
apify call veniara/sec-signals --silent --output-dataset

```

## MCP server setup

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

```

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/VUxiBFGaZEaICmh1L/builds/y6tE519T5SZx5SDc5/openapi.json
