# 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:** News, Automation, Developer tools
- **Stats:** 1 total users, 0 monthly users, 100.0% runs succeeded, 1 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.50 / 1,000 listings

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

## 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?

The actor runs **continuously** — start it once and it keeps polling the live SEC EDGAR data on an adaptive interval until you cancel it (or hit the `max_items` limit, if set). 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.

### Features

- ⚡ Continuous real-time monitoring of SEC EDGAR
- 🔔 Instant Telegram, Discord & Slack alerts
- 🎯 Match stock tickers and keywords
- 🏢 Resolve CIK numbers to ticker symbols
- 📄 Extract full filing text content
- 🗂️ Structured JSON dataset
- 🔄 Automatic duplicate detection
- 📊 Export as JSON, CSV, Excel, or via API
- 🤖 Ready for AI, n8n, Zapier, and RAG workflows
- 🌐 Optional Apify Proxy support

### 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. Optionally set **Max Items** to stop the run after a set number of filings (leave at `0` to run indefinitely)
4. Configure at least one **Notifications** channel to receive alerts
5. Click **Start** — results appear in the **Output** tab as filings are processed, and the run keeps polling until you cancel it or the `max_items` limit is reached

### 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`). |
| `max_items` | integer | Maximum number of new filings to push before the run stops. Set to `0` to run continuously until manually stopped. Default `10`. |

> **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.

### Free User Limitations

- **Notifications are available to paid users only.** Instant Telegram, Discord, and Slack alerts are sent only on a **paid plan**. On the free tier, filings are still collected to the dataset in full, but no alerts are dispatched even if `tickers` and `keywords` are configured.

> **Upgrade for real-time alerts.** A [paid plan](https://apify.com/pricing) enables instant Telegram, Discord, and Slack notifications the moment a filing matches your watchlist.

### Tips

- **Continuous operation** — start the Actor once and let it run. It polls EDGAR on an adaptive interval (faster when filings are flooding in, slower during quiet periods) and stops only when you cancel it or hit the `max_items` limit, if set. No external scheduler needed
- **Runs around the clock** — because polling is continuous, both market-hours filings and pre-market 8-K disclosures (earnings, M\&A, executive changes) are captured as they land, with no gaps between scheduled runs
- **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

### Combine with GlobeNewswire Scraper & Real-Time Press Release Monitor and PR Newswire Filing Monitor

For complete market intelligence, pair this Actor with the **[GlobeNewswire Continuous Monitor](https://apify.com/scraping_crew/globenewswire)** and the **[PR Newswire Filing Monitor](https://apify.com/scraping_crew/prnewswire-filing-monitor)** — which watch the two major press-release wires for earnings announcements, M\&A news, and product launches.

| Actor | Source | Best for |
|---|---|---|
| SEC GOV Filing Monitor | SEC EDGAR | Regulatory filings, insider transactions, IPO prospectuses, material events |
| [GlobeNewswire Scraper & Real-Time Press Release Monitor](https://apify.com/scraping_crew/globenewswire) | GlobeNewswire | Press releases, earnings announcements, product launches, partnerships |
| [PR Newswire Filing Monitor](https://apify.com/scraping_crew/prnewswire-filing-monitor) | PR Newswire | Press releases, earnings announcements, product launches, partnerships |

Running all three on the same ticker watchlist and scheduling them in parallel gives you **full coverage** — the moment a company either files with the SEC or puts out a press release on either wire, you get an alert. All three Actors share the same notification channels (Telegram, Discord, Slack) and output structured dataset formats, making it easy to merge or compare results downstream.

### 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?**
First, notifications require a **paid plan** — free-tier users receive no alerts (see [Limitations](#limitations)). On a paid plan, 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.

**Why did my run stop after N filings?**
The run stops once it reaches the `max_items` limit you configured (default `10`). Set `max_items` to `0` to run continuously until you cancel it.

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

### SEO Keywords

SEC EDGAR scraper, SEC filing monitor, SEC EDGAR API, SEC filing scraper, regulatory filing monitor, 8-K scraper, 10-K scraper, 10-Q scraper, S-1 filing tracker, SC 13G/D monitor, insider transaction tracker, IPO prospectus scraper, material event alerts, stock ticker alerts, real-time SEC filing alerts, investor research tool, earnings announcement tracker, M\&A news monitor, competitive intelligence tool, compliance filing monitoring, financial filing aggregator, SEC filing dataset, EDGAR scraping tool, Telegram stock alerts, Discord filing webhook, Slack filing notifications, stock market filing scraper, ticker keyword matching, filing monitoring actor, Apify SEC EDGAR actor, continuous filing monitor, financial filing API, IR filing tracker, keyword-based filing alerts, real-time regulatory filing feed, no-code filing alerts, SEC filing JSON export, CIK to ticker resolver, stock ticker scraper, stock ticker tracker, NYSE ticker monitor, NASDAQ ticker monitor, ticker symbol filing feed, ticker watchlist alerts, publicly traded company filing monitor, ticker-based filing filtering, stock filing screener, equity filing alerts, ticker mention tracker, SEC filing full text search, RAG-ready SEC filings, LLM-ready regulatory data

# 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.

## `max_items` (type: `integer`):

Maximum number of new filings to push before the run stops. Set to 0 to run continuously until manually stopped.

## `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": "",
  "max_items": 10,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# 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": true
    }
};

// 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": True } }

# 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": true
  }
}' |
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

Download the OpenAPI definition: https://api.apify.com/v2/actors/VChTZCtwpK63dqZSQ/builds/gSfwVx17RKC6EtAVR/openapi.json
