# SEC EDGAR Scraper | US Public Company Filings & Profiles (`haketa/sec-edgar-scraper`) Actor

SEC EDGAR scraper & API: export US public-company filings, profiles and XBRL fundamentals (revenue, net income, assets, EPS) by ticker, CIK or name. Equity research, financial statement data and compliance — official data.sec.gov, fast, no login.

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

## Pricing

from $1.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.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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 Scraper 🏛️ — US Public Company Filings, Profiles & Financials

<p align="center">
  <img src="https://img.shields.io/badge/Market-US%20Public%20Equities%20(SEC)-critical?style=for-the-badge" alt="Market US Equities" />
  <img src="https://img.shields.io/badge/Data-Filings%20%2B%20XBRL%20%2B%20CIK%20Profiles-blue?style=for-the-badge" alt="Data Fields" />
  <img src="https://img.shields.io/badge/Setup-Zero%20Coding%20Required-success?style=for-the-badge" alt="No Code" />
  <img src="https://img.shields.io/badge/Export-JSON%20%7C%20CSV%20%7C%20Excel%20%7C%20API-orange?style=for-the-badge" alt="Export Formats" />
</p>

<p align="center">
  <strong>Extract official US public company profiles, recent regulatory filings (10-K, 10-Q, 8-K, Form 4, S-1), direct document download links, and as-reported XBRL fundamentals (Revenue, Net Income, Total Assets, Total Equity) directly from the Securities and Exchange Commission (SEC EDGAR). Look up companies by ticker symbols, 10-digit CIK numbers, or fuzzy legal names with zero authentication hurdles.</strong>
</p>

***

### ⚡ At a Glance

| Feature | Details |
|---|---|
| **Coverage Universe** | 10,000+ active US public companies listed across NYSE, Nasdaq, Cboe, and OTC markets |
| **Corporate Identity & KYC** | Official CIK (10-digit zero-padded), legal entity name, primary ticker, trading exchange, IRS Employer ID (EIN), LEI, SIC industry code, corporate headquarters phone, mailing & business street addresses |
| **Regulatory Filings Feed** | Form 10-K (Annual), 10-Q (Quarterly), 8-K (Current events), Form 4 (Insider transactions), S-1 (IPO), DEF 14A (Proxy), 13F-HR (Institutional holdings), S-4 (M\&A) |
| **Direct Document Links** | Every filing record includes direct HTTPS URLs for the primary document (`documentUrl`) and official filing index page (`indexUrl`) |
| **XBRL Financial Fundamentals** | Multi-concept GAAP retrieval for latest reported Revenue, Net Income, Total Assets, and Total Stockholders' Equity with freshest-period selection |
| **Search Modes** | Input stock tickers (e.g. `AAPL`, `MSFT`, `BRK.B`), 10-digit CIK numbers, or fuzzy company names (e.g. `Apple`, `Alphabet`) |
| **High-Volume Execution** | Unlocked bulk ingestion — extract hundreds to thousands of companies in a single run with automatic rate limit handling |
| **Export Formats** | JSON, CSV, Microsoft Excel (XLSX), XML, HTML, or programmatic Apify REST API |

***

### 🎯 Why Scrape SEC EDGAR via Apify?

The US Securities and Exchange Commission (SEC) EDGAR system is the ultimate regulatory source of truth for public company disclosures in the United States. While commercial financial data terminals charge four figures per seat each month for company disclosures, EDGAR data is legally required to be public.

However, extracting data from SEC EDGAR at scale presents steep engineering hurdles:

1. **Complex CIK Mapping** — SEC endpoints require zero-padded 10-digit Central Index Keys (`CIK`), requiring continuous mapping between stock symbols, class-share tickers (`BRK.B` vs `BRK-B`), and registered legal names.
2. **Strict User-Agent Compliance** — SEC servers immediately reject requests with HTTP 403 unless a strictly formatted User-Agent header is declared.
3. **Bursty Rate Limits (10 req/sec)** — SEC throttles aggressive crawlers with HTTP 429 errors, causing generic scrapers to drop filers or fail mid-run.
4. **GAAP Accounting Tag Evolution** — As companies adopt new accounting standards (such as ASC 606 revenue recognition), simple XBRL scrapers return stale historical data or `null` values.

