# SEC EDGAR Scraper — 10-K, 10-Q, 8-K, Form 4, 13F, Form D (`celebrated-quadraphonic/sec-edgar-filings-scraper`) Actor

Scrape SEC EDGAR filings with zero anti-bot friction: 10-K, 10-Q, 8-K, Form 3/4/5 insider trades, Form D funding, 13F holdings, 13D/G, S-1, proxy statements. XBRL financials, full-text search, monitor mode. Pure HTTP, no browser, no proxies needed.

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

## Pricing

from $0.80 / 1,000 filings

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/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, 10-Q, 8-K, Form 4, 13F, Form D

The most complete SEC EDGAR filings scraper on Apify. Every major SEC form type in **one Actor** — annual & quarterly reports with structured XBRL financials, 8-K current reports with parsed item numbers, insider transactions, private funding rounds, institutional holdings, and more. Pure HTTP via SEC's official public APIs: **no browser, no proxies, no API key**.

### Why this Actor

- **Widest coverage** — 10-K, 10-Q, 8-K, Form 3/4/5, Form D, 13F-HR, 13D/G, S-1, DEF 14A and amendments, in a single run. No need to combine single-form scrapers.
- **Structured XBRL financials** — 10-K/10-Q filings come with machine-readable metrics: revenue, gross profit, operating income, net income, EPS (basic & diluted), total assets, liabilities, equity, cash, long-term debt, shares outstanding.
- **Parsed form details** — Form 4 transactions (reporter, role, buy/sell code, shares, price), Form D offering data (amount offered/sold, investor count, industry, related persons), full 13F holdings tables, 8-K item numbers with headings.
- **Full-text search** — search the text of all SEC filings via the official EFTS index (e.g. `"artificial intelligence"`, `"bitcoin ETF"`).
- **Monitor mode** — `newFilingsOnly` pushes only filings never seen before. Schedule the Actor daily and build a live filings feed for your watchlist.
- **Free preview** — the first 5 filings of every run are free.

### Coverage

| Form | Description | Parsed details |
|------|-------------|----------------|
| 10-K / 10-Q (+ amendments) | Annual & quarterly reports | 12 XBRL metrics: revenue, net income, EPS, assets, liabilities, equity, cash, debt, shares outstanding |
| 8-K (+ amendments) | Current reports (earnings, M\&A, leadership changes) | Item numbers + headings (1.01, 2.02, 5.02, 9.01, …) |
| Form 3 / 4 / 5 (+ amendments) | Insider ownership & transactions | Reporter name, role (director/officer/10% owner), transaction code, shares, price, acquired/disposed, holdings after |
| Form D (+ amendments) | Private placements / funding rounds | Total offered, amount sold, investor count, industry group, related persons |
| 13F-HR (+ amendments) | Institutional holdings (quarterly) | Every holding: issuer, CUSIP, value (USD), shares, voting authority |
| 13D / 13G, S-1, DEF 14A | Beneficial ownership, IPOs, proxy statements | Filing metadata |

### Inputs

- **Companies** — stock tickers (`AAPL`, `BRK.A`), CIKs (`0000320193`) or company names, one per line. Leave empty to use full-text search only.
- **Filing types** — multi-select; leave empty for all supported types.
- **Filed after / before** — date window (`YYYY-MM-DD`).
- **Full-text search query** — searches filing text via SEC EFTS; combines with company and date filters.
- **Parse filing details** / **Include XBRL financial metrics** — enrichment toggles (disable for faster metadata-only runs).
- **Max filings per company** — newest first (default 100, up to 1000).
- **New filings only** — monitor mode (state kept in key-value store).
- **Request concurrency** — parallel requests, max 10 (SEC fair-access limit is 10 req/s; the Actor rate-limits automatically).
- **Contact email** — SEC asks API users to identify via the `User-Agent` header; optional.

### Output

One dataset item per filing:

```json
{
  "companyName": "Apple Inc.",
  "ticker": "AAPL",
  "cik": "0000320193",
  "exchange": "Nasdaq",
  "filingType": "4",
  "filedAt": "2026-09-24",
  "filingUrl": "https://www.sec.gov/Archives/edgar/data/320193/...",
  "formDetails": {
    "reporterName": "Newstead Jennifer",
    "isOfficer": "true",
    "transactions": [
      { "transactionCode": "S", "shares": 2399,
        "pricePerShare": 340.06, "acquiredDisposed": "D" }
    ]
  },
  "xbrlMetrics": null
}
```

Common metadata (company, filing, accession number, document URLs) is always present; `formDetails` holds form-specific parsed data and `xbrlMetrics` holds XBRL financials for 10-K/10-Q.

### Pricing

- First **5 filings per run are free** (preview).
- Then **$0.003 per filing** — metadata, parsed details and XBRL metrics included at no extra charge.

