# SEC EDGAR Scraper — 10-K, 8-K, Form 4 & 13F (`muhammadafzal/sec-edgar-scraper`) Actor

Scrape official SEC EDGAR 10-K annual reports, 8-K material events, Form 4 insider trading transactions, and 13F institutional holdings with full URLs and CIK lookup.

- **URL**: https://apify.com/muhammadafzal/sec-edgar-scraper.md
- **Developed by:** [Muhammad Afzal](https://apify.com/muhammadafzal) (community)
- **Categories:** Automation, MCP servers
- **Stats:** 1 total users, 0 monthly users, 0.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.20 / 1,000 sec edgar filing delivereds

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 — 10-K, 8-K, Form 4 & 13F

Extract official, structured filings from the U.S. Securities and Exchange Commission (SEC) EDGAR system: **10-K** annual reports, **8-K** material corporate event notifications, **Form 4** insider trading transactions, and **Form 13F** institutional investment manager holdings.

> **Free Plan Bound:** Free users receive up to 5 results per run. Upgrade to an Apify paid tier for higher volume and automated scheduled monitoring.

***

### What It Extracts

This Actor connects directly to SEC EDGAR official repositories and parses both structured filing metadata and deep document payloads:

| Form Type | Key Data Fields Extracted |
| --- | --- |
| **10-K** (Annual Report) | Business description, fiscal year end, auditor info, full list of exhibits, direct interactive data (XBRL) links, and primary document HTML/HTM links. |
| **8-K** (Current Report / Material Events) | Specific item numbers reported (e.g. Item 1.01 Material Agreements, Item 2.02 Earnings releases, Item 5.02 Officer/Director changes, Item 7.01 Reg FD disclosures, Item 8.01 Other events), standard SEC descriptions, event text, and filing links. |
| **Form 4** (Insider Trading) | Reporting owner (insider) name, CIK, relationship (isOfficer, isDirector, isTenPercentOwner), officer title (CEO, CFO, etc.), transaction dates, transaction codes (P=Purchase, S=Sale, M=Option Exercise, A=Award), security titles, shares transacted, price per share ($), total transaction value ($), and post-transaction share ownership. |
| **13F** (Institutional Holdings) | Institutional manager name, CIK, report period date, holdings table entries including CUSIP, issuer name, title of class, market value ($), share count, share type (SH/PRN), investment discretion (SOLE/DFND/OTHR), and voting authority. |

***

### When to Use It

- **Quantitative & Equity Research:** Track insider buying and selling (Form 4) in real time to detect high-conviction management moves.
- **Institutional Portfolio Intelligence:** Analyze quarterly 13F filings from hedge funds, mutual funds, and asset managers (Berkshire Hathaway, Bridgewater, BlackRock) to discover portfolio shifts.
- **Corporate Event Monitoring:** Track earnings releases, material definitive agreements, executive departures, and Reg FD disclosures through 8-K filings.
- **Fundamental & AI Analysis:** Feed structured 10-K annual reports and exhibits directly into LLMs, RAG pipelines, or financial models.

#### When NOT to Use It

- If you need real-time streaming exchange ticks or Level 2 order books (use an equity market data feed).
- If you need non-US sovereign regulatory filings (EDGAR covers US public companies and foreign private issuers filing 20-F/6-K).

***

### Input Parameters

| Parameter | Type | Default | Description |
| --- | --- | --- | --- |
| `tickers` | Array of strings | `["AAPL"]` | Stock ticker symbols (e.g. `AAPL`, `MSFT`, `NVDA`) or 10-digit SEC CIK numbers (`0000320193`). |
| `tickerOrCik` | String | `"AAPL"` | Single ticker symbol, CIK, or company name (used if `tickers` is empty). |
| `formTypes` | Array of strings | `["10-K", "8-K", "4", "13F"]` | Form types to include: `10-K`, `8-K`, `4`, and/or `13F`. |
| `includeAmendments` | Boolean | `true` | Include amended filings (`10-K/A`, `8-K/A`, `4/A`, `13F-HR/A`). |
| `startDate` | String | `null` | Earliest filing date to include (`YYYY-MM-DD`). |
| `endDate` | String | `null` | Latest filing date to include (`YYYY-MM-DD`). |
| `maxFilings` | Integer | `10` | Maximum total filings to return across all companies (1–1000). Free tier limit: 5. |
| `maxFilingsPerCompany` | Integer | `10` | Maximum filings per company or CIK (1–200). |
| `extractDetails` | Boolean | `true` | Deeply parse primary documents (Form 4 transactions, 13F holdings, 8-K items). |
| `expandRecords` | Boolean | `false` | When true, flattens sub-records so each individual insider trade or 13F holding is its own dataset row. When false, 1 row per filing with structured arrays. |
| `customUserAgent` | String | `null` | Custom compliant SEC User-Agent header (format: `Name contact@domain.com`). |

***

### Output Example

Each filing record emitted to the default dataset contains normalized metadata and deep parsed records:

```json
{
  "accessionNumber": "0001140361-26-037584",
  "form": "4",
  "filingDate": "2026-09-22",
  "reportDate": "2026-09-22",
  "acceptanceDateTime": "2026-09-22T18:30:15.000Z",
  "cik": "0000320193",
  "ticker": "AAPL",
  "companyName": "Apple Inc.",
  "entityType": "operating",
  "sic": "3571",
  "sicDescription": "Electronic Computers",
  "primaryDocument": "xslF345X06/form4.xml",
  "primaryDocumentUrl": "https://www.sec.gov/Archives/edgar/data/320193/000114036126037584/form4.xml",
  "filingUrl": "https://www.sec.gov/Archives/edgar/data/320193/000114036126037584/",
  "secArchiveUrl": "https://www.sec.gov/Archives/edgar/data/320193/000114036126037584",
  "isAmendment": false,
  "recordType": "filing",
  "reportingOwnerName": "Williams Jeffrey E",
  "reportingOwnerCik": "0001491979",
  "officerTitle": "COO",
  "isDirector": false,
  "isOfficer": true,
  "isTenPercentOwner": false,
  "insiderSummary": {
    "totalPurchasedShares": 0,
    "totalSoldShares": 2399,
    "totalPurchasedValueUsd": 0,
    "totalSoldValueUsd": 815803.94,
    "netValueUsd": -815803.94,
    "transactionCount": 1
  },
  "transactions": [
    {
      "securityTitle": "Common Stock",
      "transactionDate": "2026-09-22",
      "transactionCode": "S",
      "transactionCodeDescription": "Open market or private sale",
      "shares": 2399,
      "pricePerShare": 340.06,
      "totalValueUsd": 815803.94,
      "acquiredDisposed": "D",
      "sharesOwnedFollowing": 489312,
      "directOrIndirect": "D"
    }
  ]
}
```

***

### Pay-Per-Event (PPE) Pricing

This Actor uses transparent Pay-Per-Event pricing. Platform usage pass-through is disabled: all compute and network costs are fully covered in the event price.

| Event | Free Tier | Bronze (2.5% off) | Silver (5% off) | Gold (20% off) | Description |
| --- | --- | --- | --- | --- | --- |
| `apify-actor-start` | $0.005 | $0.005 | $0.005 | $0.005 | One-time container initialization fee per run. |
| `apify-default-dataset-item` | $0.004 | $0.0039 | $0.0038 | $0.0032 | Charged for each validated filing record delivered. |

#### Worked Example:

- **10 Apple filings extracted:**
  - Start fee: $0.005
  - 10 dataset items: 10 × $0.004 = $0.040
  - **Total cost:** $0.045

***

### Compliance & Rate Limits

This Actor strictly complies with official SEC EDGAR access rules:

- Rate limited to well below the SEC threshold of 10 requests per second.
- Sends an identifiable, valid `User-Agent` header as required by SEC policy.
- All extracted data is public domain record material published by the U.S. Securities and Exchange Commission.

# Actor input Schema

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

List of stock ticker symbols (e.g. AAPL, NVDA, MSFT) or 10-digit SEC CIK numbers (e.g. 0000320193, 0001067983).

## `tickerOrCik` (type: `string`):

Alternative single ticker symbol, CIK, or company name (e.g. 'AAPL', '0000320193', or 'Berkshire Hathaway'). Used if Tickers list is empty.

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

SEC EDGAR form types to scrape: 10-K (Annual report), 8-K (Material events), 4 (Insider trading), and 13F (Institutional portfolio holdings).

## `includeAmendments` (type: `boolean`):

Include amended filings such as 10-K/A, 8-K/A, 4/A, and 13F-HR/A. Enabled by default.

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

Earliest filing date to extract in YYYY-MM-DD format (e.g. 2024-01-01). Filings before this date are skipped.

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

Latest filing date to extract in YYYY-MM-DD format (e.g. 2026-12-31). Filings after this date are skipped.

## `maxFilings` (type: `integer`):

Maximum total filings to scrape and deliver across all companies (1-1000). Free users: maximum 5 results per run.

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

Maximum filings to scrape per company or CIK (1-200).

## `extractDetails` (type: `boolean`):

When true, fetches and parses primary documents: Form 4 insider transactions, 13F portfolio holdings, 8-K reported items, and 10-K exhibit details.

## `expandRecords` (type: `boolean`):

When true, flattens sub-records so each individual insider trade (Form 4) and stock holding (13F) is saved as an individual dataset row. When false (default), 1 dataset item is emitted per filing with embedded arrays.

## `customUserAgent` (type: `string`):

Custom User-Agent header following SEC guidelines (e.g., 'MyCompany admin@mycompany.com'). If omitted, a default compliant User-Agent is used.

## Actor input object example

```json
{
  "tickers": [
    "AAPL"
  ],
  "tickerOrCik": "AAPL",
  "formTypes": [
    "10-K",
    "8-K",
    "4",
    "13F"
  ],
  "includeAmendments": true,
  "maxFilings": 10,
  "maxFilingsPerCompany": 10,
  "extractDetails": true,
  "expandRecords": false
}
```

# Actor output Schema

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

Schema-validated SEC EDGAR records delivered to the default dataset.

## `summary` (type: `string`):

Aggregated execution summary and statistics in the default Key-Value Store.

# 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"
    ],
    "tickerOrCik": "AAPL",
    "formTypes": [
        "10-K",
        "8-K",
        "4",
        "13F"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("muhammadafzal/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"],
    "tickerOrCik": "AAPL",
    "formTypes": [
        "10-K",
        "8-K",
        "4",
        "13F",
    ],
}

# Run the Actor and wait for it to finish
run = client.actor("muhammadafzal/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"
  ],
  "tickerOrCik": "AAPL",
  "formTypes": [
    "10-K",
    "8-K",
    "4",
    "13F"
  ]
}' |
apify call muhammadafzal/sec-edgar-scraper --silent --output-dataset

```

## MCP server setup

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