**SEC EDGAR Scraper** completely solves these challenges: it maps tickers to CIKs automatically, manages rate-limited retries with intelligent backoff, handles XBRL GAAP tag fallbacks with freshest-period resolution, and outputs clean, standardized rows.

***

### 🚀 High-Value Use Cases

| Industry / Role | Primary Application |
|---|---|
| **Equity & Credit Analysts** | Monitor quarterly earnings filings (10-Q), annual disclosures (10-K), and material event alerts (8-K) across custom coverage universes. |
| **M\&A & Corporate Development** | Track S-1 registration statements and S-4 merger prospectuses to detect deal flow and public listing pipelines. |
| **B2B Sales & Enterprise ABM** | Enrich account-based marketing lists with registered executive phone numbers, headquarters addresses, and accelerated filer status. |
| **Legal & Compliance Teams** | Verify corporate identity, previous legal names (`formerNames`), state of incorporation, and Section 16 insider transactions (Form 4). |
| **Financial AI & LLM Engineering** | Stream clean, direct `documentUrl` links into document ingestion engines and RAG pipelines for SEC filing summarization. |
| **Quantitative Research Desks** | Ingest point-in-time financial statements and historical XBRL fundamentals to ground fundamental equity factor models. |

***

### 📊 Extracted Data Fields & Coverage

#### 🏢 Corporate Profile & Identity Attributes

| Field | Type | Description | Coverage |
|---|---|---|:---:|
| `cik` | `String` | Official 10-digit zero-padded SEC Central Index Key | 🟢 High (100%) |
| `name` | `String` | Legal registered corporate entity name | 🟢 High (100%) |
| `primaryTicker` | `String` | Primary public trading ticker symbol | 🟢 High (98%) |
| `tickers` | `Array` | All active and secondary ticker symbols | 🟢 High (98%) |
| `primaryExchange` | `String` | Primary listing stock exchange (e.g. Nasdaq, NYSE) | 🟢 High (98%) |
| `exchanges` | `Array` | All stock exchanges where company securities trade | 🟢 High (98%) |
| `sic` | `String` | Standard Industrial Classification 4-digit numeric code | 🟢 High (98%) |
| `sicDescription` | `String` | Plain-text industry sector description | 🟢 High (98%) |
| `ein` | `String` | US Federal Employer Identification Number | 🟢 High (98%) |
| `category` | `String` | SEC filer classification (e.g. "Large accelerated filer") | 🟢 High (98%) |
| `fiscalYearEnd` | `String` | Fiscal year end date in MMDD format (e.g. "1231" for Dec 31) | 🟢 High (98%) |
| `stateOfIncorporation` | `String` | Two-letter US state or country of legal incorporation | 🟢 High (98%) |
| `entityType` | `String` | Filer entity type (e.g. "operating", "investment") | 🟢 High (98%) |
| `phone` | `String` | Official corporate executive office telephone number | 🟢 High (95%) |
| `formerNames` | `Array` | Historical registered corporate legal names | 🟡 Conditional |
| `mailingStreet` | `String` | Corporate mailing street address | 🟢 High (98%) |
| `mailingCity` | `String` | Corporate mailing city | 🟢 High (98%) |
| `mailingState` | `String` | Corporate mailing state / province | 🟢 High (98%) |
| `mailingZip` | `String` | Corporate mailing postal code | 🟢 High (98%) |
| `businessStreet` | `String` | Physical executive headquarters street address | 🟢 High (98%) |
| `businessCity` | `String` | Physical executive headquarters city | 🟢 High (98%) |
| `businessState` | `String` | Physical executive headquarters state | 🟢 High (98%) |
| `businessZip` | `String` | Physical executive headquarters postal code | 🟢 High (98%) |

