# US Public Company Filing Risk Alerts (`invaluable_rondeau/us-public-company-filing-risk-alerts`) Actor

SEC filing risk alerts for US public companies. Monitor filing metadata for new 8-K, 10-K/10-Q delay, and S-1 risk signals, then return deduplicated changes for scheduled workflows.

- **URL**: https://apify.com/invaluable\_rondeau/us-public-company-filing-risk-alerts.md
- **Developed by:** [PROOFNEXA](https://apify.com/invaluable_rondeau) (community)
- **Categories:** Lead generation
- **Stats:** 1 total users, 0 monthly users, 0.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $9.00 / 1,000 company baseline checks

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

## US Public Company Filing Risk Alerts

Monitor US public-company SEC filing metadata for eight predefined risk categories and return only newly detected risk events after a baseline. Designed for analysts, investor-relations teams, compliance teams, and API/agent workflows that need a small, repeatable filing-change feed.

The Actor reads SEC submissions metadata only. It does not retrieve filing bodies, scrape people, send notifications, or provide investment or legal advice. The first live run establishes a baseline; unchanged later runs produce no Dataset records and no PPE events.

### Safe dry-run and Store health check

Set `dryRun` to `true` to validate the Actor without making any SEC request, using any SEC contact, or emitting a PPE event. The Actor writes one clearly labeled `recordType: "dry-run"` fixture so automated Store health checks can confirm a successful non-empty Dataset. This fixture is not SEC data and is not a paid result.

For a live run, set `dryRun` to `false` and provide your own SEC requester contact. The contact is used only in the SEC `User-Agent` header and is never written to the Dataset, KVS, or logs.

### What is monitored

The Actor checks Form 8-K item metadata, NT filing-delay notices, and S-1 metadata from the SEC submissions API. The output includes the company, form, filing date, accession number, filing URL, risk category, score, confidence, evidence description, and whether the record is new.

Eight deterministic metadata categories are supported:

| Key | Name | Detection condition | Form | Confidence | Evidence | Example false positive |
| --- | --- | --- | --- | --- | --- | --- |
| `bankruptcy_or_receivership` | Bankruptcy or receivership | 8-K Item 1.03 appears | 8-K | high | Form/item/accession/date metadata | Disclosure may describe a subsidiary or resolved proceeding |
| `debt_acceleration_or_default` | Debt acceleration or default | 8-K Item 2.04 appears | 8-K | high | Form/item/accession/date metadata | Technical default may be cured or immaterial to the whole group |
| `delisting_or_listing_standard` | Delisting or listing standard | 8-K Item 3.01 appears | 8-K | high | Form/item/accession/date metadata | Temporary listing deficiency may be cured |
| `auditor_change` | Auditor change | 8-K Item 4.01 appears | 8-K | high | Form/item/accession/date metadata | Routine auditor rotation may not indicate misconduct |
| `financial_statement_non_reliance` | Financial statement non-reliance | 8-K Item 4.02 appears | 8-K | high | Form/item/accession/date metadata | Subsequent filing may resolve or narrow the issue |
| `officer_departure` | Officer departure | 8-K Item 5.02 appears | 8-K | high | Form/item/accession/date metadata | Ordinary planned executive transition |
| `late_10k` / `late_10q` | Filing-delay notice | `NT 10-K` or `NT 10-Q` appears | NT 10-K / NT 10-Q | high | Form/accession/date metadata | Delay can be administrative and later cured |
| `s1_registration` | S-1 registration | `S-1` appears | S-1 | high | Form/accession/date metadata | Registration statement may not complete or may be withdrawn |

The categories are screening signals, not conclusions. The Actor does not read filing text, so it cannot determine materiality, intent, outcome, or legal significance.

### Pricing

Pay per event is used after monetization is configured:

- `company-checked`: **$0.009** for one successfully saved baseline company-check record.
- `change-detected`: **$0.15** for one newly detected risk-event record after baseline.
- An unchanged run produces **0 chargeable records**.
- Failed SEC requests, malformed responses, and skipped inputs produce no chargeable Dataset record.
- The run summary is kept in the named key-value store and is not a chargeable Dataset item.
- Platform usage and named-store retention treatment follow the pricing shown in the Store page. Set a per-run spending limit before running large watchlists.

The two custom PPE events are emitted through the Apify SDK only after the corresponding Dataset record is saved and the returned `chargedCount` is confirmed. A deterministic record key and named-store ledger prevent repeat charges for the same baseline digest or accession-number risk event.

### Input

Use CIKs, tickers, or both. The maximum is 500 distinct companies per run.

```json
{
  "secTickers": ["AAPL", "MSFT"],
  "watchlistId": "my-watchlist",
  "maxCompanies": 500,
  "lookbackDays": 365,
  "maxHistoricalRecords": 1000,
  "firstRunBehavior": "baseline-only",
  "dryRun": false,
  "notificationMode": "disabled",
  "secUserAgentContact": "Your Name your-email@example.com"
}
```

For live runs, `secUserAgentContact` must be your own SEC requester contact. It is sent only as the SEC `User-Agent` header and is not written to the Dataset, KVS, or logs. Never use a fictional contact or another person's contact.

Use a new `watchlistId` to create a separate baseline. State reset is intentionally disabled because deleting state can create duplicate records and charges.

### Output example

```json
{
  "recordKey": "risk:my-watchlist:0000320193:0000320193-26-000001:2.04",
  "recordType": "risk-event",
  "company": "Apple Inc.",
  "cik": "0000320193",
  "ticker": "AAPL",
  "form": "8-K",
  "filing_date": "2026-08-04",
  "accession_number": "0000320193-26-000001",
  "filing_url": "https://www.sec.gov/Archives/edgar/data/320193/000032019326000001/000032019326000001-index.html",
  "risk_category": "debt_acceleration_or_default",
  "risk_score": 85,
  "confidence": "high",
  "evidence": "SEC submissions metadata matched 8-K Item 2.04; filing body was not retrieved.",
  "detected_at": "2026-08-05T00:00:00.000Z",
  "is_historical": false,
  "is_new": true,
  "state_version": 2,
  "chargeable_event": "change-detected"
}
```

The first run returns a `company-check` baseline record. Later runs return one `risk-event` record for each new accession-number/item event. An unchanged run returns no Dataset records; its run summary is stored under `run-summary-<runId>` in `registry-monitor-<watchlistId>`.

### API and Schedule

Start the Actor with the Apify API. Replace the placeholder contact with your own value and keep it out of public scripts:

```bash
curl -X POST "https://api.apify.com/v2/acts/invaluable_rondeau~us-public-company-filing-risk-alerts/runs?token=$APIFY_TOKEN" \
  -H 'Content-Type: application/json' \
  -d '{"secTickers":["AAPL"],"watchlistId":"daily-aapl","secUserAgentContact":"Your Name your-email@example.com"}'
```

For recurring monitoring, create an Apify Schedule, select this Actor, paste the same input, and start with once daily. A schedule is preferred to a resident worker. Review the first baseline output before increasing the watchlist.

Apify webhooks can be attached by the account owner to a completed or failed run. This Actor does not create or call a webhook and does not send external notifications itself. A webhook recipient should be user-owned and reviewed before activation.

The structured Dataset and run summary can be consumed by an API client, MCP tool, or AI agent. Agents should treat risk records as screening signals and link to the SEC source rather than presenting them as investment conclusions.

### SEC access conditions

The SEC documents its EDGAR APIs at [EDGAR Application Programming Interfaces](https://www.sec.gov/search-filings/edgar-application-programming-interfaces). Requests must declare a descriptive User-Agent with contact information and should stay within the SEC's fair-access guidance of no more than 10 requests per second; this Actor uses a minimum 125 ms interval and low concurrency. It retries 429 and 5xx responses with bounded backoff, fails fast on 403, and never bypasses access controls.

The Actor uses the official submissions endpoint and `company_tickers.json`. It does not retrieve filing bodies. Public SEC information may be copied or further distributed subject to the SEC's published conditions; cite the SEC as the source. This unofficial Actor is not affiliated with or endorsed by the SEC or EDGAR. SEC and EDGAR marks are used only for textual source identification.

### Data retention and failure behavior

- State is stored in `registry-monitor-<watchlistId>`.
- Each chargeable record has a deterministic ledger entry keyed by watchlist, CIK, accession number, item, or baseline digest.
- Dataset push completes before the separate PPE charge call. State advances only after the charge result confirms at least one event, and state-save failures can be retried through the ledger.
- A failed company is placed in the run summary's `skipped` list; other companies continue.
- A malformed state record stops that company safely instead of overwriting it.
- Inputs above the 500-company limit are rejected or truncated according to the explicit `maxCompanies` setting; no silent unlimited run is performed.

### Limitations

This is metadata monitoring, not a guarantee of financial distress, fraud, default, delisting, or executive misconduct. It may miss signals outside the eight categories, may produce false positives, and does not replace legal, compliance, investment, or accounting review. Do not use it for emergency trading, legal deadlines, or guaranteed alerts.

### Changelog

#### 0.2.0

- Fixed state-before-Dataset ordering.
- Added ordered Dataset-then-PPE writes with `chargedCount` checks.
- Added deterministic ledger and pending-record reconciliation.
- Added bounded retry behavior for 429 and 5xx responses and fail-fast 403 handling.
- Added input/output schemas, eight risk categories, bounded lookback, and 500-company validation.
- Notifications remain disabled.

# Actor input Schema

## `secCiks` (type: `array`):

Optional SEC company identifiers. Values with fewer than 10 digits are normalized with leading zeroes.

## `secTickers` (type: `array`):

Optional US-listed ticker symbols resolved with SEC company\_tickers.json.

## `watchlistId` (type: `string`):

State namespace. Changing it creates a separate baseline. Use a new ID instead of resetting state.

## `maxCompanies` (type: `integer`):

Maximum distinct companies per run. Hard maximum is 500.

## `lookbackDays` (type: `integer`):

Only risk metadata within this window is considered. This does not retrieve filing bodies.

## `maxHistoricalRecords` (type: `integer`):

Per-company cap on risk metadata retained for the baseline. Maximum 1000.

## `firstRunBehavior` (type: `string`):

The first run records a baseline company-check result; risk changes are charged from later runs.

## `dryRun` (type: `boolean`):

When true, no SEC request or PPE event is made. One explicit dry-run fixture is written so the Actor can be health-checked without your SEC contact.

## `notificationMode` (type: `string`):

Notifications are disabled in this version. Use Apify Schedule or an external, user-owned webhook after reviewing Dataset output.

## `resetState` (type: `boolean`):

Disabled to prevent duplicate Dataset records and charges. Use a new watchlistId for a new baseline.

## `secUserAgentContact` (type: `string`):

Required by SEC access guidance. Enter your own name and contact. It is sent only as the User-Agent header and is not written to Dataset, KVS, or logs.

## Actor input object example

```json
{
  "watchlistId": "default",
  "maxCompanies": 500,
  "lookbackDays": 365,
  "maxHistoricalRecords": 1000,
  "firstRunBehavior": "baseline-only",
  "dryRun": true,
  "notificationMode": "disabled",
  "resetState": false
}
```

# Actor output Schema

## `results` (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 = {
    "dryRun": true
};

// Run the Actor and wait for it to finish
const run = await client.actor("invaluable_rondeau/us-public-company-filing-risk-alerts").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 = { "dryRun": True }

# Run the Actor and wait for it to finish
run = client.actor("invaluable_rondeau/us-public-company-filing-risk-alerts").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 '{
  "dryRun": true
}' |
apify call invaluable_rondeau/us-public-company-filing-risk-alerts --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,invaluable_rondeau/us-public-company-filing-risk-alerts"
        }
    }
}

```

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/S197h2IvM224ty4K9/builds/nFiUShgj366xen1xM/openapi.json
