# SEC Delistings and Late Filings Tracker (`parselab/sec-delistings-late-filings-tracker`) Actor

Track SEC Form 25 delistings, Form 15 deregistrations and NT 10-K and NT 10-Q late filing notices. Get the reason in plain words, who started the delisting, holders of record, repeat late filers and a company history of listing notices, restatements and auditor changes. Export to CSV or Excel.

- **URL**: https://apify.com/parselab/sec-delistings-late-filings-tracker.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 $25.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 Delistings and Late Filings Tracker

This SEC tracker watches the filings that show a company in trouble or on its way out: Form 25 (a stock is removed from an exchange), Form 15 and 15F (a company stops reporting to the SEC) and the NT 10-K and NT 10-Q notices (a company cannot file its annual or quarterly report on time). Run it for the whole market over a date range, or follow a list of companies. Each notice comes back as one clean row, or you can get one row per company with a distress score.

A row carries more than the filing link. For a delisting you get who started it (the exchange, the company, or the end of the security), the rule used and what it means in plain words, the security class and the exchange. For a deregistration you get the holders of record, the rules ticked on the form and what they mean. For a late filing you get the period, how many days after the period end the notice came, the reason in the words of the company, themes found in the reason (auditor not finished, restatement, liquidity, merger, investigation and others), whether other reports are also late and whether the company expects a significant change in results, with its explanation. Every row adds the history of the company: earlier late filing notices, 8-K filings about listing notices, bankruptcy, restatements, auditor changes and cyber incidents in the last 12 months, the dates of the last reports and written distress flags.

Investors, short sellers, credit analysts, auditors, lawyers, journalists and restructuring advisers use it to find companies in trouble early.

### What can you do with this delistings and late filings tracker?

- See every stock removed from an exchange this week and why
- Separate delistings forced by the exchange from voluntary ones and from the end of a security
- Find companies that deregister because they have few holders left
- Find late annual reports and quarterly reports, with the reason in plain words
- Catch repeat late filers: companies with two or more late notices in 24 months
- Find late filers that say they expect a significant change in results
- Search late notices for words like auditor, restatement, going concern or liquidity
- Check the recent distress history of a company in one row
- Rank companies by a distress score built from the notices of the period
- Export the data to CSV or Excel, or send new notices to Slack or your own tools

### What data can you extract from these filings?

| Mode | One row is | Highlights |
|---|---|---|
| Notices | One filing | Kind of notice and form, filing date, company, ticker, exchange, industry, state, company number. Delisting: exchange name, security class, rule, who started it, rule meaning, issuer location and phone, expected effective date. Deregistration: holders of record, security class, rules ticked with meaning, typical effective date. Late filing: period, days after period end, reason text and themes, other reports on time, expected change in results with explanation, contact person. Company history: earlier late notices in 24 months, repeat late filer flag, listing notices, bankruptcy, restatement, auditor change and cyber filings in 12 months, last annual and quarterly report dates, days since the last annual report, distress flags and count |
| Companies | One company | Notices and their kinds, delistings, deregistrations, late annual and late quarterly reports, first and last date, distress flags, reason themes, distress score and level |

### How to scrape SEC delistings and late filings

1. Choose **Notices** or **Companies**.
2. Pick the kinds of notice, or leave it empty for all.
3. Set the filing dates. The default is the last 7 days, or two years when you choose companies.
4. Optionally search the reason by keywords, keep only repeat late filers or only those expecting weaker results.
5. Set **Max Items** and click **Start**.
6. Export the dataset as CSV, Excel or from the Apify console.

### Input example

```json
{
  "mode": "events",
  "eventTypes": ["late quarterly report", "late annual report"],
  "reasonKeywords": ["auditor", "restatement", "going concern"],
  "onlyRepeatLateFilers": true,
  "dateFrom": "2026-08-14",
  "dateTo": "2026-08-20",
  "maxItems": 100
}
```

### Late filing output example

```json
{
  "eventType": "late quarterly report",
  "form": "NT 10-Q",
  "filingDate": "2026-08-14",
  "companyName": "Sow Good Inc.",
  "ticker": "SOWG",
  "exchange": "Nasdaq",
  "industry": "Food and Kindred Products",
  "periodEnded": "2026-06-30",
  "daysAfterPeriodEnd": 45,
  "reasonThemes": ["Auditor or audit not complete", "Delay compiling information"],
  "reasonText": "The Registrant is unable, without unreasonable effort or expense, to file its Quarterly Report on Form 10-Q for the quarter ended June 30, 2026 within the prescribed time period due to additional time required to complete the review of the Registrant's interim financial statements...",
  "otherReportsFiledOnTime": true,
  "expectsSignificantChangeInResults": false,
  "earlierLateFilingNotices24m": 1,
  "isRepeatLateFiler": true,
  "listingNoticeFilings12m": 1,
  "lastListingNoticeDate": "2026-04-13",
  "lastAnnualReportDate": "2026-03-31",
  "lastQuarterlyReportDate": "2026-05-20",
  "distressFlags": []
}
```

### Delisting output example

```json
{
  "eventType": "delisting",
  "form": "25-NSE",
  "filingDate": "2026-10-05",
  "companyName": "DAVIS COMMODITIES Ltd",
  "ticker": "DTCKF",
  "securityClass": "Common Stock",
  "ruleProvision": "17 CFR 240.12d2-2(b)",
  "initiatedBy": "Exchange",
  "ruleMeaning": "The exchange removes the class from listing and registration, for example for failing listing standards, or after a merger, redemption or similar event.",
  "expectedEffectiveDate": "2026-10-15"
}
```