### Use cases

- **Insider trading tracker** — follow Form 4 buys/sells across a watchlist (monitor mode + daily schedule)
- **8-K alert feed** — catch earnings releases, M\&A and leadership changes as they hit EDGAR
- **Funding-lead pipeline** — Form D filings are startups that just raised money
- **13F cloning** — track what Berkshire Hathaway and other institutions hold each quarter
- **Quant datasets** — structured XBRL financials across thousands of companies

### Notes

- Data comes from SEC EDGAR's official public JSON/XML APIs, which are free and rate-limited at 10 requests/second. The Actor stays within the limit and retries transient errors automatically.
- 13F holding values are reported in whole US dollars.

# Actor input Schema

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

Companies to scrape, one per line. Accepts stock tickers (AAPL), CIKs (0000320193) or company names (Apple Inc). Leave empty to use full-text search only.

## `filingTypes` (type: `array`):

SEC form types to include. Select one or more. Leave empty for all supported types.

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

Only filings filed on or after this date (YYYY-MM-DD). Empty = no lower bound.

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

Only filings filed on or before this date (YYYY-MM-DD). Empty = no upper bound.

## `fullTextQuery` (type: `string`):

Optional: search filing full text via the official SEC EFTS index (e.g. "artificial intelligence", "bitcoin"). Combined with company and date filters. Leave empty to skip.

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

Maximum filings returned per company (newest first).

## `includeFilingDetails` (type: `boolean`):

Parse form-specific details: Form 4 transactions, Form D offering amounts, 13F holdings, 8-K items. Disable for faster metadata-only runs.

## `includeXbrlMetrics` (type: `boolean`):

Attach key structured financial metrics (revenue, net income, EPS, assets, ...) from XBRL to 10-K / 10-Q filings.

## `newFilingsOnly` (type: `boolean`):

Monitor mode: only push filings not seen in previous runs (state kept in key-value store). Schedule the Actor to get fresh filings on every run.

## `requestConcurrency` (type: `integer`):

Parallel HTTP requests. SEC fair-access limit is 10 requests/second; keep at 10 or below.

## `contactEmail` (type: `string`):

SEC asks API users to identify with a contact email in the User-Agent header. Optional; a default identifier is used when empty.

## Actor input object example

```json
{
  "companies": [
    "AAPL",
    "MSFT",
    "NVDA"
  ],
  "filingTypes": [
    "10-K",
    "10-Q",
    "8-K",
    "4",
    "D",
    "13F-HR"
  ],
  "startDate": "2025-01-01",
  "maxFilingsPerCompany": 100,
  "includeFilingDetails": true,
  "includeXbrlMetrics": true,
  "newFilingsOnly": false,
  "requestConcurrency": 5
}
```

# 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 = {
    "companies": [
        "AAPL",
        "MSFT",
        "NVDA"
    ],
    "filingTypes": [
        "10-K",
        "10-Q",
        "8-K",
        "4",
        "D",
        "13F-HR"
    ],
    "startDate": "2025-01-01",
    "endDate": "",
    "fullTextQuery": "",
    "maxFilingsPerCompany": 100,
    "includeFilingDetails": true,
    "includeXbrlMetrics": true,
    "newFilingsOnly": false,
    "requestConcurrency": 5,
    "contactEmail": ""
};

// Run the Actor and wait for it to finish
const run = await client.actor("celebrated-quadraphonic/sec-edgar-filings-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",
        "MSFT",
        "NVDA",
    ],
    "filingTypes": [
        "10-K",
        "10-Q",
        "8-K",
        "4",
        "D",
        "13F-HR",
    ],
    "startDate": "2025-01-01",
    "endDate": "",
    "fullTextQuery": "",
    "maxFilingsPerCompany": 100,
    "includeFilingDetails": True,
    "includeXbrlMetrics": True,
    "newFilingsOnly": False,
    "requestConcurrency": 5,
    "contactEmail": "",
}

# Run the Actor and wait for it to finish
run = client.actor("celebrated-quadraphonic/sec-edgar-filings-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",
    "MSFT",
    "NVDA"
  ],
  "filingTypes": [
    "10-K",
    "10-Q",
    "8-K",
    "4",
    "D",
    "13F-HR"
  ],
  "startDate": "2025-01-01",
  "endDate": "",
  "fullTextQuery": "",
  "maxFilingsPerCompany": 100,
  "includeFilingDetails": true,
  "includeXbrlMetrics": true,
  "newFilingsOnly": false,
  "requestConcurrency": 5,
  "contactEmail": ""
}' |
apify call celebrated-quadraphonic/sec-edgar-filings-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,celebrated-quadraphonic/sec-edgar-filings-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/bMhfkKexit9qnROkC/builds/dcy2T0UlnQYSc10st/openapi.json
