# SEC EDGAR Company Filings Scraper (`wheaten_fernland/sec-edgar-filings`) Actor

SEC EDGAR company filings by ticker or CIK, excluding insider forms (3, 4, 5, D). Get 10-K, 10-Q, 8-K and more with direct document links.

- **URL**: https://apify.com/wheaten\_fernland/sec-edgar-filings.md
- **Developed by:** [Charls P](https://apify.com/wheaten_fernland) (community)
- **Categories:** Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per usage

This Actor is paid per platform usage. The Actor is free to use, and you only pay for the Apify platform usage, which gets cheaper the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-usage

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## SEC EDGAR Company Filings Scraper

Pulls company filing metadata from the U.S. Securities and Exchange Commission's
EDGAR system by stock ticker or CIK number, and returns it as structured rows
with direct links to each filing document.

Built for people who need to watch what companies file — analysts, compliance
teams, journalists, and anyone wiring a filings feed into Make, n8n or Zapier.

### What you get, per filing

| Field | Meaning |
|---|---|
| `companyName`, `cik`, `tickers`, `exchanges` | Who filed |
| `sic`, `sicDescription`, `stateOfIncorporation`, `filerCategory` | Company classification |
| `formType` | `10-K`, `10-Q`, `8-K`, `DEF 14A`, … |
| `filingDate`, `reportDate`, `acceptanceDateTime` | When it was filed and what period it covers |
| `items` | For 8-K filings, the reported items |
| `documentUrl` | Direct link to the filing document |
| `filingIndexUrl` | Link to the filing's index page |
| `isXBRL`, `sizeBytes` | Machine-readable flag and document size |

### What this Actor will not return

**Forms 3, 4, 5 and Form D are excluded, always.** These report named
individuals' personal securities holdings and transactions. They are personal
data, and this Actor does not collect or resell personal data.

The exclusion cannot be switched off. If you request Form 4 explicitly, the run
tells you why it will not be served rather than quietly returning nothing.

This is a deliberate product boundary, not a missing feature. It is also not a
small slice: in testing, **604 of Apple's 1,000 most recent filings and 752 of
Microsoft's were these forms**. If insider-transaction data is what you need,
this is the wrong tool.

### How it treats the SEC

The SEC publishes rules for automated access at
<https://www.sec.gov/os/accessing-edgar-data>. This Actor follows them:

- **Declares a contact address** in the `User-Agent` of every request, as
  required. The SEC returns `403` without one.
- **Stays under the published rate ceiling.** Their limit is 10 requests/second;
  this Actor runs at 5, with a concurrency of 2.
- **Only touches paths `robots.txt` permits.** All document links sit under
  `/Archives/edgar/data`, which is explicitly `Allow`ed. The Actor never touches
  `/cgi-bin`, which is `Disallow`ed.
- **Fetches metadata, not bulk documents.** One request per company.

### Input

| Field | Type | Notes |
|---|---|---|
| `tickers` | string\[] | e.g. `["AAPL","MSFT"]`. Resolved to CIKs automatically. |
| `ciks` | string\[] | With or without leading zeros. |
| `formTypes` | string\[] | Empty means all permitted forms. |
| `filedFrom`, `filedTo` | `YYYY-MM-DD` | Inclusive at both ends. |
| `maxFilingsPerCompany` | integer | Default 100. |
| `includeArchivedFilings` | boolean | See below. Default false. |
| `contactEmail` | string | **Optional — leave blank.** The Actor already declares its own contact address to the SEC, as their access policy requires. Only set this if you want your own address declared instead. |

#### On `includeArchivedFilings`

EDGAR serves a company's **most recent 1,000 filings** in one response. For most
companies that is many years of history — for Apple it currently reaches back to
2015\. Older filings live in separate archive files, which this Actor fetches only
when you ask.

If your date range reaches further back than the recent block, the run warns you
by name. If it does not, your results are complete and no warning is raised.

### Output formats

Results come back as a dataset you can download as **JSON, CSV, Excel or XML**, or
read through the Apify API. One row per filing, newest first.

For a recurring feed, schedule the Actor and point Make, n8n or Zapier at the
dataset — a daily run with `filedFrom` set to yesterday gives you new filings only.

### Reliability

Every release is checked against a saved snapshot of known-correct output before
it ships. Because filings already made never change, that snapshot is a fixed
reference: if a run ever stops matching it, we know before you do.

### Data source and attribution

Data comes from EDGAR, published by the U.S. Securities and Exchange Commission.
SEC filings are U.S. government works and are in the public domain.

**This Actor is not affiliated with, endorsed by, or connected to the U.S.
Securities and Exchange Commission.** It uses no SEC branding, and the SEC name
appears here only to identify the public data source.

# Actor input Schema

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

Ticker symbols to look up, e.g. AAPL. Resolved to CIK numbers automatically.

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

SEC Central Index Key numbers, with or without leading zeros. Use instead of, or alongside, tickers.

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

Limit results to these forms, e.g. 10-K, 10-Q, 8-K. Leave empty for all available forms. Forms 3, 4, 5 and D are never returned: they report named individuals' personal holdings.

## `filedFrom` (type: `string`):

Only filings filed on or after this date (YYYY-MM-DD).

## `filedTo` (type: `string`):

Only filings filed on or before this date (YYYY-MM-DD).

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

Upper bound on returned filings per company.

## `includeArchivedFilings` (type: `boolean`):

EDGAR serves a company's newest 1000 filings directly. Enable this to also fetch the older archive files. Slower.

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

The SEC requires every automated request to declare a contact address and returns 403 without one (https://www.sec.gov/os/accessing-edgar-data). Defaults to the SEC\_CONTACT\_EMAIL environment variable.

## Actor input object example

```json
{
  "tickers": [
    "AAPL"
  ],
  "formTypes": [
    "10-K",
    "10-Q",
    "8-K"
  ],
  "maxFilingsPerCompany": 100,
  "includeArchivedFilings": false
}
```

# Actor output Schema

## `filings` (type: `string`):

One row per filing, newest first, with a direct link to each document.

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

Counts for the run, including how many filings were withheld as personal data.

# 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"
    ],
    "formTypes": [
        "10-K",
        "10-Q",
        "8-K"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("wheaten_fernland/sec-edgar-filings").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"],
    "formTypes": [
        "10-K",
        "10-Q",
        "8-K",
    ],
}

# Run the Actor and wait for it to finish
run = client.actor("wheaten_fernland/sec-edgar-filings").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"
  ],
  "formTypes": [
    "10-K",
    "10-Q",
    "8-K"
  ]
}' |
apify call wheaten_fernland/sec-edgar-filings --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,wheaten_fernland/sec-edgar-filings"
        }
    }
}
```

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/bXpilW4KrONzR5o9H/builds/BSlKwH2NHQIxVSXqm/openapi.json