### Deregistration output example

```json
{
  "eventType": "deregistration",
  "form": "15-12G",
  "filingDate": "2026-10-05",
  "companyName": "Theravance Biopharma, Inc.",
  "securityClass": "Ordinary Shares, par value $0.00001 per share",
  "holdersOfRecord": 1,
  "rulesChecked": ["Rule 12g-4(a)(1)", "Rule 12h-3(b)(1)(i)"],
  "deregistrationReasons": ["Fewer than 300 holders of record", "Suspends the duty to file reports under 15(d): fewer than 300 holders"],
  "typicalEffectiveDate": "2027-01-03"
}
```

### Company view example

```json
{
  "companyName": "Kaival Brands Innovations Group, Inc.",
  "ticker": "KAVL",
  "notices": 1,
  "eventTypes": ["delisting"],
  "distressFlags": ["Had a listing deficiency notice (8-K item 3.01) in the last 12 months", "Filed two or more late filing notices in 24 months"],
  "distressScore": 46,
  "distressLevel": "medium"
}
```

### How much does it cost to scrape delistings and late filings?

You pay per result: $34 per 1,000 rows plus a tiny start fee. The free plan returns up to 10 rows per run. The company view returns one row per company, so a month of the whole market costs a few dollars at most.

### Tips for better results

- Late filing notices (NT 10-K and NT 10-Q) come in waves right after the deadlines, with a hundred or more in one day. Outside those days there are only a few.
- A Form 25 filed by a stock exchange ends the listing of a class. It is not always bad news: mergers, redemptions and liquidations produce them too. The field that says who started it helps to tell the cases apart.
- A listing notice in an 8-K (item 3.01) that comes together with a Form 25 is usually the announcement of that delisting. Only earlier notices count as a warning.
- The distress flags and the score are a screen built from public filings with simple rules. They are not a rating and do not predict what will happen.
- The reason themes come from keywords in the written reason. Short reasons such as "delay in compiling information" give no theme beyond that.
- For the whole market in a long period, raise the limit of filings to scan or choose the kinds of notice you need.
- For a daily alert, schedule the Actor every morning and turn on the option to return only notices not returned before.

### Who uses this data?

- **Investors and short sellers** look for companies in trouble early.
- **Credit and risk analysts** watch late filers and deregistrations.
- **Auditors, lawyers and advisers** find clients and cases.
- **Journalists** report on delistings and late reports.
- **Researchers** study the road to delisting.

### Automate and connect

Schedule the Actor every day and send new notices to Slack, Google Sheets, 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 NT 10-K or NT 10-Q?**
A notification of late filing under Rule 12b-25. A company files it when it cannot file its annual or quarterly report on time, and it gets a short extension if it files on time after that.

**What is a Form 25?**
A notice that a class of securities is removed from listing on a national exchange, filed by the exchange or by the company.

**What is a Form 15?**
A certification that a company ends its registration or suspends its duty to file reports, usually because it has few holders of record.

**Why does a delisted company have no ticker?**
Tickers come from the current SEC list of companies. A company that is gone can be found by its company number.

**Is this financial advice?**
No. These 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`):

Notices returns one row per delisting, deregistration or late filing notice, with the reason and the history of the company. Companies returns one row per company with all its notices in the period and a distress score.

## `eventTypes` (type: `array`):

Delisting covers Form 25. Deregistration covers Form 15 and 15F. Late annual report covers NT 10-K and NT 20-F. Late quarterly report covers NT 10-Q. Leave empty for all.

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

Tickers of the companies to follow. With a company the default start date is two years ago. A delisted company may no longer have a ticker, so use its CIK number.

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

SEC company numbers, also for companies that were delisted.

## `companyNames` (type: `array`):

Part of a company name. Only notices of companies whose name contains the text are read when no ticker is given.

## `reasonKeywords` (type: `array`):

Keep only late filing notices whose reason text or reason themes contain one of these words, for example auditor, restatement, going concern or liquidity.

## `onlyRepeatLateFilers` (type: `boolean`):

Keep only companies that filed at least one other late filing notice in the 24 months before.

## `onlyExpectingLowerResults` (type: `boolean`):

Keep only late filing notices where the company says it expects a significant change in results of operations.

## `includeContext` (type: `boolean`):

Adds earlier late filing notices, 8-K filings about listing notices, bankruptcy, restatement, auditor changes and cyber incidents in the last 12 months, dates of the last annual and quarterly reports, and written distress flags.

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

Adds the written reason of the company for a late filing.

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

First filing date, YYYY-MM-DD. The default is 7 days ago, or two years ago when you choose companies.

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

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

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

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

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

Safety limit for how many notices 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",
  "onlyRepeatLateFilers": false,
  "onlyExpectingLowerResults": false,
  "includeContext": true,
  "includeText": 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-delistings-late-filings-tracker").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-delistings-late-filings-tracker").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-delistings-late-filings-tracker --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,parselab/sec-delistings-late-filings-tracker"
        }
    }
}
```

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/rG5jKyW7nQ1ZrwEXL/builds/b14zF8gY9Db4h3XeC/openapi.json