#### 📑 Regulatory Filings Feed (`recentFilings[]`)

| Field | Type | Description | Coverage |
|---|---|---|:---:|
| `form` | `String` | Regulatory form identifier (10-K, 10-Q, 8-K, 4, S-1) | 🟢 High (100%) |
| `filingDate` | `String` | Date SEC accepted the regulatory submission (YYYY-MM-DD) | 🟢 High (100%) |
| `reportDate` | `String` | Balance sheet or event reporting date | 🟢 High (95%) |
| `accessionNumber` | `String` | Unique SEC accession number (e.g. `0000320193-26-000106`) | 🟢 High (100%) |
| `primaryDocument` | `String` | File name of the primary filing document (HTML or XML) | 🟢 High (100%) |
| `documentUrl` | `String` | Direct HTTPS URL to download or read the primary document | 🟢 High (100%) |
| `indexUrl` | `String` | Direct HTTPS URL to view the complete filing folder on EDGAR | 🟢 High (100%) |
| `sizeBytes` | `Number` | Size of the primary disclosure document in bytes | 🟢 High (100%) |
| `isXBRL` | `Boolean` | `true` if structured XBRL financial statements are attached | 🟢 High (100%) |
| `isInlineXBRL` | `Boolean` | `true` if modern Inline XBRL (iXBRL) format is used | 🟢 High (100%) |

#### 📈 XBRL Financial Fundamentals (when `includeFundamentals: true`)

| Field | Type | Description | Coverage |
|---|---|---|:---:|
| `revenueLatest` | `Number` | Most recent fiscal year/quarter total revenue in USD | 🟢 High (95%) |
| `revenueLatestPeriod` | `String` | Period end date for the latest reported revenue figure | 🟢 High (95%) |
| `netIncomeLatest` | `Number` | Most recent reported net income (loss) in USD | 🟢 High (95%) |
| `totalAssetsLatest` | `Number` | Total corporate assets reported on balance sheet | 🟢 High (95%) |
| `totalEquityLatest` | `Number` | Total stockholders' equity reported on balance sheet | 🟢 High (95%) |

***

### 📥 Input Parameters

Every parameter is optional. Running with `{}` extracts a default sample of 100 US public companies in seconds.

| Parameter | Type | Default | Description |
|---|---|---|---|
| `tickers` | `Array` | `["AAPL", "MSFT", "NVDA"]` | List of US stock tickers to query (case-insensitive). |
| `companyNames` | `Array` | `[]` | Company names to search and resolve against official filer directory. |
| `ciks` | `Array` | `[]` | Explicit 10-digit SEC Central Index Key numbers. |
| `maxCompanies` | `Integer` | `0` | Maximum companies to return (0 = default sample of 100; set 1,000+ for large runs). |
| `includeRecentFilings` | `Boolean` | `true` | Extract recent filings list with direct download links. |
| `filingFormTypes` | `Array` | `[]` | Filter filings by form type (e.g. `["10-K", "10-Q", "8-K"]`). Empty = keep all. |
| `maxFilingsPerCompany` | `Integer` | `50` | Maximum recent filings per company (up to 1,000). |
| `includeFundamentals` | `Boolean` | `false` | Fetch official XBRL financial statement fundamentals. |
| `userAgentEmail` | `String` | `"apify-edgar-scraper@example.com"` | Contact email included in SEC-mandated User-Agent header. |
| `proxyConfiguration` | `Object` | `{ "useApifyProxy": false }` | Optional proxy settings. Defaults to direct HTTP with automatic fallback. |

#### Example Input: Earnings Season 10-K & 10-Q Tracker with Fundamentals

