# SEC 8-K Filings Scraper: Events and Press Releases (`parselab/sec-8k-events-scraper`) Actor

Track SEC 8-K filings by ticker, company name or across the whole market. Get every item with its text and category, the press release headline and earnings figures, executive change details, filing time and a risk score. Filter by event type, item code or industry. Export to CSV or Excel.

- **URL**: https://apify.com/parselab/sec-8k-events-scraper.md
- **Developed by:** [ParseLab](https://apify.com/parselab) (community)
- **Categories:** Business, News
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $19.50 / 1,000 results

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 Filings Scraper: Events and Press Releases

This SEC 8-K scraper reads the current reports that public companies file when something important happens: earnings, a new CEO or CFO, a big deal, a cyber attack, a bankruptcy or a notice that the stock may be delisted. Follow a list of tickers or company names, or leave the company empty to scan every 8-K filed in a date range. Each filing comes back as one clean row.

A row carries much more than the filing link. You get every item with its number, title and category, the written text of each item, the headline and text of the attached press release, the main numbers of an earnings release, a summary of executive changes with the officer titles involved, the exact time the filing was accepted and whether that was before the open, during trading or after the close, and a risk score that adds up warning signs such as restatements, delisting notices and debt triggers.

Traders, analysts, journalists, compliance teams, recruiters and newsletter writers use it to react to company events the day they happen.

### What can you do with this 8-K scraper?

- Get every 8-K a company filed in the last year with the text of each item
- Find all executive departures filed this week, with the officers named and the titles involved
- Watch earnings releases across the market and read the revenue, earnings per share and outlook lines
- Catch cybersecurity incident disclosures (item 1.05) as soon as they appear
- Spot restatements, auditor changes and delisting notices that often come before bigger trouble
- Filter by industry code to follow only software, biotech or banks
- See which filings arrived after the market closed
- Get only the filings you have not seen before for a daily alert
- Rank companies by a risk score built from their recent filings
- Export 8-K data to CSV or Excel, or send it to Google Sheets, Slack or your own tools

### What data can you extract from 8-K filings?

| Mode | One row is | Highlights |
|---|---|---|
| 8-K filings | One filing | Company, ticker, exchange, form, filing date, accepted time in UTC and New York time, before open, during hours and after close flags, event date and days from event to filing, item numbers with title, category and text, category list, ready-made flags (earnings, executive change, material agreement, acquisition, cybersecurity incident, bankruptcy, restatement, auditor change, delisting notice, impairment, restructuring, change of control, debt event, equity issuance), risk items, risk score and level, industry code and name, state of incorporation, exhibits with links, press release headline and text, earnings highlights, executive change summary, cybersecurity summary, filing link |
| Company digest | One company | Number of filings in the period, first and last filing date, filings per month, count of each item, categories, earnings reports, executive changes, material agreements, risk signals written in words, risk score and level |

### How to scrape SEC 8-K filings

1. Choose **8-K filings** or **Company digest**.
2. Enter tickers, company names or CIK numbers. Leave them empty to scan the whole market.
3. Pick event categories or exact item codes, for example 5.02 for executive changes.
4. Set the filing dates. The default is the last 5 days, or the last 365 days when you choose companies.
5. Set **Max Items** and click **Start**.
6. Export the dataset as CSV, Excel or from the Apify console.

### Input example

```json
{
  "mode": "events",
  "categories": ["Executive changes", "Cybersecurity"],
  "dateFrom": "2026-09-28",
  "dateTo": "2026-10-02",
  "textLimit": 800,
  "maxItems": 100
}
```

### Filing output example

```json
{
  "ticker": "NVDA",
  "exchange": "Nasdaq",
  "companyName": "NVIDIA CORP",
  "form": "8-K",
  "filingDate": "2026-08-26",
  "acceptedAt": "2026-08-26T20:21:19.000Z",
  "acceptedAtEastern": "2026-08-26 16:21",
  "filedAfterClose": true,
  "eventDate": "2026-08-26",
  "daysFromEventToFiling": 0,
  "itemCodes": ["2.02", "9.01"],
  "categories": ["Earnings"],
  "isEarnings": true,
  "riskScore": 0,
  "riskLevel": "low",
  "sic": "3674",
  "sicDescription": "Semiconductors & Related Devices",
  "stateOfIncorporation": "DE",
  "items": [
    { "code": "2.02", "title": "Results of Operations and Financial Condition", "category": "Earnings", "text": "On August 26, 2026, NVIDIA Corporation issued a press release announcing its results for the quarter ended July 26, 2026..." }
  ],
  "pressReleaseHeadline": "NVIDIA Announces Financial Results for Second Quarter Fiscal 2027",
  "earningsHighlights": [
    { "topic": "revenue", "text": "Revenue of $96.2 billion, up 106% from a year ago" },
    { "topic": "earnings per share", "text": "GAAP and non-GAAP earnings per diluted share were $2.46 and $2.22, respectively." },
    { "topic": "outlook", "text": "Revenue is expected to be $108.0 billion, plus or minus 2%." }
  ],
  "exhibits": [
    { "type": "EX-99.1", "url": "https://www.sec.gov/Archives/edgar/data/1045810/000104581026000073/q2fy27pr.htm" }
  ],
  "filingUrl": "https://www.sec.gov/Archives/edgar/data/1045810/000104581026000073/0001045810-26-000073-index.htm"
}
```

### Executive change example

```json
{
  "ticker": "ACIC",
  "itemCodes": ["5.02"],
  "isExecutiveChange": true,
  "executiveChange": {
    "departures": true,
    "appointments": false,
    "compensationTerms": false,
    "rolesMentioned": ["COO"],
    "titlesMentioned": ["Chief Operating Officer", "Chief Information Officer"],
    "keySentences": ["Christopher Griffith has resigned from the position of Chief Operating Officer and Chief Information Officer of the Company effective October 1, 2026, to pursue another opportunity."]
  }
}
```

### Company digest example

```json
{
  "ticker": "PUSA",
  "companyName": "Aureus Greenway Holdings Inc",
  "filingCount": 1,
  "itemCounts": { "4.01": 1, "5.02": 1, "9.01": 1 },
  "riskSignals": ["Change of auditor", "Auditor change together with executive change"],
  "riskScore": 40,
  "riskLevel": "high"
}
```

### How much does it cost to scrape 8-K filings?

You pay per result: $26 per 1,000 rows plus a tiny start fee. The free plan returns up to 10 rows per run. A company digest is one row per company, so following a watchlist of 100 companies costs a few cents a day.

### Tips for better results

- For a daily alert, schedule the Actor every morning, choose the categories you care about and turn on the option to return only filings not returned before.
- The risk score is a screening aid. It adds weights for items such as bankruptcy, restatement, delisting notices, debt triggers and auditor changes, plus a bonus when a CEO or CFO leaves. A high score means look closer, not sell.
- Turn off the item text and the press release when you only need the item numbers. Runs are faster and the dataset is smaller.
- Scanning the whole market for many days reads every 8-K of those days. Raise the limit on filings to scan for long ranges, or pick companies instead.
- The earnings highlights pick one sentence per topic from the press release. Companies write their releases differently, so a topic can be missing.
- Executive change details are read from the written text of item 5.02. Check the key sentences when the names matter.

### Who uses 8-K data?

- **Traders and analysts** react to earnings, deals and management changes.
- **Risk and compliance teams** watch for restatements, auditor changes and delisting notices.
- **Journalists** find executive departures and cyber incidents quickly.
- **Recruiters and sales teams** see when a company changes its leadership.
- **Developers** build alerts, dashboards and bots.

### Automate and connect

Schedule the Actor every day and send new filings to Google Sheets, Slack, Zapier, Make or n8n, or trigger a webhook when a run ends.

### FAQ

**Do I need an SEC account?**
No. The Actor works without any login.

**What is an 8-K?**
A current report that a public company files within four business days of an important event. Each event is reported under an item number, such as 2.02 for results or 5.02 for officer changes.

**Does it include 10-K and 10-Q reports?**
No. It covers 8-K filings and their amendments. See the SEC EDGAR Company Financials Scraper for annual financial statements.

**What is the time zone of the accepted time?**
The accepted time is given in UTC and in New York time. The before open, during hours and after close flags use New York time, with trading hours from 9:30 to 16:00.

**Why is some item text empty?**
A few filings give the details only in an exhibit or in a format the Actor cannot read as text. The item numbers and the exhibit links are still returned.

**How far back can I search?**
Use the filing dates to choose the period. Long periods for the whole market mean many filings to read, so start with recent days.

**Is this financial advice?**
No. 8-K filings are public information. Use them as one input among many.

### Legal note

This Actor collects information that is publicly visible on the website. Check the source site's terms and your local rules before using the data. Nothing here is financial advice.

### Support

Missing a field or found a bug? Open an issue from the Actor page.

# Actor input Schema

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

Free users: Limited to 10 items (preview). Paid users: Optional, max 1,000,000.

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

Filings returns one row per 8-K with the items, the text of each item and the press release. Company digest returns one row per company with item counts, risk signals and a risk score for the period.

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

Tickers of the companies to follow, for example AAPL, NVDA, TSLA. Leave empty together with company names and CIK numbers to scan all companies in the date range.

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

Part of a company name, for example Tesla or Microsoft. The closest matches in the SEC company list are used.

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

SEC company numbers, for companies that have no ticker or when you prefer the number, for example 320193.

## `categories` (type: `array`):

Keep only filings about these kinds of events. Executive changes covers item 5.02, Earnings covers 2.02, Cybersecurity covers 1.05. Leave empty for all events.

## `itemCodes` (type: `array`):

Exact 8-K item numbers, for example 5.02 or 1.05. Use this instead of categories when you know the item. Filings that contain any of the codes are kept.

## `sic` (type: `string`):

Keep only companies whose industry code starts with these digits, for example 7372 for software or 28 for chemicals and drugs.

## `dateFrom` (type: `string`):

First filing date, YYYY-MM-DD. The default is 5 days ago, or 365 days ago when you choose companies.

## `dateTo` (type: `string`):

Last filing date, YYYY-MM-DD. The default is today.

## `includeText` (type: `boolean`):

Adds the written text of every item, cut to the length below. Also adds a summary of executive changes and cybersecurity incidents. Turn it off for faster, smaller results.

## `includePressRelease` (type: `boolean`):

Adds the headline and text of the press release attached to the filing (exhibit 99), and the main numbers of earnings releases.

## `textLimit` (type: `integer`):

Maximum characters kept per item text and per press release.

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

Also return amended filings.

## `onlyNewSinceLastRun` (type: `boolean`):

Skips filings that an earlier run already returned. Use it for daily alerts.

## `maxFilingsToScan` (type: `integer`):

Safety limit for how many filings are read before the run stops, even when few match your filters.

## `contactEmail` (type: `string`):

Added to the request header as SEC fair access guidelines recommend. Leave empty if you prefer.

## Actor input object example

```json
{
  "maxItems": 10,
  "mode": "events",
  "includeText": true,
  "includePressRelease": true,
  "textLimit": 1500,
  "includeAmendments": true,
  "onlyNewSinceLastRun": false,
  "maxFilingsToScan": 1500
}
```

# Actor output Schema

## `overview` (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 = {
    "maxItems": 10
};

// Run the Actor and wait for it to finish
const run = await client.actor("parselab/sec-8k-events-scraper").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 = { "maxItems": 10 }

# Run the Actor and wait for it to finish
run = client.actor("parselab/sec-8k-events-scraper").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 '{
  "maxItems": 10
}' |
apify call parselab/sec-8k-events-scraper --silent --output-dataset

```

## MCP server setup

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

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/s4XukvDGF2X4OiKmn/builds/L1T7OBia3Q3vROv9S/openapi.json
