# SEC 8-K Scraper: Executive Changes, M\&A, Cyber & Restatements (`upward_enterprises/sec-8k-event-radar`) Actor

Every SEC 8-K that reports the items you choose (5.02 executive changes, 1.05 cyber incidents, 4.02 restatements, 2.01 acquisitions, 1.01 material agreements), market-wide or for a ticker watchlist, with item text, exhibits, ticker, and links. Public EDGAR data, no API key. From $2.50 per 1,000.

- **URL**: https://apify.com/upward_enterprises/sec-8k-event-radar.md
- **Developed by:** [Upward Enterprises](https://apify.com/upward_enterprises) (community)
- **Categories:** Lead generation, Automation, Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.25 / 1,000 8-k filings

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

## SEC 8-K Scraper: Executive Changes, M\&A, Cyber & Restatements

**$2 per 1,000 filings with item text ($1.25 on the Gold tier), $1 per 1,000 metadata-only rows, no start fee, no API key. On a schedule, only filings you have not received before are billed.**

Every public company must file a Form 8-K within four business days of a material event, and the item number on the filing says which kind: 5.02 is an executive or director change, 1.05 a cybersecurity incident, 4.02 a restatement, 2.01 a completed acquisition, 1.01 a material agreement, 1.03 a bankruptcy. This Actor turns EDGAR into an event feed: pick the items you care about, and get every 8-K that reports them, market-wide or for a watchlist of tickers, with the text of the matched items, a one-sentence headline, the exhibits (press release, agreement, letter), company name, ticker, SIC code, state, and links.

Built on EDGAR full-text search and the filing archive, both public and free. The Actor declares itself to the SEC as its fair-access policy asks and never exceeds five requests a second.

### What you get

**Filing rows** (`kind: "filing"`), one per 8-K, newest first:

```json
{
  "kind": "filing",
  "accessionNumber": "0000056679-26-000033",
  "form": "8-K",
  "isAmendment": false,
  "filedDate": "2026-09-09",
  "eventDate": "2026-09-08",
  "companyName": "Example Corp",
  "cik": 56679,
  "ticker": "EXMP",
  "tickers": ["EXMP"],
  "coRegistrants": [],
  "sic": "7361",
  "state": "CA",
  "location": "Los Angeles, CA",
  "incorporatedIn": "DE",
  "fileNumbers": ["001-14505"],
  "items": ["5.02", "9.01"],
  "itemLabels": ["Departure of Directors or Certain Officers; ...", "Financial Statements and Exhibits"],
  "matchedItems": ["5.02"],
  "matchedItemLabels": ["Executive or director change"],
  "headline": "On September 8, 2026, the Board of Directors of Example Corp appointed Jane Q. Public as Chief Financial Officer, effective October 1, 2026.",
  "itemText": { "5.02": "Item 5.02 Departure of Directors or Certain Officers; ... On September 8, 2026, the Board ..." },
  "itemTextTruncated": false,
  "exhibits": [
    { "file": "ex99-1.htm", "url": "https://www.sec.gov/Archives/edgar/data/56679/000005667926000033/ex99-1.htm", "exhibit": "99.1", "label": "99.1 Press release dated September 8, 2026" }
  ],
  "primaryDocumentUrl": "https://www.sec.gov/Archives/edgar/data/56679/000005667926000033/exmp-20260908.htm",
  "indexUrl": "https://www.sec.gov/Archives/edgar/data/56679/000005667926000033/0000056679-26-000033-index.htm",
  "companyFilingsUrl": "https://www.sec.gov/cgi-bin/browse-edgar?action=getcompany&CIK=0000056679&type=8-K&dateb=&owner=include&count=40",
  "detailError": null,
  "billedAs": "filing",
  "fetchedAt": "2026-09-10T12:00:00.000Z"
}
```

`items` lists every item the filing reports (from the SEC's own index, not guessed from text); `matchedItems` is the subset you asked for. `itemText` holds the text of each matched item, starting with its heading and ending before the next item or the signature block, cut at "Max characters per item". `headline` is the first sentence of the first matched item. `exhibits` come from the filing's own exhibit table, so the press release (99.1), the agreement (10.1, 2.1) or the auditor letter (16.1) is one click away. `eventDate` is the "date of earliest event reported" on the cover.

**Metadata-only rows** carry the same fields without `itemText`, `headline` and `exhibits`, and are billed at the lower rate: when "Include item text and exhibits" is off, or when the SEC document could not be read, in which case `detailError` says why and `billedAs` is `filing-summary`.

**One summary row** (`kind: "summary"`, free) reports the date window, how many filings were in it, how many were skipped as already delivered, as amendments, or by your filters, how many EDGAR requests were made, whether the SEC rate limit was hit, and whether the run stopped at your spending cap, so an empty result explains itself.

Filter on `kind` to keep one row type; the Console view **Filings** shows the useful columns.

### Input

| Field | What it does |
|---|---|
| 8-K items to watch | The item codes that count as an event; a filing is delivered when it reports at least one. Empty means every 8-K in the window. |
| Filed within (days) | Look-back in calendar days before today (US Eastern), plus today. Default 2, so a Sunday run still sees Friday. |
| Watchlist: tickers / CIKs | Restrict to these companies. Tickers are resolved to CIK numbers through the SEC's public ticker file; the search itself is then restricted, so long look-backs for a watchlist stay fast. |
| Keywords (all must appear) | Phrases the filing text must contain, e.g. "chief executive officer" or "ransomware", searched by EDGAR full-text search. |
| SIC codes, Business states | Industry code prefixes and two-letter states of the filer. |
| Include amendments (8-K/A) | Default off. Amendments usually add exhibits to an event already reported. |
| Include item text and exhibits | Default on. Off gives metadata-only rows at the lower rate and makes no requests to the filing archive. |
| Max characters per item | Default 6,000. Longer sections are cut and flagged. |
| Only new since last run | Default on. Remembers what each snapshot name has delivered (90 days) and skips it next time. |
| Snapshot name | Which memory "only new" uses; kept on your account as a key-value store named `sec-8k-event-radar-<name>`. Give each schedule its own name. |
| Max filings per run | Default 500, newest first. |
| Proxy | Normally off. Turn on if the summary row reports SEC rate limiting. |

Examples:

```json
{ "items": ["5.02"], "keywords": ["chief executive officer"], "filedWithinDays": 1 }
```

Every CEO-related executive change filed yesterday or today, with the 5.02 text and the press release link.

```json
{ "items": ["1.05", "4.02", "4.01", "3.01", "1.03"], "filedWithinDays": 7 }
```

This week's bad news: cyber incidents, restatements, auditor changes, delisting notices, bankruptcies.

```json
{ "tickers": ["AAPL", "MSFT", "NVDA"], "items": [], "filedWithinDays": 90, "includeItemText": false }
```

Every 8-K from three companies in the last quarter, metadata only.

### Pricing

| Event | Free | Bronze | Silver | Gold and above |
|---|---|---|---|---|
| 8-K filing (with item text and exhibits) | $0.002 | $0.0018 | $0.0015 | $0.00125 |
| 8-K filing summary (metadata only) | $0.001 | $0.0009 | $0.00075 | $0.0006 |

EDGAR receives roughly 400 to 600 8-Ks on a business day and about 2,600 Item 5.02 filings a quarter. A daily schedule for executive changes, cyber incidents, restatements, acquisitions, material agreements and bankruptcies delivers about 60 to 90 filings a business day, around $0.15 a day or $3.50 a month with item text. The whole market with every item is about $1 a business day. The summary row is free, and so is an empty run. Set a maximum total charge on the run to cap spend; the Actor stops cleanly when it is reached and never delivers rows it could not bill.

### Use cases

- **Sales and recruiting triggers**: a new CFO, CIO or CEO (5.02) is the moment to reach out; pipe rows into your CRM with the press release attached.
- **Risk and compliance**: cyber incidents (1.05), restatements (4.02), auditor changes (4.01), delisting notices (3.01), and bankruptcies (1.03) across every registrant, or for your portfolio.
- **M\&A and deal flow**: completed acquisitions (2.01), material agreements (1.01) and terminations (1.02), new debt (2.03), changes in control (5.01).
- **Investor relations and journalists**: a watchlist of tickers with every item, or the whole market for one item, delivered to Slack, Sheets, or a database on a schedule.
- **AI agents**: ask "which companies announced a CFO departure this week" through the Apify MCP server and get the item text, not a PDF.

### Data source and limits

- Filings come from EDGAR full-text search (`efts.sec.gov`), which indexes filings within minutes of acceptance and carries each 8-K's item codes, filer, ticker, SIC and state. Item text and exhibits come from the filing's primary document in the EDGAR archive. Both are US government public-domain records.
- The SEC asks automated tools to declare themselves and stay under 10 requests a second; the Actor does both and retries with backoff if the SEC throttles. If the platform's shared address is being throttled, rows are still delivered as metadata at the lower rate with `detailError` set, the summary row says `rateLimited: true`, and you can turn the proxy option on.
- Filing dates follow EDGAR's US Eastern calendar. Filings accepted after 5:30 pm Eastern are dated the next business day.
- Full-text search returns at most 10,000 documents per query; the summary row's `searchCapped` says if a window was too wide. One day is never close to the cap.
- Item text is extracted from the filing's own item headings. Filings with unusual formatting can come back without a section; those rows are billed as summaries and say so in `detailError`.
- Rows name officers and directors only as the filing itself discloses them; no personal data is added from any other source.
- At the end of each run the Actor reports run counts (rows delivered, events charged, duration, status) to its maintainer's dashboard. It never sends your input, your results, or anything about your account.

### Enjoying this Actor?

If it saved you time, please leave a review on the [Apify Store page](https://apify.com/upward_enterprises/sec-8k-event-radar) — it helps other people find it. Bug reports and feature requests are welcome on the Issues tab.

### About

Built and maintained by **Upward Enterprises · AI & API Services** (Iowa, USA). Public-data tools for people and AI agents, with pay-per-record pricing and no keys to manage.

### Changelog

- **0.1** (2026-09-10): first release.

# Actor input Schema

## `items` (type: `array`):

Which 8-K items count as an event. A filing is delivered when it reports at least one of them; the row lists every item the filing reports. Leave empty to get every 8-K filed in the window.

## `filedWithinDays` (type: `integer`):

How far back to look, in calendar days before today (US Eastern), plus today. 0 means today only; 2 (the default) covers today and the two days before it, so a Sunday run still sees Friday's filings. EDGAR accepts filings on business days only.

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

Only filings by these companies, by stock ticker (e.g. AAPL, MSFT). Tickers are resolved to SEC CIK numbers through the SEC's public ticker file. Leave empty for the whole market.

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

Only filings by these SEC Central Index Key numbers (e.g. 320193). Combined with any tickers above. Leave empty for the whole market.

## `keywords` (type: `array`):

Phrases that must all appear somewhere in the filing text, e.g. "chief executive officer" or "ransomware". Searched by EDGAR full-text search, case-insensitive. Leave empty to match on items alone.

## `sicCodes` (type: `array`):

Standard Industrial Classification codes or prefixes for the filer, e.g. 7372 (software) or 28 (chemicals and pharmaceuticals). Leave empty for any industry.

## `states` (type: `array`):

Two-letter US state codes of the filer's business address, e.g. CA, TX, IA. Leave empty for anywhere.

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

Off (default): only original 8-K filings. On: also amended filings, which usually add exhibits or financial statements to an event already reported.

## `includeItemText` (type: `boolean`):

On (default): fetch each filing's primary document and add the text of the matched items, a one-sentence headline, and the list of exhibits with links. Off: metadata only (items, company, ticker, dates, links), billed at the lower rate.

## `maxItemTextChars` (type: `integer`):

Longest text kept for one item section. Longer sections are cut and marked as truncated.

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

On (default): remember which filings each snapshot name has delivered (90 days) and skip them next time, so a schedule never bills the same filing twice. Off: deliver everything in the window every run.

## `snapshotName` (type: `string`):

Which memory "only new" uses. Kept on your account as a key-value store named sec-8k-event-radar-<name>. Give each schedule its own name.

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

Upper limit on delivered filings, newest first. The summary row says whether the limit cut the results.

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

Normally not needed: EDGAR is a public API that asks only for a declared User-Agent and at most 10 requests a second. Turn a proxy on if the summary row reports SEC rate limiting from the platform's shared address.

## Actor input object example

```json
{
  "items": [
    "5.02",
    "1.05"
  ],
  "filedWithinDays": 2,
  "tickers": [],
  "ciks": [],
  "keywords": [],
  "sicCodes": [],
  "states": [],
  "includeAmendments": false,
  "includeItemText": true,
  "maxItemTextChars": 6000,
  "onlyNew": true,
  "snapshotName": "default",
  "maxItems": 50,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `all` (type: `string`):

No description

## `filingColumns` (type: `string`):

No description

## `csv` (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 = {
    "items": [
        "5.02",
        "1.05",
        "4.02",
        "2.01",
        "1.01",
        "1.03"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("upward_enterprises/sec-8k-event-radar").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 = { "items": [
        "5.02",
        "1.05",
        "4.02",
        "2.01",
        "1.01",
        "1.03",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("upward_enterprises/sec-8k-event-radar").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 '{
  "items": [
    "5.02",
    "1.05",
    "4.02",
    "2.01",
    "1.01",
    "1.03"
  ]
}' |
apify call upward_enterprises/sec-8k-event-radar --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,upward_enterprises/sec-8k-event-radar"
        }
    }
}
```

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/xJPaKDnKWxJ2S9XRz/builds/c662NXYMszq0ceHtP/openapi.json