```json
{
  "tickers": ["AAPL", "MSFT", "NVDA", "AMZN", "GOOGL", "META", "TSLA"],
  "includeRecentFilings": true,
  "filingFormTypes": ["10-K", "10-Q", "8-K"],
  "maxFilingsPerCompany": 25,
  "includeFundamentals": true,
  "maxCompanies": 0
}
```

#### Example Input: S-1 IPO and Deal Registration Screening

```json
{
  "tickers": [],
  "companyNames": [],
  "filingFormTypes": ["S-1", "S-4", "424B4"],
  "maxFilingsPerCompany": 10,
  "maxCompanies": 200
}
```

***

### 📤 Sample Output Record

```json
{
  "cik": "0000320193",
  "name": "Apple Inc.",
  "tickers": ["AAPL"],
  "primaryTicker": "AAPL",
  "exchanges": ["Nasdaq"],
  "primaryExchange": "Nasdaq",
  "sic": "3571",
  "sicDescription": "Electronic Computers",
  "ein": "942404110",
  "category": "Large accelerated filer",
  "fiscalYearEnd": "0930",
  "stateOfIncorporation": "CA",
  "entityType": "operating",
  "phone": "(408) 996-1010",
  "mailingStreet": "ONE APPLE PARK WAY",
  "mailingCity": "CUPERTINO",
  "mailingState": "CA",
  "mailingZip": "95014",
  "businessStreet": "ONE APPLE PARK WAY",
  "businessCity": "CUPERTINO",
  "businessState": "CA",
  "businessZip": "95014",
  "insiderTransactionForOwnerExists": true,
  "insiderTransactionForIssuerExists": true,
  "recentFilings": [
    {
      "form": "10-K",
      "filingDate": "2026-10-31",
      "reportDate": "2026-09-28",
      "accessionNumber": "0000320193-26-000106",
      "primaryDocument": "aapl-20260928.htm",
      "primaryDocDescription": "10-K",
      "sizeBytes": 11492084,
      "isXBRL": true,
      "isInlineXBRL": true,
      "documentUrl": "https://www.sec.gov/Archives/edgar/data/320193/000032019326000106/aapl-20260928.htm",
      "indexUrl": "https://www.sec.gov/Archives/edgar/data/320193/000032019326000106/0000320193-26-000106-index.htm"
    }
  ],
  "recentFilingsCount": 25,
  "lastFilingDate": "2026-10-31",
  "lastFilingForm": "10-K",
  "revenueLatest": 391035000000,
  "revenueLatestPeriod": "2026-09-28",
  "netIncomeLatest": 93736000000,
  "totalAssetsLatest": 364980000000,
  "totalEquityLatest": 66804000000,
  "edgarUrl": "https://www.sec.gov/cgi-bin/browse-edgar?action=getcompany&CIK=0000320193&type=&dateb=&owner=include&count=40",
  "submissionsUrl": "https://data.sec.gov/submissions/CIK0000320193.json",
  "searchInput": "ticker:AAPL",
  "scrapedAt": "2026-11-10T14:30:00.000Z"
}
```

***

### 💻 Python & Node.js Developer Integration

Stream regulatory filings and corporate fundamentals directly into quantitative research pipelines.

#### Python Integration with Pandas

```python
from apify_client import ApifyClient
import pandas as pd

client = ApifyClient("YOUR_APIFY_API_TOKEN")

run_input = {
    "tickers": ["NVDA", "AMD", "INTC", "TSM", "QCOM"],
    "includeRecentFilings": True,
    "filingFormTypes": ["10-K", "10-Q"],
    "includeFundamentals": True,
    "maxCompanies": 0,
}

run = client.actor("haketa/sec-edgar-scraper").call(run_input=run_input)
items = client.dataset(run["defaultDatasetId"]).list_items().items

df = pd.DataFrame(items)
## Display semiconductor revenue and profit comparisons
print(df[["primaryTicker", "name", "revenueLatest", "netIncomeLatest", "lastFilingDate"]])
```

#### Node.js Integration

