# SEC EDGAR Filings Scraper (`spry_frame/sec-edgar-scraper`) Actor

Scrapes SEC EDGAR filings — 10-K, 10-Q, 8-K, S-1, Form 4 insider trades, and more. Search by keyword, company, ticker, or form type. No API key required.

- **URL**: https://apify.com/spry_frame/sec-edgar-scraper.md
- **Developed by:** [COSENT GROUP](https://apify.com/spry_frame) (community)
- **Categories:** Lead generation, Other, Automation
- **Features:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.20 / 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.

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 EDGAR Filings Scraper

Scrape SEC EDGAR filings — 10-K annual reports, 10-Q quarterly reports, 8-K material events, S-1 IPO filings, Form 4 insider trades, proxy statements, and more.

Works in two modes:

- **Search mode** — find filings across all companies by keyword, form type, and date range
- **Company mode** — get all filings for a specific company using ticker symbol or company name

No API key required. Uses the SEC's public EDGAR data APIs.

### Use Cases

- **Financial research** — collect 10-K and 10-Q filings from public companies for analysis
- **Insider trading monitoring** — scrape Form 4 filings to track executive stock transactions
- **IPO pipeline** — monitor S-1 filings for upcoming IPOs
- **Risk signals** — full-text search for phrases like "going concern", "material weakness", or "data breach" across all filings
- **Competitive intelligence** — pull all filings from a specific competitor by ticker symbol
- **Regulatory compliance** — monitor 8-K filings for material events in an industry

### Input

| Field | Type | Description |
|-------|------|-------------|
| `userAgent` | String | **Required.** Your name and email: `"Your Name your@email.com"` — required by SEC fair access policy |
| `mode` | String | `search` (keyword/form search across all companies) or `company` (all filings for one company) |
| `ticker` | String | Stock ticker symbol — e.g. `TSLA`, `AAPL`, `NVDA` (company mode) |
| `companyName` | String | Company name to look up — e.g. `Tesla`, `Apple Inc` (company mode or search filter) |
| `keywords` | String | Full-text search term — e.g. `"going concern"`, `"artificial intelligence"` (search mode) |
| `formTypes` | Array | Form types to include — e.g. `["10-K", "10-Q", "8-K"]`. Leave empty for all types |
| `dateStart` | String | Start of filing date range in `YYYY-MM-DD` format |
| `dateEnd` | String | End of filing date range in `YYYY-MM-DD` format |
| `maxResults` | Integer | Maximum number of filings to return. `0` = no limit (default: 100) |

#### Common Form Types

| Form | Description |
|------|-------------|
| `10-K` | Annual report |
| `10-Q` | Quarterly report |
| `8-K` | Material event disclosure |
| `S-1` | IPO registration statement |
| `4` | Insider stock transaction (Form 4) |
| `DEF 14A` | Proxy statement |
| `SC 13G` | Passive investor ownership disclosure |
| `424B4` | Prospectus |

### Output

Each result includes:

| Field | Description |
|-------|-------------|
| `companyName` | Name of the filing company |
| `ticker` | Stock ticker symbol (when available) |
| `cik` | SEC Central Index Key — unique company identifier |
| `formType` | SEC form type (10-K, 8-K, etc.) |
| `filingDate` | Date the filing was submitted to the SEC |
| `periodOfReport` | The reporting period covered by the filing |
| `accessionNumber` | Unique SEC filing identifier |
| `description` | Filing description or primary document name |
| `url` | Direct link to the filing index on SEC EDGAR |
| `scrapedAt` | Timestamp when the record was collected |

### Example Inputs

**Get Apple's last 20 annual and quarterly reports:**

```json
{
  "userAgent": "Your Name your@email.com",
  "mode": "company",
  "ticker": "AAPL",
  "formTypes": ["10-K", "10-Q"],
  "maxResults": 20
}
```

**Search for "going concern" disclosures in 2026:**

```json
{
  "userAgent": "Your Name your@email.com",
  "mode": "search",
  "keywords": "going concern",
  "formTypes": ["10-K"],
  "dateStart": "2026-01-01",
  "dateEnd": "2026-12-31",
  "maxResults": 50
}
```

**Track Tesla insider trades (Form 4):**

```json
{
  "userAgent": "Your Name your@email.com",
  "mode": "company",
  "ticker": "TSLA",
  "formTypes": ["4"],
  "maxResults": 100
}
```

### Notes

- The `userAgent` field is **required** by the SEC's fair access policy. Use your real name and email — the SEC uses this to identify API users. Example: `"John Smith john@example.com"`
- Rate limit is automatically respected (100ms delay between requests)
- No API key or registration required
- Data is sourced directly from [SEC EDGAR](https://www.sec.gov/edgar/)

# Actor input Schema

## `userAgent` (type: `string`):

Your name and email in the format: 'Your Name your@email.com'. Required by SEC fair access policy to identify requests.

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

search: find filings by keyword/form type across all companies. company: get all filings for a specific company by ticker or name.

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

Full-text search term across filing content (e.g. 'artificial intelligence', 'going concern', 'data breach'). Used in search mode.

## `companyName` (type: `string`):

Company name to search for (e.g. 'Tesla', 'Apple Inc'). Used in company mode or to filter search results.

## `ticker` (type: `string`):

Stock ticker symbol (e.g. TSLA, AAPL, NVDA). Used in company mode to look up a specific company's filings.

## `formTypes` (type: `array`):

SEC form types to include. Common: 10-K (annual report), 10-Q (quarterly report), 8-K (material event), S-1 (IPO), 4 (insider trade), DEF 14A (proxy). Leave empty for all.

## `dateStart` (type: `string`):

Start of filing date range. Example: 2026-01-01

## `dateEnd` (type: `string`):

End of filing date range. Example: 2026-12-31

## `maxResults` (type: `integer`):

Maximum number of filings to return. 0 = no limit.

## Actor input object example

```json
{
  "userAgent": "Research Bot research@example.com",
  "mode": "company",
  "keywords": "",
  "companyName": "",
  "ticker": "AAPL",
  "formTypes": [
    "10-K",
    "10-Q",
    "8-K"
  ],
  "dateStart": "",
  "dateEnd": "",
  "maxResults": 100
}
```

# Actor output Schema

## `companyName` (type: `string`):

Name of the filing company.

## `ticker` (type: `string`):

Stock ticker symbol.

## `cik` (type: `string`):

SEC Central Index Key — unique company identifier.

## `formType` (type: `string`):

SEC form type (10-K, 10-Q, 8-K, S-1, 4, etc.).

## `filingDate` (type: `string`):

Date the filing was submitted to the SEC.

## `periodOfReport` (type: `string`):

The period covered by the filing.

## `accessionNumber` (type: `string`):

SEC unique filing identifier.

## `description` (type: `string`):

Filing description or items reported (for 8-K).

## `url` (type: `string`):

Direct link to the filing index on SEC EDGAR.

## `scrapedAt` (type: `string`):

ISO timestamp when this record was collected.

# 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 = {
    "userAgent": "Research Bot research@example.com",
    "ticker": "AAPL"
};

// Run the Actor and wait for it to finish
const run = await client.actor("spry_frame/sec-edgar-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 = {
    "userAgent": "Research Bot research@example.com",
    "ticker": "AAPL",
}

# Run the Actor and wait for it to finish
run = client.actor("spry_frame/sec-edgar-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 '{
  "userAgent": "Research Bot research@example.com",
  "ticker": "AAPL"
}' |
apify call spry_frame/sec-edgar-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,spry_frame/sec-edgar-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/IVWRfHzQgqfMvKkSO/builds/XGLOpTtbYTVhV8XOG/openapi.json
