# SEC 8-K Filings API: Search by Item (5.02, 1.01, 4.02) (`conserving_celerytop/sec-8k-events-api`) Actor

Get SEC 8-K filings by item type: 5.02 officer changes, 1.01 material agreements, 4.02 restatements and more. Search all companies by date or name tickers and CIKs. One row per filing with item labels and links. $3.00 per 1,000 filings. Independent tool, not affiliated with the SEC.

- **URL**: https://apify.com/conserving_celerytop/sec-8k-events-api.md
- **Developed by:** [Don Mangu](https://apify.com/conserving_celerytop) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.10 / 1,000 filing events

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

Use this SEC 8-K filings API to find 8-K current reports by item type, for $3.00 per 1,000 filings. Ask for item 5.02 to see officer and director changes, 1.01 for material agreements, 4.02 for restatement warnings, 3.01 for delisting notices or 1.03 for bankruptcies. Search all companies in a date range, or read the 8-K history of single companies by ticker, CIK or name. Every row has the item codes, a plain-English label for each item and links to the filing on sec.gov.

You need no login, no API key and no proxy. The Actor reads public SEC EDGAR data. It is an unofficial tool built by an independent developer. It is not affiliated with, endorsed by or operated by the U.S. Securities and Exchange Commission.

### What this SEC 8-K filings API returns

One row is one 8-K filing (or one 8-K/A amendment, if you switch amendments on). The fields are:

- Company name, CIK and ticker of the filer.
- Form (8-K or 8-K/A), filing date, report date and acceptance time (acceptedAt).
- Items: the item codes the filing reports, such as 5.02 and 9.01.
- Item labels and item descriptions: a short plain-English label and the official Form 8-K heading for each item, in the same order as the codes.
- Matched items: the items you asked for that the filing reports.
- Accession number, a link to the primary document and a link to the filing index with all exhibits.

The Actor supports every item of the current Form 8-K. The official Form 8-K heading of each item is in the field itemDescriptions. Older filings can hold item numbers outside this list. The Actor returns them with the label "Item N".

| Item | Label in the output |
|---|---|
| 1.01 | Material agreement |
| 1.02 | Termination of material agreement |
| 1.03 | Bankruptcy or receivership |
| 1.04 | Mine safety |
| 1.05 | Cybersecurity incident |
| 2.01 | Acquisition or disposition completed |
| 2.02 | Results of operations |
| 2.03 | Direct financial obligation |
| 2.04 | Obligation accelerated |
| 2.05 | Exit or disposal costs |
| 2.06 | Material impairment |
| 3.01 | Delisting notice |
| 3.02 | Unregistered equity sale |
| 3.03 | Change to security holder rights |
| 4.01 | Auditor change |
| 4.02 | Non-reliance or restatement |
| 5.01 | Change in control |
| 5.02 | Officer or director departure or appointment |
| 5.03 | Charter or bylaw change |
| 5.04 | Benefit plan trading suspension |
| 5.05 | Code of ethics change |
| 5.06 | Shell company status change |
| 5.07 | Shareholder vote results |
| 5.08 | Shareholder director nominations |
| 6.01 | ABS informational material |
| 6.02 | Servicer or trustee change |
| 6.03 | Credit enhancement change |
| 6.04 | Missed distribution |
| 6.05 | Securities Act updating disclosure |
| 6.06 | Static pool |
| 6.10 | Alternative ABS filing |
| 7.01 | Regulation FD disclosure |
| 8.01 | Other events |
| 9.01 | Financial statements and exhibits |

#### Two modes

**All companies.** The Actor reads the SEC full-text search index for every 8-K filed in your date range, newest first, and keeps the filings that report your items. Use it for questions such as "which companies announced a CEO or CFO change this week" or "who reported a non-reliance on past financials this quarter". The range can reach back to 2001 and covers up to 366 days per run.

**Companies I name.** The Actor reads the SEC submissions list of each company you enter and returns its 8-K filings, with the acceptance time of each filing. Enter tickers such as AAPL, CIK numbers such as 0000320193 or names such as Microsoft. A name that matches several companies returns up to three of them. The list of resolved companies is in the STATS record of the run.

#### How it differs from our SEC EDGAR Filings API

[SEC EDGAR Filings API](https://apify.com/conserving_celerytop/sec-edgar-filings-api) returns the filings of any form type for one ticker or CIK and shows the raw 8-K item codes. This Actor is built for 8-K items: it searches all companies by item and date, adds the label and the official heading for each item, and marks which of your items a filing matched. Use the other Actor when you need 10-K, 10-Q or Form 4 lists for a known company. Use this one when the question starts from an event type.

### How to get SEC 8-K filings by item, step by step

1. Open the Actor and go to Input.
2. Pick Mode. Use "All companies" to search the market. Use "Companies I name" and fill Companies to read single companies. A filled Companies list always selects the companies mode.
3. Pick one or more Item types, such as 5.02. Leave the field empty to get filings with every item.
4. Set the period with Last days (for example 7), or enter Start date and End date as year-month-day.
5. Switch on Include amendments (8-K/A) if you want amendment filings too. Switch on Add acceptance time if you need acceptedAt in the all companies mode.
6. Set Max results. Start small, for example 10.
7. Start the run. The first rows appear in the Output tab within seconds. Download them as JSON, CSV or Excel, or read them through the API.
8. Schedule the Actor to run every morning with Last days set to 2 for a daily list of new events.

How long a run takes depends on how rare the item is. The Actor reads every 8-K of the range and keeps the matches, because the SEC search does not filter reliably by item (see the FAQ). Recorded runs against the live SEC on 11.10.2026: item 5.02 over 7 days needed 1 request for the first 10 rows. Item 5.02 over 30 days read 4,019 filings in 43 requests (12 seconds) and returned 794 rows. Item 4.02 over 90 days read 15,320 filings in 159 requests (46 seconds) and returned 24 rows. The Actor sends at most 4 requests per second.

### Run it every day

Switch on **Only new since the last run** to get each filing once. The Actor keeps a list of the accession numbers it already delivered, so a daily schedule returns only filings that appeared since the last run.

1. Open the Actor, fill the input (for example item 5.02) and switch on **Only new since the last run**. Enter a **Monitor name**, such as `officer-changes`.
2. Click **Save as a new task** and give the task a name.
3. In the Apify Console go to **Schedules**, click **Create new**, pick your task and enter a cron expression for once a day, for example `0 8 * * *` for 08:00.
4. Each scheduled run delivers only the filings it has not delivered before. The first run delivers everything in the date range and becomes the baseline.

The memory lives in your own Apify account, in a key-value store named `sec8k-monitor-<monitorName>` (for example `sec8k-monitor-officer-changes`). It holds accession numbers only, no filing content. Use one Monitor name per saved task, so two tasks never share their memory. The memory is separate for each set of Item types and Include amendments. The date range and the company list do not change it, so a moving date range or a longer company list never delivers a known filing again.

A filing is charged when it is saved to the dataset. A filing the Actor skips as already delivered is not charged. A filing that Max results or your maximum charge cuts off is not remembered, so the next run delivers it.

Worked cost example on the Free plan, with the price of $0.003 per filing and $0.00005 per run start from the pricing section. Assume 15 new filings appear each day. A daily run with Last days set to 2 and Only new switched off returns 30 filings, because each filing sits in two daily windows: 30 x $0.003 + $0.00005 = $0.09005 per run. The same daily run with Only new switched on returns the 15 new filings: 15 x $0.003 + $0.00005 = $0.04505 per run. Over 30 days that is 30 x $0.04505 = $1.3515.

### Bulk lists

In the companies mode you can give the list of companies as a file or as an Apify Dataset instead of typing it, or together with the typed list.

- **Dataset with the list**: pick an Apify Dataset. Enter the field that holds the ticker, CIK or company name in **Field in the dataset**. Leave the field empty to use the first text field.
- **List file URL**: the web address of a `.txt` file (one entry per line), a `.csv` file (the first column is used) or a `.json` file (an array). A header row is skipped. The file can be up to 10 MB.

The typed list, the Dataset and the file are merged into one list. Duplicate entries are removed. A filled list selects the companies mode. The limit of 100 companies applies to the merged list: a longer list stops the run before any request, with a message, and nothing is charged. The price does not change: you pay per filing returned, as before.

### SEC 8-K API pricing

The price is $0.003 per filing returned ($3.00 per 1,000 filings) on the Free plan, plus $0.00005 for each run start. Paid Apify plans pay less per filing: $0.0027 (Bronze), $0.0024 (Silver) and $0.0021 (Gold), which is $2.70, $2.40 and $2.10 per 1,000. Only a filing saved to the dataset is charged. A run that finds nothing, or that stops on a SEC error, charges the start fee and no filing.

Worked example on the Free plan: a daily run for item 5.02 returns 15 filings. Cost is 15 x $0.003 + $0.00005 = $0.04505 per run, and 30 daily runs cost 30 x $0.04505 = $1.3515 per month. A one-off pull of 100 filings costs 100 x $0.003 + $0.00005 = $0.30005. Set Max results or the maximum charge of the run to cap the cost: the Actor stops when the limit is reached.

### Input example

This is the input of the first recorded run below. It reads item 5.02 over the last 7 days and stops after 10 filings.

```json
{
  "mode": "market",
  "items": ["5.02"],
  "lastDays": 7,
  "maxResults": 10
}
```

To read single companies instead, set the mode and list them. This is the input of the second recorded run.

```json
{
  "mode": "companies",
  "companies": ["AAPL"],
  "items": ["5.02"],
  "lastDays": 365,
  "maxResults": 20
}
```

### Output example

Both rows come from real runs of this Actor against the live SEC on 11.10.2026. The first run (all companies, 1 request, under 1 second, 10 rows) returned this row as its second row. In the all companies mode acceptedAt is null unless you switch on Add acceptance time.

```json
{
  "companyName": "Victoria's Secret & Co.",
  "cik": "0001856437",
  "ticker": "VSXY",
  "form": "8-K",
  "filingDate": "2026-10-09",
  "acceptedAt": null,
  "reportDate": "2026-10-07",
  "items": [
    "5.02",
    "9.01"
  ],
  "itemLabels": [
    "Officer or director departure or appointment",
    "Financial statements and exhibits"
  ],
  "itemDescriptions": [
    "Departure of Directors or Certain Officers; Election of Directors; Appointment of Certain Officers; Compensatory Arrangements of Certain Officers",
    "Financial Statements and Exhibits"
  ],
  "matchedItems": [
    "5.02"
  ],
  "accessionNumber": "0001856437-26-000023",
  "primaryDocumentUrl": "https://www.sec.gov/Archives/edgar/data/1856437/000185643726000023/vsco-20261007.htm",
  "filingIndexUrl": "https://www.sec.gov/Archives/edgar/data/1856437/000185643726000023/0001856437-26-000023-index.htm",
  "source": "full-text-search",
  "retrievedAt": "2026-10-11T08:45:33.854Z"
}
```

The second run (companies, AAPL, 2 requests, 3 rows) returned this row as its first row. The companies mode always fills acceptedAt.

```json
{
  "companyName": "Apple Inc.",
  "cik": "0000320193",
  "ticker": "AAPL",
  "form": "8-K",
  "filingDate": "2026-04-20",
  "acceptedAt": "2026-04-21T01:29:51.000Z",
  "reportDate": "2026-04-17",
  "items": [
    "5.02"
  ],
  "itemLabels": [
    "Officer or director departure or appointment"
  ],
  "itemDescriptions": [
    "Departure of Directors or Certain Officers; Election of Directors; Appointment of Certain Officers; Compensatory Arrangements of Certain Officers"
  ],
  "matchedItems": [
    "5.02"
  ],
  "accessionNumber": "0001140361-26-015711",
  "primaryDocumentUrl": "https://www.sec.gov/Archives/edgar/data/320193/000114036126015711/ef20071035_8k.htm",
  "filingIndexUrl": "https://www.sec.gov/Archives/edgar/data/320193/000114036126015711/0001140361-26-015711-index.htm",
  "source": "submissions-api",
  "retrievedAt": "2026-10-11T08:51:37.289Z"
}
```

Each run also writes a STATS record in the key-value store with the number of requests, retries, filings scanned, the User-Agent sent and the duration.

### Related Actors

- [SEC EDGAR Filings API](https://apify.com/conserving_celerytop/sec-edgar-filings-api): filings of any form type for one ticker or CIK, with 8-K item codes.
- [SEC Company Financials API](https://apify.com/conserving_celerytop/sec-company-financials-api): revenue, net income, EPS and balance sheet items by ticker or CIK from XBRL.
- [Startup Funding Rounds Tracker](https://apify.com/conserving_celerytop/form-d-funding-rounds): Form D raises, one row per filing.
- [13F Holdings API](https://apify.com/conserving_celerytop/13f-holdings-api): holdings of institutional managers from 13F filings.

### FAQ

**Is it legal to use SEC EDGAR data this way?** SEC states on its webmaster page (https://www.sec.gov/about/webmaster-frequently-asked-questions): "All Government-created content on sec.gov and EDGAR public filing content are free to access and reuse." and "We allow scripted access to sec.gov content". The access policy (https://www.sec.gov/search-filings/edgar-search-assistance/accessing-edgar-data) says: "Current max request rate: 10 requests/second." and asks you to "declare your user agent in request headers". It also says: "The SEC does not allow botnets or automated tools to crawl the site." This Actor does not crawl. It sends a few targeted requests to the documented JSON API and to the search backend of EDGAR full-text search, at most 4 per second, with a declared User-Agent. This is not legal advice. Check your own use of the data.

**What User-Agent does the Actor send?** The default is "Don Mangu apify-actor contact via https://apify.com/conserving_celerytop". SEC accepted it in tests. You can enter your own text in User-Agent for requests, for example your company name and a contact URL.

**Why does the Actor read all filings of the range instead of asking SEC for the item?** The SEC search accepts an items parameter, but its cache ignores that parameter: two requests that differ only in the item can return the same answer. On 11.10.2026 a request for item 4.02 returned the answer cached for item 5.02. The Actor does not rely on the parameter and checks the item codes of every filing itself.

**Does a row hold the text of the filing?** No. A row holds the item codes, labels and links. Open primaryDocumentUrl for the text. Filing text can name people, so the Actor does not copy it.

**How fresh is the data?** The SEC search index lists filings after SEC accepts them, normally within minutes to a few hours. The all companies mode may show the newest filings of the current day late. The companies mode reads the submissions API, which is usually current within minutes.

**Why is the date range limited to 366 days in the all companies mode?** One run reads every 8-K of the range. A full year is about 35,000 filings and 350 requests, which takes about 3 minutes. For longer histories of one company use the companies mode (up to 3,660 days).

**A companies run returned no filings.** The input form prefills Last days with 7, so a quiet company can return nothing. Clear the field to read the last 365 days, or set Start date and End date.

**Some rows have no ticker.** SEC lists no ticker for many small filers and for companies that are no longer listed. The field is null then. Switch on Add acceptance time to fill a missing ticker from the submissions list when it has one.

**A company name found nothing.** The name search uses the SEC list of current tickers. Delisted companies are not in it. Enter their CIK number instead.

**The run stopped with a message about SEC.** SEC answers 403 when a request has no clear User-Agent or the rate is too high, and 429 when asked to wait. The Actor retries 429 up to three times, honors the Retry-After header and stops on 403 without trying to get around it. Nothing is charged for a run that returns no filing, apart from the start fee. Run again later or enter your own User-Agent.

This is an unofficial, independent tool. It is not affiliated with, endorsed by or operated by the U.S. Securities and Exchange Commission or EDGAR.

# Actor input Schema

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

Pick all companies to search every 8-K filed in the date range. Pick companies to read the 8-K filings of the tickers, CIK numbers or names you list. A filled Companies list selects the companies mode.

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

Pick the 8-K items to return, such as 5.02 for officer and director changes. A filing matches when it reports any picked item. Leave the field empty to return filings with every item.

## `companies` (type: `array`):

Enter one ticker, CIK number or company name per line, such as AAPL, 0000320193 or Microsoft. Used in the companies mode.

## `listDatasetId` (type: `string`):

Pick an Apify Dataset that holds your list, one entry per item. It is added to the entries typed above.

## `listDatasetField` (type: `string`):

Name of the dataset field that holds the entry. Leave empty to use the first text field it finds.

## `listFileUrl` (type: `string`):

Web address of a .txt, .csv or .json file with one entry per line. A header row is skipped. Up to 10 MB.

## `lastDays` (type: `integer`):

Return filings from the last N days up to the end date. The default is 7 days for all companies and 365 days for named companies. Start date, when set, replaces this field.

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

Enter the first filing date as year-month-day, such as 2026-10-01. The earliest date is 2001-01-01. The all companies mode covers up to 366 days.

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

Enter the last filing date as year-month-day, such as 2026-10-09. The default is today.

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

Return only items that this monitor has not delivered before. The first run returns everything and becomes the baseline. Use it with a daily schedule.

## `monitorName` (type: `string`):

Names the memory of this monitor. Use one name per saved task, so two tasks never share their memory.

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

Add 8-K/A amendment filings to the results. The default returns original 8-K filings only.

## `addAcceptedTime` (type: `boolean`):

Fill the field acceptedAt for every filing in the all companies mode. This costs one extra SEC request per company, so the run takes longer. The companies mode always fills acceptedAt.

## `maxResults` (type: `integer`):

Return at most this many filings in total. Each filing returned is one charged result.

## `userAgent` (type: `string`):

SEC asks every automated client to send a User-Agent with a tool name and contact data. Enter your own company or tool name plus a contact URL or email if you want SEC to see it. The default names the developer public Apify profile.

## Actor input object example

```json
{
  "mode": "market",
  "items": [
    "5.02"
  ],
  "lastDays": 7,
  "onlyNew": false,
  "monitorName": "default",
  "includeAmendments": false,
  "addAcceptedTime": false,
  "maxResults": 10,
  "userAgent": "Don Mangu apify-actor contact via https://apify.com/conserving_celerytop"
}
```

# Actor output Schema

## `filings` (type: `string`):

No description

## `stats` (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 = {
    "mode": "market",
    "items": [
        "5.02"
    ],
    "lastDays": 7,
    "maxResults": 10
};

// Run the Actor and wait for it to finish
const run = await client.actor("conserving_celerytop/sec-8k-events-api").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 = {
    "mode": "market",
    "items": ["5.02"],
    "lastDays": 7,
    "maxResults": 10,
}

# Run the Actor and wait for it to finish
run = client.actor("conserving_celerytop/sec-8k-events-api").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 '{
  "mode": "market",
  "items": [
    "5.02"
  ],
  "lastDays": 7,
  "maxResults": 10
}' |
apify call conserving_celerytop/sec-8k-events-api --silent --output-dataset

```

## MCP server setup

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

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/Enn0pJCd1hQ2qtIfO/builds/tSYWaGiENBfQg38Ox/openapi.json