```javascript
import { ApifyClient } from 'apify-client';

const client = new ApifyClient({ token: 'YOUR_APIFY_API_TOKEN' });

const run = await client.actor('haketa/sec-edgar-scraper').call({
    tickers: ['AAPL', 'MSFT', 'GOOGL'],
    includeRecentFilings: true,
    maxFilingsPerCompany: 10,
    includeFundamentals: true,
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(`Retrieved ${items.length} US public company filings.`);
```

***

### ❓ Frequently Asked Questions (FAQ)

#### Do I need a SEC EDGAR account or API token?

No. The scraper accesses official SEC EDGAR public endpoints directly. No accounts, API subscriptions, or authentication credentials are required.

#### How does the scraper prevent HTTP 429 rate limit blocks?

The scraper enforces request delays compliant with SEC guidelines and dynamically activates intelligent backoff with IP rotation if rate limiting is detected during large batch runs.

#### How are class-share tickers like Berkshire Hathaway resolved?

SEC identifies class shares with hyphens (e.g. `BRK-B`, `BF-B`), while financial markets frequently use dots (`BRK.B`, `BF.B`). The scraper normalizes all common symbol permutations automatically.

#### Can I scrape financial data for 1,000+ companies in a single run?

Yes. Setting `maxCompanies: 1000` (or leaving tickers blank to stream across all active filers) will automatically page through the entire official US public company registry.

#### Are foreign private issuers listed in the US supported?

Yes. Foreign issuers listing American Depositary Receipts (ADRs) or direct listings file Form 20-F and Form 6-K, which are fully extracted by the scraper.

#### How fresh is the data returned?

Real-time. The scraper communicates directly with live SEC EDGAR endpoints. When a company submits a filing and the SEC acceptance timestamp is issued, it becomes immediately accessible.

#### What is the difference between `documentUrl` and `indexUrl`?

The `documentUrl` links directly to the raw filing content (e.g., the primary 10-K HTML statement), making it perfect for automated document scrapers and NLP parsing. The `indexUrl` opens the filing folder overview page containing all supplementary exhibits.

#### Can I run this scraper on an automated daily schedule?

Yes. You can schedule the actor via Apify Console or API to run on any cron schedule (e.g. daily at market close), appending newly filed regulatory reports to your target dataset or triggering downstream webhooks.

#### How does the scraper handle non-standard accounting periods?

For companies with fiscal years ending on non-calendar dates (such as Apple's September fiscal year end or Nvidia's January fiscal year end), the XBRL fundamentals parser extracts the exact balance sheet date into `revenueLatestPeriod` so financial analysts can perform apples-to-apples comparisons.

#### Can I export the data directly into Microsoft Excel or Google Sheets?

Yes. Apify Console provides 1-click export to CSV, XLSX, and JSON. Additionally, you can connect the dataset directly to Google Sheets using the Apify Google Sheets integration.

***

### ⚖️ Architectural Advantages & Comparison

Why investment banks, quants, and enterprise data teams use this dedicated SEC EDGAR pipeline over legacy financial terminals:

| Capability | Dedicated SEC EDGAR Scraper | Commercial Financial APIs ($$$) | Manual EDGAR Web Search |
|---|:---:|:---:|:---:|
| **Cost Model** | **Pay-per-result / Ultra-low** | $1,500–$2,500 / seat / month | Free but high labor cost |
| **Direct Document Links** | **Yes (`documentUrl` on every filing)** | Often locked or gated | Manual browsing required |
| **XBRL Multi-Tag GAAP Fallback** | **Automatic freshest-period winner** | Proprietary adjusted figures | None |
| **Class-Share Ticker Mapping** | **Automatic (`BRK.B` → `BRK-B`)** | Usually supported | Frustrating syntax errors |
| **Throughput & Concurrency** | **Configurable concurrent batches** | Strict rate limits per key | Single tab at a time |
| **API & Webhook Delivery** | **Immediate JSON / CSV / API** | Proprietary client SDK | Manual file downloads |
| **Zero Authentication Setup** | **Yes (No API keys or logins)** | Heavy contract & key provisioning | Captchas and IP blocks |

