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

Get SEC EDGAR data for any US-listed company: filings (10-K, 10-Q, 8-K), insider trades from Form 4, annual financials and company profiles.

- **URL**: https://apify.com/maged120/sec-edgar-scraper.md
- **Developed by:** [Maged](https://apify.com/maged120) (community)
- **Categories:** News, Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $5.00 / 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

**Get SEC EDGAR data for any US-listed company in one run.** Enter tickers or company names and get **filings** (10-K, 10-Q, 8-K and more), **insider trades** from Form 4 (who bought or sold, how many shares, at what price), **annual financials** (revenue, net income, EPS, cash flow, balance sheet) and **company profiles**, all as clean, export-ready rows.

### What does SEC EDGAR Scraper do?

SEC EDGAR Scraper collects official company data from [SEC EDGAR](https://www.sec.gov/edgar/search/), the US Securities and Exchange Commission's filing database. Instead of clicking through filings one by one, you get structured tables you can drop straight into Excel, Google Sheets, a database or your trading model.

It runs on the Apify platform, so you also get API access, scheduled runs, integrations (Google Sheets, Slack, Zapier, Make, webhooks) and run monitoring.

### Why use SEC EDGAR Scraper?

- **Insider trading signals**: track when executives and directors buy or sell their own company's stock, with share counts, prices and dollar values.
- **Event monitoring**: catch new 8-K filings (earnings, executive changes, acquisitions) as soon as they're filed by scheduling the actor.
- **Fundamental analysis**: get years of revenue, profit, EPS, cash flow and balance-sheet figures without manual copying.
- **Due diligence and research**: build company profiles with industry codes, filer status, incorporation state and former names.
- **Compliance and journalism**: keep a searchable record of every filing a company makes.

### How to get SEC filings, insider trades and financials

1. Open the **Input** tab.
2. Add **companies** as tickers (`AAPL`), CIK numbers (`320193`) or names (`Microsoft`).
3. Choose what to collect: profile, filings, insider trades and/or financials.
4. Optionally filter by **filing type** and **date**.
5. Click **Start**, then download the results as JSON, CSV, Excel or HTML, or pull them through the API.

### Input

| Field | Description |
|---|---|
| `companies` | Tickers, CIK numbers or company names. |
| `includeCompanyProfile` | One profile row per company. Default on. |
| `includeFilings` | One row per filing. Default on. |
| `includeInsiderTrades` | One row per Form 4 insider transaction. Default on. |
| `includeFinancials` | One row per fiscal year of key financials. Default on. |
| `formTypes` | Only these filing types, for example `10-K`, `8-K`. Empty = all. |
| `dateFrom` | Only filings and insider reports filed on or after this date. |
| `maxFilingsPerCompany` | Default 50 (0 = all recent). |
| `maxInsiderReportsPerCompany` | Form 4 reports to read per company. Default 25. |
| `financialYears` | Number of most recent fiscal years. Default 5. |

```json
{
    "companies": ["AAPL", "TSLA", "Microsoft"],
    "formTypes": ["10-K", "10-Q", "8-K"],
    "dateFrom": "2025-01-01",
    "maxInsiderReportsPerCompany": 25,
    "financialYears": 5
}
```

### Output

Each row has an `entityType`: `company`, `filing`, `insider_trade` or `financials`. You can download the dataset in various formats such as JSON, HTML, CSV, or Excel.

**Insider trade**

```json
{
    "entityType": "insider_trade",
    "companyName": "Apple Inc.",
    "ticker": "AAPL",
    "insiderName": "Khan Sabih",
    "insiderRoles": ["Officer"],
    "officerTitle": "COO",
    "transactionDate": "2026-09-27",
    "security": "Restricted Stock Unit",
    "transactionCode": "A",
    "transactionType": "Grant or award",
    "acquiredOrDisposed": "Acquired",
    "shares": 47645,
    "pricePerShare": 0,
    "sharesOwnedAfter": 47645,
    "ownership": "Direct",
    "tradingPlan10b5_1": false,
    "filingIndexUrl": "https://www.sec.gov/Archives/edgar/data/320193/000114036126038028/0001140361-26-038028-index.htm"
}
```

**Annual financials**

```json
{
    "entityType": "financials",
    "companyName": "Apple Inc.",
    "fiscalYearEnd": "2025-09-27",
    "currency": "USD",
    "revenue": 416161000000,
    "grossProfit": 195201000000,
    "operatingIncome": 133050000000,
    "netIncome": 112010000000,
    "epsDiluted": 7.46,
    "operatingCashFlow": 111482000000,
    "totalAssets": 359241000000,
    "stockholdersEquity": 73733000000,
    "cashAndEquivalents": 35934000000,
    "longTermDebt": 78328000000
}
```

**Filing**

```json
{
    "entityType": "filing",
    "companyName": "Apple Inc.",
    "form": "10-Q",
    "filingDate": "2026-07-31",
    "reportDate": "2026-06-27",
    "accessionNumber": "0000320193-26-000020",
    "documentUrl": "https://www.sec.gov/Archives/edgar/data/320193/000032019326000020/aapl-20260627.htm",
    "filingIndexUrl": "https://www.sec.gov/Archives/edgar/data/320193/000032019326000020/0000320193-26-000020-index.htm"
}
```

#### Data fields

| Row type | Main fields |
|---|---|
| Company | name, tickers, exchanges, industry and SIC code, filer category, state of incorporation, fiscal year end, address, phone, EIN, former names |
| Filing | form type, filed date, period, acceptance time, 8-K items, document and filing links, size |
| Insider trade | insider name and roles, officer title, trade date, security, transaction type, acquired/disposed, shares, price, value, shares owned after, direct/indirect, 10b5-1 plan flag |
| Financials | revenue, cost of revenue, gross profit, operating income, net income, EPS (basic and diluted), R\&D, operating cash flow, capex, dividends, assets, liabilities, equity, cash, long-term debt |

#### Dataset views

**Filings**, **Insider trades**, **Financials** and **Companies**: each view shows the columns that matter for that row type.

### How many results will I get?

One profile row per company, one row per filing (up to `maxFilingsPerCompany`), one row per insider transaction (a single Form 4 often contains several), and one row per fiscal year of financials. Turn off the parts you don't need to keep runs small.

### Tips

- **Insider buying only**: filter the output on `transactionCode = P` (open-market purchases). These are the classic insider-confidence signal.
- **Daily 8-K alerts**: schedule a daily run with `formTypes: ["8-K"]` and `dateFrom` set to yesterday.
- **Banks and insurers** report differently, so fields like gross profit may be empty for them. That's expected.
- **Foreign companies** that file 20-F or 40-F reports are supported for financials where they report in US GAAP.

### FAQ

**Is this data official?**
Yes. All data comes from the SEC's public EDGAR system, the same filings investors and regulators use.

**How current is the data?**
New filings appear within minutes of being accepted by the SEC. Each run collects the latest data.

**Why is a financial figure empty?**
Companies use different line items. When a company doesn't report a metric (for example, banks don't report gross profit), the field stays empty instead of being guessed.

**Something missing or broken?**
Open an issue in the **Issues** tab and we'll look at it quickly. Need more financial metrics, quarterly data or full-text search? Get in touch through the same tab.

***

⭐ **Found this Actor useful?** A quick review on the Store helps other users find it and keeps it maintained.

# Actor input Schema

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

One per line: a stock ticker (AAPL), a CIK number (320193) or a company name (Microsoft).

## `includeCompanyProfile` (type: `boolean`):

One row per company: industry, filer category, state of incorporation, fiscal year end, address, phone, former names.

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

One row per filing (10-K, 10-Q, 8-K, S-1, 13D and more) with dates, 8-K items and direct document links.

## `includeInsiderTrades` (type: `boolean`):

One row per insider transaction: who traded, their role, buy/sell/grant, shares, price, value and holdings after.

## `includeFinancials` (type: `boolean`):

One row per fiscal year: revenue, gross profit, operating and net income, EPS, cash flow, assets, liabilities, equity, cash and debt.

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

Only return these filing types, for example 10-K, 10-Q, 8-K. Leave empty for all types.

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

Only filings and insider reports filed on or after this date. Leave empty for all recent filings.

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

0 = all recent filings (up to about 1,000 per company).

## `maxInsiderReportsPerCompany` (type: `integer`):

Number of Form 4 reports to read per company. Each report can contain several transactions. 0 = all.

## `financialYears` (type: `integer`):

How many most recent fiscal years to return.

## Actor input object example

```json
{
  "companies": [
    "AAPL",
    "TSLA"
  ],
  "includeCompanyProfile": true,
  "includeFilings": true,
  "includeInsiderTrades": true,
  "includeFinancials": true,
  "formTypes": [
    "10-K",
    "10-Q",
    "8-K"
  ],
  "maxFilingsPerCompany": 50,
  "maxInsiderReportsPerCompany": 25,
  "financialYears": 5
}
```

# Actor output Schema

## `dataset` (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 = {
    "companies": [
        "AAPL",
        "TSLA"
    ],
    "formTypes": [
        "10-K",
        "10-Q",
        "8-K"
    ],
    "maxFilingsPerCompany": 50,
    "maxInsiderReportsPerCompany": 25,
    "financialYears": 5
};

// Run the Actor and wait for it to finish
const run = await client.actor("maged120/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",
        "TSLA",
    ],
    "formTypes": [
        "10-K",
        "10-Q",
        "8-K",
    ],
    "maxFilingsPerCompany": 50,
    "maxInsiderReportsPerCompany": 25,
    "financialYears": 5,
}

# Run the Actor and wait for it to finish
run = client.actor("maged120/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",
    "TSLA"
  ],
  "formTypes": [
    "10-K",
    "10-Q",
    "8-K"
  ],
  "maxFilingsPerCompany": 50,
  "maxInsiderReportsPerCompany": 25,
  "financialYears": 5
}' |
apify call maged120/sec-edgar-scraper --silent --output-dataset

```

## MCP server setup

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