# SEC.gov EDGAR Filings Scraper (`scraping_crew/sec-gov`) Actor

Monitor SEC EDGAR live filings in real time. Extracts full clean text from regulatory filings, resolves company tickers, and sends instant alerts to Telegram, Discord, or Slack when a filing matches your tracked tickers and keywords.

- **URL**: https://apify.com/scraping\_crew/sec-gov.md
- **Developed by:** [Scraping Crew](https://apify.com/scraping_crew) (community)
- **Categories:** Automation, News, Other
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.50 / 1,000 listings

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use 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

## SEC.gov EDGAR Filings Scraper

Monitor **SEC EDGAR** in real time — scrape the latest regulatory filings, extract their full text content, resolve related company tickers, and receive instant alerts on Telegram, Discord, or Slack when a filing matches your watchlist.

### What does SEC.gov EDGAR Filings Scraper do?

This Actor continuously polls the live update, which publishes every new regulatory filing as it is submitted. For each filing it:

1. Fetches the full text of the submission file
2. Extracts metadata (title, form type, date, filing link)
3. Resolves all CIK numbers mentioned in the filing to their ticker symbols
4. Checks whether the filing matches your tracked **tickers** and **keywords**
5. Sends an alert to your configured notification channels if a match is found
6. Stores every filing as a structured record in the Apify dataset

> **No duplication!** Already-visited filings are tracked in a persistent key-value store so re-runs never produce duplicates.

### Why use this Actor?

- **Real-time market intelligence** — catch 8-K, 10-Q, 10-K, SC 13G/D, and other material filings the moment they hit EDGAR
- **Automated watchlists** — define tickers and keywords once, get notified automatically
- **Multi-channel alerts** — get notified instantly on Telegram, Discord, or Slack simultaneously
- **LLM-ready content** — filing text is fully stripped of HTML tags and formatting noise, delivered as clean plain text ready to feed directly into any AI model or pipeline
- **Deduplication** — safe to run on a schedule; already-processed filings are never returned twice

### How to use

1. Open the **Input** tab in Apify Console
2. Optionally fill in the **Track** section with the tickers and keywords you want to monitor
3. Configure at least one **Notifications** channel to receive alerts
4. Click **Start** — results appear in the **Output** tab as filings are processed
5. Use **Schedules** to run the Actor every few minutes for continuous monitoring

### Input

All fields are optional.

#### Proxy Configuration

| Field | Type | Default | Description |
|---|---|---|---|
| `proxyConfiguration` | object | `{ "useApifyProxy": false }` | Proxy settings. Enable Apify Proxy or provide custom proxy URLs to rotate IPs on requests to SEC.gov. |

#### Track

| Field | Type | Description |
|---|---|---|
| `tickers` | string (textarea) | Ticker symbols to watch, one per line (e.g. `AAPL`). Case-insensitive|
| `keywords` | string (textarea) | Keywords or phrases to match in filing content, one per line (e.g. `merger`, `going concern`). |

> **Alert logic:** a notification is sent only when **at least one ticker AND at least one keyword** both appear in the same filing. Configuring only one side produces no alerts.

#### Notifications

| Field | Type | Secret | Description                                                |
|---|---|---|------------------------------------------------------------|
| `telegram_bot_token` | string | ✓ | Bot token from [@BotFather](https://t.me/BotFather).       |
| `telegram_chat_id` | string | | Chat or channel ID (e.g. `-xxxxxxxxxx` or `@yourchannel`). |
| `discord_webhook` | string | ✓ | Discord channel webhook URL.                               |
| `slack_webhook` | string | ✓ | Slack incoming webhook URL.                                |

#### Example input

```json
{
    "proxyConfiguration": { "useApifyProxy": false },
    "tickers": "AAPL\nMSFT\nNVDA",
    "keywords": "acquisition\ngoing concern\nrestatement",
    "telegram_bot_token": "123456:ABC-DEF...",
    "telegram_chat_id": "-xxxxxxxxxxxx"
}
````

### Output

Each filing is stored as one record in the Apify dataset. You can download the dataset in **JSON, CSV, Excel, or HTML** from the Output tab or via the Apify API.

#### Output fields

| Field | Type | Description                                                                                                                                                                                   |
|---|---|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| `news_id` | `string` | Unique filing identifier derived from the accession path (e.g. `0001234567-24-000123`).                                                                                                       |
| `news_title` | `string` | Filing title as published. Typically includes the company name, CIK, and form type.                                                                                                           |
| `news_link` | `string` | URL to the filing index page on SEC EDGAR.                                                                                                                                                    |
| `news_date` | `string` | Publication date in `YYYY-MM-DD` format.                                                                                                                                                      |
| `news_hour` | `string` | Publication time in `HH:MM:SS` format (UTC).                                                                                                                                                  |
| `sec_form_data` | `string` | SEC form label and type, e.g. `Annual report 10-K` or `Current report 8-K`.                                                                                                                   |
| `related_tickers` | `string[]` | Ticker symbols of all companies whose CIK numbers appear in the filing body.|
| `content` | `string` | Full lowercased text of the `.txt` submission file with newlines collapsed to spaces. Suitable for keyword search and NLP.                                                                    |

#### Example output

```json
[
    {
        "news_id": "0000320193/000032019324000123",
        "news_title": "Apple Inc. (0000320193) - Annual report - 10-K",
        "news_link": "https://www.sec.gov/Archives/edgar/data/320193/000032019324000123/0000320193-24-000123-index.htm",
        "news_date": "2024-11-01",
        "news_hour": "16:32:10-04:00",
        "sec_form_data": "Annual report 10-K",
        "related_tickers": ["AAPL", "MSFT"],
        "content": "united states securities and exchange commission washington, d.c. 20549 form 10-k annual report pursuant to section 13 or 15(d) ..."
    },
    {
        "news_id": "0001045810/000104581024000456",
        "news_title": "NVIDIA Corp (0001045810) - Current report - 8-K",
        "news_link": "https://www.sec.gov/Archives/edgar/data/1045810/000104581024000456/0001045810-24-000456-index.htm",
        "news_date": "2024-11-01",
        "news_hour": "08:15:00-04:00",
        "sec_form_data": "Current report 8-K",
        "related_tickers": ["NVDA"],
        "content": "item 2.02 results of operations and financial condition. on november 1, 2024, nvidia corporation issued a press release ..."
    }
]
```

### Pricing / Cost estimation

The Actor is billed per compute unit (CU). A typical run processing 100 filings costs approximately **0.05–0.1 CU**, depending on filing sizes. The [Apify Free plan](https://apify.com/pricing) includes enough monthly CUs to run the Actor dozens of times.

### Tips

- **Run every 1–2 minutes during market hours** — schedule the Actor from **9:25 AM to 4:15 PM ET, Monday–Friday** to capture filings as they land. Outside those hours a 15–30 minute interval is sufficient since filing activity drops sharply after the close
- **Cover pre-market too** — material 8-K disclosures (earnings, M\&A, executive changes) are frequently filed between **6:00–9:30 AM ET** before the open; a separate schedule covering that window ensures nothing is missed before trading begins
- **Use Apify Proxy** if you encounter access issues — the Actor automatically retries with a fresh proxy session on each attempt
- **Feed `content` directly into an LLM** — the text is fully stripped of HTML tags, cleaned of formatting noise, lowercased, and delivered as a single plain-text string, making it immediately usable as a prompt, document chunk, or RAG context without any pre-processing
- **Build a RAG pipeline** — chunk the `content` field, embed it, and store it in a vector database (Pinecone, Weaviate, Chroma) to enable semantic search over SEC filings for any time range
- **Filter by form type** — use `sec_form_data` to route different filing types to different workflows: 8-K for event-driven alerts, 10-K/10-Q for fundamental analysis, SC 13G/D for ownership change tracking
- **Use `related_tickers` as a portfolio filter** — cross-reference the array against your watchlist to surface only filings that mention companies you hold or follow
- **Sentiment and summarisation** — pipe `content` through a sentiment model or summarisation prompt to automatically classify the tone of each filing (positive, negative, neutral) and generate a one-paragraph executive summary
- **Combine with Apify integrations** — connect the dataset to Google Sheets, Zapier, Make, or any webhook to build a full monitoring pipeline without writing code

### FAQ and support

**Will I get duplicate filings if I run multiple times?**
No. A persistent key-value store tracks every processed filing URL. Re-runs skip anything already seen.

**The `related_tickers` field is always empty — why?**
Ticker resolution requires the Actor to have an up-to-date company database. If the field is consistently empty, contact the maintainer to request a rebuild with the latest SEC company data.

**I'm not receiving notifications — what should I check?**
Both `tickers` and `keywords` must be provided and both must match the same filing for an alert to fire. Verify your webhook URL or bot token is correct by checking the Actor log for `Notification failed:` lines.

For bugs or feature requests, open an issue in the repository or contact the maintainer.

# Actor input Schema

## `tickers` (type: `string`):

Ticker symbols to watch, one per line (e.g. AAPL).

## `keywords` (type: `string`):

Keywords or phrases to match in filing content, one per line.

## `telegram_bot_token` (type: `string`):

Telegram bot token from @BotFather.

## `telegram_chat_id` (type: `string`):

Chat or channel ID where alerts are sent (e.g. "-xxxxxxx" for a private group, or "@yourchannel").

## `discord_webhook` (type: `string`):

Discord channel webhook URL.

## `slack_webhook` (type: `string`):

Slack incoming webhook URL.

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

Optional proxy settings. SEC.gov applies rate limits — a proxy can help avoid 429 errors on large runs.

## Actor input object example

```json
{
  "tickers": "",
  "keywords": "",
  "proxyConfiguration": {
    "useApifyProxy": 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 = {
    "proxyConfiguration": {
        "useApifyProxy": false
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("scraping_crew/sec-gov").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 = { "proxyConfiguration": { "useApifyProxy": False } }

# Run the Actor and wait for it to finish
run = client.actor("scraping_crew/sec-gov").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}' |
apify call scraping_crew/sec-gov --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=scraping_crew/sec-gov",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "SEC.gov EDGAR Filings Scraper",
        "description": "Monitor SEC EDGAR live filings in real time. Extracts full clean text from regulatory filings, resolves company tickers, and sends instant alerts to Telegram, Discord, or Slack when a filing matches your tracked tickers and keywords.",
        "version": "0.1",
        "x-build-id": "abuEMgDMwZBs7tKt2"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/scraping_crew~sec-gov/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-scraping_crew-sec-gov",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/scraping_crew~sec-gov/runs": {
            "post": {
                "operationId": "runs-sync-scraping_crew-sec-gov",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/scraping_crew~sec-gov/run-sync": {
            "post": {
                "operationId": "run-sync-scraping_crew-sec-gov",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "tickers": {
                        "title": "Tickers",
                        "type": "string",
                        "description": "Ticker symbols to watch, one per line (e.g. AAPL).",
                        "default": ""
                    },
                    "keywords": {
                        "title": "Keywords / Phrases",
                        "type": "string",
                        "description": "Keywords or phrases to match in filing content, one per line.",
                        "default": ""
                    },
                    "telegram_bot_token": {
                        "title": "Telegram Bot Token",
                        "type": "string",
                        "description": "Telegram bot token from @BotFather."
                    },
                    "telegram_chat_id": {
                        "title": "Telegram Chat ID",
                        "type": "string",
                        "description": "Chat or channel ID where alerts are sent (e.g. \"-xxxxxxx\" for a private group, or \"@yourchannel\")."
                    },
                    "discord_webhook": {
                        "title": "Discord Webhook URL",
                        "type": "string",
                        "description": "Discord channel webhook URL."
                    },
                    "slack_webhook": {
                        "title": "Slack Webhook URL",
                        "type": "string",
                        "description": "Slack incoming webhook URL."
                    },
                    "proxyConfiguration": {
                        "title": "Proxy configuration",
                        "type": "object",
                        "description": "Optional proxy settings. SEC.gov applies rate limits — a proxy can help avoid 429 errors on large runs.",
                        "default": {
                            "useApifyProxy": false
                        }
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