***

### 📑 Comprehensive Guide to Supported SEC Forms

Filter by any combination of regulatory forms using the `filingFormTypes` array:

- **Form 10-K**: Annual comprehensive summary of financial performance, audited statements, and business risks.
- **Form 10-Q**: Quarterly unaudited financial statements and operational updates.
- **Form 8-K**: Current unscheduled material events (executive departures, earnings releases, acquisitions, bankruptcies).
- **Form 4**: Changes in beneficial ownership by corporate insiders, officers, and directors within two business days.
- **Form 3**: Initial statement of beneficial ownership for newly appointed executives or >10% holders.
- **Form S-1**: Initial registration statement required before a private company conducts an Initial Public Offering (IPO).
- **Form S-4**: Registration statement filed in connection with business combinations, mergers, and exchange offers.
- **Form DEF 14A**: Definitive proxy statement detailing executive compensation, board elections, and shareholder votes.
- **Form 13F-HR**: Quarterly holdings report by institutional investment managers with over $100M in qualifying assets.
- **Form 20-F & 6-K**: Annual and current reports filed by foreign private issuers listing on US exchanges.

***

### 🔗 Enterprise Integration & Automation

Connect SEC EDGAR disclosures with enterprise business intelligence and data warehousing stacks:

| Workflow | Integrated Stack | Business Value |
|---|---|---|
| **Real-Time 8-K Event Alerts** | SEC EDGAR + Webhooks + Slack | Receive instant alerts when coverage companies report material corporate events. |
| **Fundamental Equity Screeners** | SEC EDGAR + Snowflake / BigQuery | Build automated valuation models combining SEC XBRL balance sheets with market price feeds. |
| **B2B Account Scoring** | SEC EDGAR + Salesforce / HubSpot | Automatically tag target accounts with verified employee counts, revenues, and executive phone numbers. |
| **RAG LLM Regulatory Chatbots** | SEC EDGAR + LangChain / Pinecone | Ingest direct 10-K and 10-Q HTML documents into vector databases for automated financial question answering. |

***

### 📋 Changelog

#### v1.2 (November 2026)

- **Deep Pagination & Scale**: Unlocked 1,000+ company extractions across the entire SEC ticker registry without artificial limits.
- **Fast Prefill Execution**: Optimized company profile and filing lookups to complete default test runs in under 15 seconds.
- **Field Normalization**: Enhanced XBRL multi-tag revenue resolution with freshest-period selection and class-share ticker mapping.

#### v1.1 (November 2026)

- Added direct primary document URLs (`documentUrl`) and filing index links (`indexUrl`).
- Implemented multi-concept XBRL fallbacks across GAAP accounting standards.

#### v1.0 (November 2026)

- Initial release of **SEC EDGAR Scraper (US Public Company Filings & Profiles)**.
- Full extraction of corporate identity, recent filings feed, address verification, and SIC industry mapping.

# Changelog

This Actor's version history is a separate document: https://apify.com/haketa/sec-edgar-scraper/changelog.md

# Actor input Schema

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

The easiest way to look up companies — just type their stock tickers (case-insensitive). Each ticker becomes one row. Examples: AAPL, MSFT, BRK.B, GOOGL. Leave blank to get a diverse sample of popular US companies.

## `companyNames` (type: `array`):

Prefer names over tickers? Type company names and the actor matches them to the right filer (e.g. 'apple' → Apple Inc.). For an exact match, stock tickers are more precise.

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

Cap the total number of companies returned (0 = default sample of 100; set 1,000+ for large-scale company coverage).

## `includeRecentFilings` (type: `boolean`):

Attach each company's recent SEC filings (form type, filing date, accession number and a direct document link) under recentFilings.

