# SEC EDGAR Company & Filing Crawler (`jungle_synthesizer/sec-edgar-crawler`) Actor

Crawl SEC EDGAR company data and filings. Extract tickers, CIK, SIC codes, addresses, officers, and filing records. Search by ticker, company name, CIK, or SIC code. 800K+ companies, 12M+ filings.

- **URL**: https://apify.com/jungle\_synthesizer/sec-edgar-crawler.md
- **Developed by:** [BowTiedRaccoon](https://apify.com/jungle_synthesizer) (community)
- **Categories:** Business, Lead generation, Other
- **Stats:** 4 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per event

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 EDGAR Company & Filing Crawler

Extract company data and SEC filings from the [EDGAR database](https://www.sec.gov/edgar). Covers 800K+ public companies and 12M+ filings — tickers, CIK numbers, SIC codes, business addresses, officer names, and the full filing history including 10-K, 10-Q, 8-K, Form 4, and a dozen other form types. The actor also supports EDGAR full-text search (EFTS) via the efts.sec.gov/LATEST/search-index endpoint, letting you search by keyword, company name, or ticker across the entire filing corpus.

### SEC EDGAR Crawler Features

- Search by ticker symbol, company name, CIK, or SIC industry code
- Run in metadata-only mode for speed, or include recent filings for depth — your call
- Filter filings by form type and date range, because scrolling through 12 million records manually is not a hobby
- Filter results by state of incorporation across all 50 states plus DC
- Reads SEC's structured JSON APIs directly — no HTML parsing, no guesswork
- Stays within SEC fair-access policy: 10 req/sec rate limit, compliant User-Agent header
- Pay-per-event pricing at roughly $0.001 per record

### Who Uses SEC EDGAR Data and Why?

- **Financial analysts** — screen public companies by industry, filing activity, or filer category without assembling it by hand
- **Compliance teams** — monitor new filings by form type or date range for companies they care about
- **B2B sales professionals** — build prospecting lists of public companies with addresses, phone numbers, and SIC classifications
- **Investment researchers** — pull bulk company metadata and insider transaction counts into screening models
- **Legal and regulatory teams** — track 8-K current event filings and ownership disclosures (SC 13G/13D) for specific entities

### How SEC EDGAR Crawler Works

1. You provide one or more search criteria: ticker symbols, company names, CIK numbers, or an SIC code. Mixing them is fine.
2. The crawler resolves every input to a CIK number using SEC's ticker registry and full-text search index, deduplicates, and fetches the structured submission record for each company.
3. Each record is assembled into a clean output object — company metadata, addresses, officers, filing counts, and optionally the recent filings list filtered to your specifications.

### Input

#### Basic: Look up companies by ticker

```json
{
  "tickers": ["AAPL", "MSFT", "TSLA"],
  "includeFilings": true,
  "maxItems": 50
}
```

#### Filter by filing type and date range

```json
{
  "tickers": ["AAPL"],
  "includeFilings": true,
  "filingType": "10-K",
  "dateFrom": "2020-01-01",
  "dateTo": "2025-12-31",
  "maxItems": 10
}
```

#### Search by SIC code (entire industry)

```json
{
  "sicCode": "3674",
  "includeFilings": false,
  "maxItems": 200
}
```

#### Input Parameters

| Field | Type | Default | Description |
|-------|------|---------|-------------|
| tickers | string\[] | — | Stock ticker symbols (e.g. AAPL, MSFT). Leave empty to use other search methods. |
| companyName | string | `""` | Search by company name. Partial match supported. |
| cikNumbers | string\[] | — | Direct CIK number lookup. The most specific identifier SEC has. |
| sicCode | string | `""` | SIC industry code (e.g. `3674` for semiconductors). Returns all companies in that classification. |
| filingType | string | `""` | Filter by form type: 10-K, 10-Q, 8-K, Form 4, SC 13G, SC 13D, DEF 14A, S-1, S-3, 20-F, 6-K, ARS. |
| stateOfIncorporation | string | `""` | Two-letter state code. Filters results to companies incorporated in that state. |
| dateFrom | string | `""` | Filing date range start (YYYY-MM-DD). |
| dateTo | string | `""` | Filing date range end (YYYY-MM-DD). |
| includeFilings | boolean | `true` | Include recent filing records per company. Set to `false` for metadata only — runs faster. |
| maxItems | integer | `50` | Maximum company records to return. Set to `0` for unlimited. |

### SEC EDGAR Crawler Output Fields

#### Company Record

```json
{
  "company_name": "Apple Inc.",
  "cik": "0000320193",
  "ticker": "AAPL",
  "exchange": "Nasdaq",
  "sic_code": "3571",
  "sic_description": "Electronic Computers",
  "state_of_incorporation": "CA",
  "fiscal_year_end": "0926",
  "entity_type": "operating",
  "category": "Large accelerated filer",
  "business_street": "ONE APPLE PARK WAY",
  "business_city": "CUPERTINO",
  "business_state": "CA",
  "business_zip": "95014",
  "business_phone": "(408) 996-1010",
  "mailing_street": "ONE APPLE PARK WAY",
  "mailing_city": "CUPERTINO",
  "mailing_state": "CA",
  "mailing_zip": "95014",
  "officers": ["Tim Cook - CEO", "Luca Maestri - CFO"],
  "filing_count": 2211,
  "insider_transaction_count": 845,
  "ein": "942404110"
}
```

| Field | Type | Description |
|-------|------|-------------|
| company\_name | string | Legal name as registered with the SEC |
| cik | string | SEC Central Index Key — the unique company identifier |
| ticker | string | Stock ticker symbol |
| exchange | string | Stock exchange (NYSE, Nasdaq, etc.) |
| sic\_code | string | Standard Industrial Classification code |
| sic\_description | string | Human-readable industry name |
| state\_of\_incorporation | string | State or country of incorporation |
| fiscal\_year\_end | string | Fiscal year end in MMDD format |
| entity\_type | string | Entity type (operating, shell, etc.) |
| category | string | SEC filer category (Large accelerated filer, Accelerated filer, etc.) |
| business\_street | string | Business address street |
| business\_city | string | Business address city |
| business\_state | string | Business address state |
| business\_zip | string | Business address ZIP code |
| business\_phone | string | Business phone number |
| mailing\_street | string | Mailing address street |
| mailing\_city | string | Mailing address city |
| mailing\_state | string | Mailing address state |
| mailing\_zip | string | Mailing address ZIP code |
| officers | string\[] | Company officers — name and title |
| filing\_count | number | Total number of filings on record |
| insider\_transaction\_count | number | Total insider transaction filings (Forms 3, 4, 5) |
| ein | string | Employer Identification Number |

#### Filing Record (when `includeFilings` is `true`)

```json
{
  "form": "10-K",
  "filing_date": "2024-11-01",
  "report_date": "2024-09-28",
  "accession_number": "0000320193-24-000123",
  "primary_document": "aapl-20240928.htm",
  "document_url": "https://www.sec.gov/Archives/edgar/data/320193/0000320193-24-000123/aapl-20240928.htm"
}
```

| Field | Type | Description |
|-------|------|-------------|
| form | string | Filing form type (10-K, 10-Q, 8-K, etc.) |
| filing\_date | string | Date the filing was submitted |
| report\_date | string | Reporting period end date |
| accession\_number | string | SEC accession number — unique filing identifier |
| primary\_document | string | Primary document filename |
| document\_url | string | Direct URL to the filing document on SEC.gov |

### FAQ

**How many companies does SEC EDGAR Crawler cover?**
SEC EDGAR Crawler pulls from the full EDGAR database — over 800,000 registered entities and 12 million filings. If a company has filed with the SEC, it is in there.

**Does it handle pagination automatically?**
Yes. The crawler pages through SEC's full-text search index internally, up to 10,000 results per query. You have better things to do.

**Do I need proxies to run this?**
No. SEC's APIs are public and require no authentication. The crawler ships with proxy support disabled by default because it genuinely does not need it — just a compliant User-Agent header and rate limiting, both of which are handled for you.

**What is the difference between metadata-only and filing modes?**
Set `includeFilings` to `false` and you get company data without the filing list — faster runs, lower cost. Set it to `true` and each company record includes its recent filings, filtered by form type and date range if you specified them.

**Can I search an entire industry at once?**
Pass an SIC code and the crawler returns every company classified under it. SIC `3674` gets you semiconductors, `6022` gets you commercial banks. The SEC has opinions about how to categorize things.

### Need More Features?

Need custom fields, filters, or a different target site? [File an issue](https://console.apify.com/actors/issues) or get in touch.

### Why Use SEC EDGAR Crawler?

- **Two modes, one actor** — Company metadata and filing records come from the same run, not two separate tools stitched together with hope.
- **Priced per record** — Roughly $0.001 per company record, which compares favorably to competitors charging 20-30x that or locking data behind monthly subscriptions.
- **Built on structured APIs** — Reads SEC's JSON endpoints directly, so it does not break when someone rearranges a table on a webpage.

***

**Further reading:** [Government Data You Didn't Know Was Scrapable: 13 Federal Databases in One Toolkit](https://orbtop.com/articles/government-data-you-didnt-know-was-scrapable/)

# Actor input Schema

## `sp_intended_usage` (type: `string`):

Please describe how you plan to use the data extracted by this crawler.

## `sp_improvement_suggestions` (type: `string`):

Provide any feedback or suggestions for improvements.

## `sp_contact` (type: `string`):

Provide your email address so we can get in touch with you.

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

One or more stock ticker symbols (e.g. AAPL, MSFT, TSLA). Leave empty to search by company name or SIC code.

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

Search for companies by name. Supports partial match. Used when ticker is not known.

## `cikNumbers` (type: `array`):

One or more SEC Central Index Key numbers. Most specific identifier.

## `sicCode` (type: `string`):

Filter by Standard Industrial Classification code (e.g. '3674' for semiconductors). Returns all companies in that industry.

## `filingType` (type: `string`):

Filter filings by form type. Leave empty for all types.

## `stateOfIncorporation` (type: `string`):

Filter by state of incorporation.

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

Start date for filing date range filter (YYYY-MM-DD).

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

End date for filing date range filter (YYYY-MM-DD).

## `includeFilings` (type: `boolean`):

Include recent filing records for each company. When disabled, only company metadata is returned (faster).

## `maxItems` (type: `integer`):

Maximum number of company records to return. Set to 0 for unlimited.

## Actor input object example

```json
{
  "sp_intended_usage": "Describe your intended use...",
  "sp_improvement_suggestions": "Share your suggestions here...",
  "sp_contact": "Share your email here...",
  "tickers": [
    "AAPL"
  ],
  "includeFilings": true,
  "maxItems": 50
}
```

# 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 = {
    "sp_intended_usage": "Describe your intended use...",
    "sp_improvement_suggestions": "Share your suggestions here...",
    "sp_contact": "Share your email here...",
    "tickers": [
        "AAPL"
    ],
    "companyName": "",
    "sicCode": "",
    "filingType": "",
    "stateOfIncorporation": "",
    "dateFrom": "",
    "dateTo": "",
    "includeFilings": true,
    "maxItems": 50
};

// Run the Actor and wait for it to finish
const run = await client.actor("jungle_synthesizer/sec-edgar-crawler").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 = {
    "sp_intended_usage": "Describe your intended use...",
    "sp_improvement_suggestions": "Share your suggestions here...",
    "sp_contact": "Share your email here...",
    "tickers": ["AAPL"],
    "companyName": "",
    "sicCode": "",
    "filingType": "",
    "stateOfIncorporation": "",
    "dateFrom": "",
    "dateTo": "",
    "includeFilings": True,
    "maxItems": 50,
}

# Run the Actor and wait for it to finish
run = client.actor("jungle_synthesizer/sec-edgar-crawler").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 '{
  "sp_intended_usage": "Describe your intended use...",
  "sp_improvement_suggestions": "Share your suggestions here...",
  "sp_contact": "Share your email here...",
  "tickers": [
    "AAPL"
  ],
  "companyName": "",
  "sicCode": "",
  "filingType": "",
  "stateOfIncorporation": "",
  "dateFrom": "",
  "dateTo": "",
  "includeFilings": true,
  "maxItems": 50
}' |
apify call jungle_synthesizer/sec-edgar-crawler --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

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