# SEC EDGAR Scraper - Filings, Financials & Companies (`scrapesage/sec-edgar-scraper`) Actor

Scrape SEC EDGAR: full-text search every filing (10-K, 10-Q, 8-K, S-1, Form 4, Form D…), pull any company's profile, recent filings & document links, and structured XBRL financials (revenue, net income, assets, EPS). Search by ticker, CIK, name, form or date. Monitoring mode. No API key.

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

## Pricing

from $1.38 / 1,000 company scrapeds

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 - Filings, Financials & Companies

> **Disclaimer:** This Actor is an independent tool and is not affiliated with, endorsed by, or sponsored by the U.S. Securities and Exchange Commission (SEC) or any government body. All trademarks mentioned are the property of their respective owners. "SEC EDGAR" is referenced only to describe the public data source this Actor collects from.

Extract **everything public on [SEC EDGAR](https://www.sec.gov/edgar)** - run a **full-text search across every filing** (10-K, 10-Q, 8-K, S-1, Form 4 insider trades, Form D raises…), pull any **company's profile** (industry, address, phone, website, fiscal year) plus its **recent filings with document links**, and get **structured XBRL financials** (revenue, net income, assets, equity, EPS) with multi-year history. Built straight on the SEC's own open-data endpoints.

No API key, no login, no browser - and an optional **monitoring mode** that returns only new filings on each run, perfect for alerting on the latest 10-Ks, 8-Ks and insider Form 4s.

### Why this EDGAR scraper?

This actor rolls **three jobs into one tool** and ships **a complete dataset**: the filing index, the full company profile *and* parsed financial statements, all from the authoritative source.

| Data | This actor |
| --- | --- |
| Full-text search across all filings (keyword, form, date) | ✅ up to 1,000/run |
| Company profile (industry/SIC, EIN, fiscal year, state) | ✅ |
| **Contact fields** - business address, phone, website | ✅ when filed |
| Recent filings with **document & filing-index links** | ✅ up to 1,000 |
| **Structured XBRL financials** (revenue, net income, assets, EPS…) | ✅ with multi-year history |
| Resolve by **ticker, CIK or company name** | ✅ all three |
| **Monitoring mode** - only new filings | ✅ |
| One run, three jobs (search · filings · financials) | ✅ |

### Use cases

- **Investment & equity research** - pull a company's financial history (revenue, margins, EPS, balance sheet) straight from its XBRL filings, and track every new disclosure as it lands.
- **Filing & insider monitoring** - schedule the search with monitoring mode to capture only *new* 10-Ks, 8-Ks, S-1s or insider Form 4s for the companies and topics you follow - sentiment, risk and event signals.
- **Funding & lead generation** - surface companies raising capital (Form D) or going public (S-1), with their business address, phone and website for outreach and BD.
- **Compliance & due diligence** - confirm a company's CIK, EIN, state of incorporation, industry (SIC) and filing history from the authoritative regulator.
- **Market & thematic research** - full-text search every filing for a theme ("artificial intelligence", "supply chain", a competitor name) and see which companies disclose it and when.

### How to use

1. [Sign up for Apify](https://console.apify.com/sign-up) - the free plan is enough to try this actor.
2. Open the **SEC EDGAR Scraper**, pick a **mode** (Company filings, Financials, or Full-text search), fill in the matching field, and click **Start**.
3. Watch results stream into the dataset table as each record is parsed.
4. **Export** as JSON, CSV, Excel, XML, or RSS - or pull results programmatically via the [Apify API](https://docs.apify.com/api/v2).

### Input

Get a company's profile and recent annual/quarterly filings (by ticker, CIK or name):

```json
{
    "mode": "companyFilings",
    "companies": ["AAPL", "Tesla", "0000789019"],
    "formTypes": ["10-K", "10-Q", "8-K"],
    "maxFilingsPerCompany": 50
}
```

Full-text search every filing for a theme, on a schedule, getting only new hits each run:

```json
{
    "mode": "search",
    "searchQuery": "\"artificial intelligence\"",
    "forms": ["10-K", "8-K"],
    "startDate": "2025-01-01",
    "maxResults": 200,
    "monitorMode": true
}
```

- **mode** - `companyFilings`, `financials`, or `search`.
- **companies** - tickers (`AAPL`), CIK numbers (`320193` / `0000320193`) or company names (`Tesla`); used by Company filings & Financials, and optionally to scope Search.
- **searchQuery / forms / startDate / endDate** - full-text search phrase, form-type filter and date window (Search mode).
- **formTypes** - restrict a company's filing list to these forms (Company filings mode).
- **includeProfile / includeFilings** - choose whether to emit the company profile, the filing list, or both.
- **maxFilingsPerCompany / maxResults** - caps for the filing list and the search.
- **monitorMode / monitorStoreName** - emit only filings not seen in previous runs (see **Monitoring** below).
- **userAgent** - the SEC asks clients to identify themselves; optionally set your own `Name email@domain.com`.
- **proxyConfiguration** - proxy settings (Apify proxy by default).

### Output

One dataset; every row is tagged with a `type` (`filing`, `company`, or `financials`). Use the **Filings**, **Companies**, and **Financials** views to switch the columns.

A company profile (`type: "company"`) - note the contact fields for lead-gen:

```json
{
    "type": "company",
    "cik": "0000320193",
    "name": "Apple Inc.",
    "tickers": ["AAPL"],
    "exchanges": ["Nasdaq"],
    "sicDescription": "Electronic Computers",
    "category": "Large accelerated filer",
    "ein": "942404110",
    "stateOfIncorporation": "CA",
    "phone": "(408) 996-1010",
    "businessAddress": "ONE APPLE PARK WAY, CUPERTINO, CA, 95014",
    "website": null,
    "formerNames": ["APPLE COMPUTER INC"],
    "filingsCount": 1000,
    "lastFilingForm": "4",
    "lastFilingDate": "2026-05-29",
    "profileUrl": "https://www.sec.gov/cgi-bin/browse-edgar?action=getcompany&CIK=0000320193"
}
```

A filing (`type: "filing"`):

```json
{
    "type": "filing",
    "form": "10-K",
    "companyName": "Apple Inc.",
    "cik": "0000320193",
    "tickers": ["AAPL"],
    "filingDate": "2025-11-01",
    "reportDate": "2025-09-27",
    "accessionNumber": "0000320193-25-000xxx",
    "isXBRL": true,
    "documentUrl": "https://www.sec.gov/Archives/edgar/data/320193/000032019325000xxx/aapl-20250927.htm",
    "filingIndexUrl": "https://www.sec.gov/Archives/edgar/data/320193/000032019325000xxx/"
}
```

A financials record (`type: "financials"`) carries curated XBRL metrics, each with a `latest` value and multi-year `history`:

```json
{
    "type": "financials",
    "name": "Apple Inc.",
    "ticker": "AAPL",
    "cik": "0000320193",
    "conceptsAvailable": 503,
    "metrics": {
        "revenue": {
            "unit": "USD",
            "latest": { "value": 383285000000, "fiscalYear": 2025, "periodEnd": "2025-09-27", "form": "10-K" },
            "history": [ { "value": 383285000000, "fiscalYear": 2025 }, { "value": 391035000000, "fiscalYear": 2024 } ]
        },
        "netIncome": { "latest": { "value": 96995000000, "fiscalYear": 2025 } },
        "totalAssets": { "latest": { "value": 364980000000 } },
        "epsDiluted": { "latest": { "value": 6.13 } }
    }
}
```

**Coverage notes.** All data comes from the SEC's own endpoints, so core fields (CIK, name, form, dates, document links) are authoritative and near-universal. Contact fields (address, phone, website) appear when the filer provides them. Financials come from XBRL structured data, available for operating-company filers (most don't tag every concept - the actor curates the most common ~20 metrics and includes whatever is present). EDGAR's full-text search covers filings from 2001 onward and exposes up to 10,000 matches per query. An empty result is reported as a successful run.

### Monitoring - get only new filings

Turn on **`monitorMode`** to make repeat runs incremental. The actor remembers the **accession numbers** it has already returned (in a named key-value store, **`monitorStoreName`**) and emits **only filings that are new since the last run**.

- Track a **company** and capture only its *new filings* - get alerted the moment a 10-K, 8-K or insider Form 4 is filed.
- Track a **full-text query** and capture only *new filings* mentioning your theme or competitor.
- It works **alongside [Apify Schedules](https://docs.apify.com/platform/schedules)**, not against them: the schedule triggers the run on your cron; monitoring mode dedupes against earlier runs so each run yields only fresh filings. Use a distinct `monitorStoreName` per tracked target so their histories stay separate.

### How much does it cost to scrape SEC EDGAR?

This Actor uses Apify's **pay-per-event** pricing: you are charged only for the results it delivers, with no monthly rental and no start fee. The events it can charge are:

- **Company Scraped** - One company record: a full profile (name, tickers, exchanges, SIC/industry, EIN, fiscal year, state of incorporation, business address, phone, website, former names) or a curated XBRL financials record (revenue, net income, assets, equity, EPS and more, with multi-year history)
- **Filing Scraped** - One SEC filing record: form type, filing & period dates, company, CIK, tickers, accession number, document and filing-index links, plus XBRL flags and location/SIC metadata.

The current price of each event is shown on the **Pricing** tab of this page. Set a maximum total charge on the run if you want a hard cap on spend, and use the input limits to control how much the Actor fetches.

### Automate & schedule

Run this actor on autopilot and pull results into your own stack:

- **[Apify API](https://docs.apify.com/api/v2)** - start runs, fetch datasets, and manage schedules over REST.
- **[apify-client for JavaScript](https://docs.apify.com/api/client/js/)** and **[apify-client for Python](https://docs.apify.com/api/client/python/)** - official SDKs.
- **[Schedules](https://docs.apify.com/platform/schedules)** - run it on a cron to keep filings and financials fresh.
- **[Webhooks](https://docs.apify.com/platform/integrations/webhooks)** - trigger downstream actions the moment a run finishes.

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

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

const run = await client.actor('scrapesage/sec-edgar-scraper').call({
    mode: 'financials',
    companies: ['AAPL', 'MSFT', 'NVDA'],
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(`Got ${items.length} records`);
```

### Integrate with any app

Connect the dataset to 5,000+ apps - no code required:

- **[Make](https://docs.apify.com/platform/integrations/make)** - multi-step automation scenarios.
- **[Zapier](https://docs.apify.com/platform/integrations/zapier)** - push new filings straight into your CRM, sheet or research tool.
- **[Slack](https://docs.apify.com/platform/integrations/slack)** - get notified when a monitored company files something new.
- **[Google Drive / Sheets](https://docs.apify.com/platform/integrations/drive)** - auto-export every run to a spreadsheet.
- **[Airbyte](https://docs.apify.com/platform/integrations/airbyte)** - pipe results into your data warehouse.
- **[GitHub](https://docs.apify.com/platform/integrations/github)** - trigger runs from commits or releases.

### Use with AI assistants (MCP)

The output is clean, LLM-ready JSON. Call this actor from Claude, ChatGPT, or any agent framework through the **[Apify MCP server](https://docs.apify.com/platform/integrations/mcp)** - ask your assistant to "pull Apple's last five years of revenue and net income from SEC filings" and let it run this scraper for you.

### Agent-ready: autonomous payments (x402 & Skyfire)

This actor is **agent-ready**: AI agents can discover it, run it, and **pay for it autonomously**, with no Apify account and no human in the loop. It uses [pay-per-event](https://docs.apify.com/platform/actors/publishing/monetize/pay-per-event) pricing and [limited permissions](https://docs.apify.com/platform/actors/development/permissions), so it qualifies for Apify's agentic-payment standards:

- **[x402](https://docs.apify.com/platform/integrations/x402)**: an open, HTTP-native payment protocol. Agents pay per run in USDC on the Base network directly through the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp), with no account and no API key.
- **[Skyfire](https://docs.apify.com/platform/integrations/skyfire)**: agent-to-service payments for fully autonomous AI-agent workflows.

Building an AI agent, MCP tool, or autonomous data pipeline? This scraper is ready to plug in and pay as it goes.

### More scrapers from scrapesage

Build a complete **company, financial & regulatory intelligence stack** - pair SEC data with global registries, contracts and hiring signals:

- **[Companies House Scraper](https://apify.com/scrapesage/companies-house-scraper)** - UK company register: profiles, directors, PSCs (beneficial owners) & filings.
- **[SAM.gov Scraper](https://apify.com/scrapesage/sam-gov-scraper)** - US federal contract opportunities & buyer contacts.
- **[Y Combinator Scraper](https://apify.com/scrapesage/ycombinator-scraper)** - startups, founders & jobs from the YC directory.
- **[Product Hunt Scraper](https://apify.com/scrapesage/product-hunt-scraper)** - new product launches, makers & leads.
- **[Google Ads Transparency Scraper](https://apify.com/scrapesage/google-ads-transparency-scraper)** - who's advertising what on Google.
- **[LinkedIn Jobs Scraper](https://apify.com/scrapesage/linkedin-jobs-scraper)** - job postings as hiring-intent signals.
- **[Google Play Scraper](https://apify.com/scrapesage/google-play-scraper)** & **[Apple App Store Scraper](https://apify.com/scrapesage/app-store-scraper)** - app-market intelligence on both stores.

### Tips

- **Resolve by anything:** put tickers, CIK numbers or company names in `companies` - the actor maps them all to the right CIK (it tries ticker first, then name).
- **Financials:** the `metrics` block curates ~20 of the most-used GAAP concepts; each has a `latest` value plus a multi-year `history`. Use the `documentUrl` on the matching 10-K filing to read the full statements.
- **Full-text search:** wrap exact phrases in quotes (`"\"climate risk\""`), filter by `forms` (e.g. `4` for insider trades, `D` for private raises) and a date window.
- **Monitoring:** give each tracked company or query its own `monitorStoreName`, then schedule the run - you'll only ever process new filings.
- **Be a good citizen:** the SEC rate-limits ~10 requests/second per IP; keep `maxConcurrency` at 5 or below and set a `userAgent` with your contact details.

### FAQ

**Do I need an SEC account or API key?** No. EDGAR is public US-government open data - no login, key, or cookies.

**Can I look up companies by name or ticker, not just CIK?** Yes - `companies` accepts tickers (`AAPL`), CIK numbers (`320193`) and names (`Tesla`); the actor resolves them to the correct CIK automatically.

**How far back does the data go?** Company filing histories cover up to the 1,000 most recent filings; full-text search covers filings from 2001 onward (up to 10,000 matches per query). XBRL financials go back to whenever the company began tagging (typically ~2009+).

**Does it include the full text of each filing?** It returns the **document URL and filing-index URL** for every filing, so you can fetch the exact 10-K/10-Q/8-K document you need. The financials mode parses the structured XBRL data into metrics for you.

**Can I export to Google Sheets, CSV, or Excel?** Yes - one click in the dataset view, or automatically on every run via the [Google Drive integration](https://docs.apify.com/platform/integrations/drive).

**Is scraping SEC EDGAR legal?** EDGAR is public data published by the U.S. Securities and Exchange Commission for exactly this kind of access. This actor follows the SEC's fair-access guidance (descriptive User-Agent, modest request rate). You're responsible for complying with the SEC's terms and applicable laws.

### Disclaimer

**This Actor is an independent tool and is not affiliated with, endorsed by, or sponsored by the U.S. Securities and Exchange Commission (SEC) or any government body. All trademarks mentioned are the property of their respective owners.**

"SEC EDGAR" is referenced only in a descriptive, nominative sense - to identify the public data source this Actor collects from. This Actor is not an official product or service of the U.S. Securities and Exchange Commission (SEC) and is not authorised or certified by it. It collects only publicly available records; you are responsible for ensuring your use of that data complies with applicable laws, regulations and the source's own terms of use or reuse conditions.

### Need help?

Open an issue on the actor's **Issues** tab, or visit the [Apify help center](https://help.apify.com/). Feature requests are welcome - this actor is actively maintained.

# Actor input Schema

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

Pick a job. Company filings pulls a company's profile + recent filings. Financials returns structured XBRL financial metrics. Search runs an EDGAR full-text search across every filing.

## `companies` (type: `array`):

Companies to scrape, as stock tickers (<code>AAPL</code>), CIK numbers (<code>320193</code> or <code>0000320193</code>) or names (<code>Tesla</code>). Used by Company filings & Financials; optional in Search to scope results to these filers.

## `searchQuery` (type: `string`):

Full-text search phrase across all EDGAR filings, e.g. <code>"artificial intelligence"</code> or <code>cybersecurity breach</code>. (Mode: Full-text search.)

## `forms` (type: `array`):

Restrict the full-text search to these form types, e.g. <code>10-K</code>, <code>8-K</code>, <code>S-1</code>, <code>4</code>, <code>D</code>. Leave empty for all forms. (Mode: Full-text search.)

## `startDate` (type: `string`):

Only filings on or after this date (YYYY-MM-DD). (Mode: Full-text search.)

## `endDate` (type: `string`):

Only filings on or before this date (YYYY-MM-DD). (Mode: Full-text search.)

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

In Company filings mode, only return filings of these form types, e.g. <code>10-K</code>, <code>10-Q</code>, <code>8-K</code>, <code>4</code>. Leave empty for all forms.

## `includeProfile` (type: `boolean`):

Emit one company profile record per company (name, tickers, exchanges, SIC/industry, address, phone, website, fiscal year, former names).

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

Emit the company's recent filings (form, date, document links, XBRL flags).

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

Cap the number of recent filings returned per company (EDGAR exposes up to 1000).

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

Cap the number of filings returned by the full-text search (EDGAR exposes up to 10,000; this actor fetches up to 1,000 per run).

## `monitorMode` (type: `boolean`):

Remember filings already returned and emit ONLY filings not seen in previous runs - ideal for scheduled runs that alert on new 10-Ks, 8-Ks or insider Form 4s. Works alongside Apify Schedules.

## `monitorStoreName` (type: `string`):

Named key-value store that holds the 'already seen' accession numbers for monitoring mode. Use a different name per tracked target to keep histories separate.

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

The SEC's fair-access policy asks every client to identify itself. Optionally set your own <code>Name email@domain.com</code>. A working default is used if left blank.

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

Maximum parallel requests. The SEC rate-limits ~10 requests/second per IP, so keep this at 5 or below.

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

Proxy settings. EDGAR is public US-government data with no anti-bot, so the default Apify proxy is plenty.

## Actor input object example

```json
{
  "mode": "companyFilings",
  "companies": [
    "AAPL"
  ],
  "includeProfile": true,
  "includeFilings": true,
  "maxFilingsPerCompany": 50,
  "maxResults": 100,
  "monitorMode": false,
  "monitorStoreName": "sec-edgar-monitor",
  "userAgent": "",
  "maxConcurrency": 5,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `results` (type: `string`):

All scraped records in the default dataset. Filing rows carry form, dates, company and document links; company rows carry the full profile and contact fields; financials rows carry curated XBRL metrics with history.

# 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 = {
    "companies": [
        "AAPL"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("scrapesage/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 = { "companies": ["AAPL"] }

# Run the Actor and wait for it to finish
run = client.actor("scrapesage/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 '{
  "companies": [
    "AAPL"
  ]
}' |
apify call scrapesage/sec-edgar-scraper --silent --output-dataset

```

## MCP server setup

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