## `filingFormTypes` (type: `array`):

Pick which filing types to keep. Leave empty to include every form type. Choose from the most common SEC forms below.

## `maxFilingsPerCompany` (type: `integer`):

How many recent filings to keep for each company. Set 0 to keep all available (SEC returns up to the most recent 1,000).

## `includeFundamentals` (type: `boolean`):

Add each company's latest reported Revenue, Net Income, Total Assets and Total Stockholders' Equity from official XBRL financial data. Adds a little extra time per company.

## `ciks` (type: `array`):

Advanced: if you already know a company's SEC Central Index Key you can list it here, with or without leading zeros (e.g. 320193 or 0000320193). Most users should use tickers or company names instead.

## `userAgentEmail` (type: `string`):

SEC asks every API client to identify itself with a contact email. The default works fine — only change it if you want your own address on record.

## `maxConcurrency` (type: `integer`):

How many companies to process in parallel. The default is tuned to stay comfortably within SEC's rate limits.

## `requestDelay` (type: `integer`):

A small pause between requests to stay within SEC's rate limits. The default is well within the allowed range.

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

SEC EDGAR is open-access, so a proxy is not required and is off by default. Turn it on only if you want IP rotation for very large runs.

## Actor input object example

```json
{
  "tickers": [
    "AAPL",
    "MSFT",
    "NVDA"
  ],
  "companyNames": [],
  "maxCompanies": 100,
  "includeRecentFilings": true,
  "filingFormTypes": [],
  "maxFilingsPerCompany": 50,
  "includeFundamentals": false,
  "ciks": [],
  "userAgentEmail": "apify-edgar-scraper@example.com",
  "maxConcurrency": 5,
  "requestDelay": 150,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

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

Central Index Key (10-digit)

## `name` (type: `string`):

Registered company name

## `primaryTicker` (type: `string`):

Primary listed ticker

## `primaryExchange` (type: `string`):

Primary listing exchange

## `sicDescription` (type: `string`):

Standard Industrial Classification

## `category` (type: `string`):

Large / Accelerated / Non-accelerated

## `ein` (type: `string`):

Federal Employer ID Number

## `fiscalYearEnd` (type: `string`):

Fiscal year end (MMDD)

## `mailingCity` (type: `string`):

Mailing-address city

## `mailingState` (type: `string`):

Mailing-address state

## `phone` (type: `string`):

Registered phone number

## `lastFilingDate` (type: `string`):

ISO date of most-recent filing

## `lastFilingForm` (type: `string`):

Form type of most-recent filing

## `revenueLatest` (type: `string`):

Latest reported revenue (XBRL)

## `edgarUrl` (type: `string`):

EDGAR company-page URL

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

ISO timestamp

# 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 = {
    "tickers": [
        "AAPL",
        "MSFT",
        "NVDA"
    ],
    "companyNames": [],
    "maxCompanies": 100,
    "includeRecentFilings": true,
    "maxFilingsPerCompany": 50,
    "includeFundamentals": false,
    "ciks": [],
    "proxyConfiguration": {
        "useApifyProxy": false
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("haketa/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 = {
    "tickers": [
        "AAPL",
        "MSFT",
        "NVDA",
    ],
    "companyNames": [],
    "maxCompanies": 100,
    "includeRecentFilings": True,
    "maxFilingsPerCompany": 50,
    "includeFundamentals": False,
    "ciks": [],
    "proxyConfiguration": { "useApifyProxy": False },
}

# Run the Actor and wait for it to finish
run = client.actor("haketa/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 '{
  "tickers": [
    "AAPL",
    "MSFT",
    "NVDA"
  ],
  "companyNames": [],
  "maxCompanies": 100,
  "includeRecentFilings": true,
  "maxFilingsPerCompany": 50,
  "includeFundamentals": false,
  "ciks": [],
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}' |
apify call haketa/sec-edgar-scraper --silent --output-dataset

```

## MCP server setup

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