# SEC EDGAR Filings Scraper: 10-K, 10-Q, 8-K by Ticker (`phaux/sec-edgar-filings`) Actor

Get SEC EDGAR filings (10-K, 10-Q, 8-K, Form 4, S-1...) for US companies from SEC's official API. Use for filing lists and document links. Input: companies (ticker, CIK or name), optional forms, filedFrom, filedTo. Output per filing: form, filing/report date, accession number, document URL.

- **URL**: https://apify.com/phaux/sec-edgar-filings.md
- **Developed by:** [Phaux](https://apify.com/phaux) (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.40 / 1,000 filing fetcheds

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 Filings Scraper: 10-K, 10-Q, 8-K by Ticker

Look up **SEC filings** for any company: **10-K** annual reports, **10-Q** quarterly reports, **8-K** current reports, Form 4 insider filings and other EDGAR form types, exported as a clean list with direct document links.

List the SEC filings of any US-listed company, fund or other filer by **ticker, CIK or exact company name**, straight from SEC's official EDGAR JSON API. Each filing comes with its form type, filing and report dates, acceptance time, 8-K item numbers, XBRL flags and **direct links** to the filing index, the primary document and the inline-XBRL viewer. No API key needed.

### Quick start for AI agents and API users

- **What it does:** Get SEC EDGAR filings (10-K, 10-Q, 8-K, Form 4, S-1...) for US companies from SEC's official API.
- **When to use it:** For filing lists and document links.
- **Example input** (the form's prefill; it finishes in under a minute):

```json
{
  "companies": [
    "AAPL",
    "MSFT"
  ],
  "formTypes": [
    "10-K",
    "10-Q",
    "8-K"
  ]
}
```

- **Example output:** one real dataset row from run `IgiZAH4LNpo8doJAU` (2026-10-23), with long fields shortened and empty fields left out. Fields not shown are listed in the output table below.

```json
{
  "cik": "0000320193",
  "companyName": "Apple Inc.",
  "tickers": [
    "AAPL"
  ],
  "exchanges": [
    "Nasdaq"
  ],
  "formType": "8-K/A",
  "filingDate": "2026-09-01",
  "reportDate": "2026-04-17",
  "acceptanceDateTime": "2026-09-02T00:30:35.000Z",
  "accessionNumber": "0001140361-26-035325",
  "fileNumber": "001-36743",
  "filmNumber": "261351260",
  "act": "34",
  "items": [
    "5.02"
  ],
  "sizeBytes": 241262,
  "isXBRL": true,
  "isInlineXBRL": true
}
```

- **Cost (pay per event, Free-plan prices):** Actor Start $0.01; Filing fetched $0.0004. Failed items are not charged.
- **From an AI agent:** with the Apify MCP server, call `call-actor` with actor `phaux/sec-edgar-filings`, or load it as its own tool with `https://mcp.apify.com?tools=phaux/sec-edgar-filings`. Read results with `get-dataset-items`.

### What does SEC EDGAR Filings Scraper do?

- Resolves tickers (`AAPL`, `BRK.B` or `BRK-B`), CIK numbers (`320193`, `CIK0000320193`) and exact SEC company names (`Tesla, Inc.`) using SEC's own `company_tickers.json`.
- Reads each filer's submission history from `data.sec.gov/submissions` and returns **one dataset item per filing**.
- Filters by form type (10-K, 10-Q, 8-K, 4, S-1, DEF 14A, 13F-HR and any other EDGAR form, with or without `/A` amendments) and by filing date.
- Goes back to 1994 with `includeOlderFilings`, reading only the history pages that overlap your date window.

### Why use it?

- **Official data only:** SEC's documented JSON API. No HTML scraping, so page changes don't break runs.
- **Fast:** two companies with 100 filings each typically finish in a few seconds.
- **Pay per filing saved:** unknown tickers, filtered filings and duplicates are free.
- **Ready-to-open links** to every filing's index page and primary document.

Use cases: monitoring new 8-Ks and Form 4 insider filings, building filing calendars, feeding 10-K/10-Q links into research or LLM pipelines, and compliance or due-diligence checklists.

### How to use it

1. Enter tickers, CIKs or exact company names in `companies`.
2. Optionally choose `formTypes` and a date window (`filedFrom`, `filedTo`).
3. Run the Actor and open the **Filings** dataset view, or download JSON, CSV or Excel.
4. Open `primaryDocumentUrl` or `filingIndexUrl` to read the filing itself on sec.gov.

### Input

```json
{
  "companies": ["AAPL", "320193", "BRK.B", "Tesla, Inc."],
  "formTypes": ["10-K", "10-Q", "8-K"],
  "includeAmendments": true,
  "filedFrom": "2025-01-01",
  "filedTo": "",
  "includeOlderFilings": false,
  "maxFilingsPerCompany": 100,
  "maxItems": 0
}
```

`filedFrom` and `filedTo` take a date (`2025-01-01`) or a period (`90 days`, `2 years`).

| Field | Type | Default | Description |
|---|---|---|---|
| `companies` | array | required | Tickers (AAPL, BRK.B), CIK numbers (320193 or CIK0000320193) or exact company names as SEC lists them (e.g. 'Tesla, Inc.'). Max 2,000. |
| `formTypes` | array | — | Keep only these forms, e.g. 10-K, 10-Q, 8-K, 4, S-1, DEF 14A, 13F-HR. Empty = all forms. |
| `includeAmendments` | boolean | `true` | When on, '10-K' also matches '10-K/A'. |
| `filedFrom` | string | — | A date (2025-01-01) or a period ('90 days', '2 years'). |
| `filedTo` | string | — | A date (2025-12-31) or a period ('30 days'). |
| `includeOlderFilings` | boolean | `false` | SEC's main file has each company's most recent ~1,000 filings. Turn on to also read the older history pages (1 extra request each; only pages that overlap your date window). |
| `maxFilingsPerCompany` | integer | `100` | 0 = no limit. Newest filings first. |
| `maxItems` | integer | `0` | 0 = no limit. You are only charged for filings saved. |
| `contactEmail` | string | — | SEC asks automated clients to declare who they are. If you add your email it is appended to the User-Agent sent to SEC (and nowhere else). |
| `requestsPerSecond` | integer | `5` | SEC's fair-access limit is 10/s in total; this Actor never exceeds 8 and defaults to 5. |

### Output example

One dataset item per filing:

```json
{
  "cik": "0000320193",
  "companyName": "Apple Inc.",
  "tickers": ["AAPL"],
  "exchanges": ["Nasdaq"],
  "formType": "8-K/A",
  "filingDate": "2026-09-01",
  "reportDate": "2026-04-17",
  "acceptanceDateTime": "2026-09-02T00:30:35.000Z",
  "accessionNumber": "0001140361-26-035325",
  "items": ["5.02"],
  "isXBRL": true,
  "isInlineXBRL": true,
  "primaryDocument": "ef20081427_8ka.htm",
  "filingIndexUrl": "https://www.sec.gov/Archives/edgar/data/320193/000114036126035325/0001140361-26-035325-index.htm",
  "primaryDocumentUrl": "https://www.sec.gov/Archives/edgar/data/320193/000114036126035325/ef20081427_8ka.htm",
  "inlineXbrlViewerUrl": "https://www.sec.gov/ix?doc=/Archives/edgar/data/320193/000114036126035325/ef20081427_8ka.htm",
  "sic": "3571",
  "sicDescription": "Electronic Computers",
  "category": "Large accelerated filer",
  "stateOfIncorporation": "CA",
  "fiscalYearEnd": "0926",
  "source": "https://data.sec.gov/submissions/CIK0000320193.json"
}
```

### Output fields

| Field | Type | Description |
|---|---|---|
| `cik` | string | 10-digit Central Index Key. |
| `companyName` | string or null | Filer name as registered with SEC. |
| `tickers` | array | Ticker symbols. |
| `exchanges` | array | Exchanges. |
| `formType` | string or null | Form type, e.g. 10-K, 8-K, 4. |
| `filingDate` | string or null | Filing date (YYYY-MM-DD). |
| `reportDate` | string or null | Period of report (YYYY-MM-DD). |
| `acceptanceDateTime` | string or null | EDGAR acceptance timestamp (ISO 8601). |
| `accessionNumber` | string | Accession number. |
| `fileNumber` | string or null | SEC file number. |
| `filmNumber` | string or null | Film number. |
| `act` | string or null | Securities act (33/34). |
| `items` | array | 8-K item numbers, e.g. \['2.02', '9.01']. |
| `sizeBytes` | integer or null | Filing size in bytes. |
| `isXBRL` | boolean | Has XBRL financial data. |
| `isInlineXBRL` | boolean | Is inline XBRL. |
| `primaryDocument` | string or null | Primary document file name. |
| `primaryDocDescription` | string or null | Primary document description. |
| `filingIndexUrl` | string or null | EDGAR filing index page. |
| `primaryDocumentUrl` | string or null | Direct link to the primary document. |
| `inlineXbrlViewerUrl` | string or null | SEC inline XBRL viewer link (inline XBRL filings). |
| `sic` | string or null | SIC code. |
| `sicDescription` | string or null | SIC industry. |
| `entityType` | string or null | Entity type (operating, investment...). |
| `category` | string or null | Filer category (Large accelerated filer...). |
| `stateOfIncorporation` | string or null | State of incorporation. |
| `fiscalYearEnd` | string or null | Fiscal year end (MMDD). |
| `source` | string | SEC API URL the record came from. |
| `scrapedAt` | string | When fetched (ISO 8601, UTC). |

The run also saves `ERRORS` (unknown tickers or CIKs, and any SEC stop reason) and `RUN_STATS` (run counters) in the key-value store.

### How much does it cost?

Pay per event. Apify platform usage is included.

| Event | Price |
|---|---|
| Actor start | $0.01 per run (one event per GB of memory; the default 256 MB counts as one) |
| Filing (one dataset item) | $0.0004 ($0.40 per 1,000 filings) |

Example: 1,000 filings in one run cost $0.01 + $0.40 = $0.41. Companies that aren't found, filtered filings and duplicates are not charged. Use `maxItems` to cap any run.

### Use with AI agents, MCP and the API

- **MCP:** add `https://mcp.apify.com?tools=phaux/sec-edgar-filings` to any MCP client and ask for, say, "Apple's 10-K filings since 2020".
- **API:** `POST https://api.apify.com/v2/acts/phaux~sec-edgar-filings/run-sync-get-dataset-items` with `{"companies": ["AAPL"], "formTypes": ["10-K"]}` returns the filings directly.
- Field names, types and formats are documented in the input and dataset schemas.

### Data source and compliance

- Hosts used: `data.sec.gov` (official API) and `www.sec.gov/files/company_tickers.json`. Document links point to `www.sec.gov/Archives/edgar/data/…`, which SEC's robots.txt explicitly allows. The Actor never uses `/cgi-bin` (disallowed by robots.txt) or the full-text search host.
- SEC content is public. SEC says it "may be copied or further distributed by users of the web site without the SEC's permission" (https://www.sec.gov/privacy). Please cite SEC as the source.
- **SEC fair-access policy is followed:** a declared User-Agent (`Phaux-SEC-EDGAR-Apify-Actor/0.1 (+https://apify.com/phaux/sec-edgar-filings)`, plus your email if you set `contactEmail`), 5 requests/second by default and never more than 8 (SEC's limit is 10), and gzip transfer.
- On HTTP 429, or SEC's rate-threshold page, the Actor **stops at once**, keeps what it already saved and says so in the status message. It doesn't retry, rotate IPs or use proxies.
- **No contact data.** The SEC API also returns company addresses, phone numbers and EINs; this Actor does not output them.

### Limits

- Filing metadata and links only. The text of filings and XBRL financial facts are not extracted.
- Up to 2,000 companies per run.
- Without `includeOlderFilings`, each company's most recent ~1,000 filings are covered.
- Not investment advice. This is raw regulatory metadata as filed with SEC.

### FAQ

- **Company name not found?** Use the exact name SEC lists (for example `Tesla, Inc.`), or use the ticker or CIK.
- **More than ~1,000 filings for a company?** Turn on `includeOlderFilings`.
- **Can I get only new filings each day?** Schedule the Actor with `filedFrom: "1 day"`.
- **Something isn't working?** Open an issue on the Issues tab with the run ID.

# Actor input Schema

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

Tickers (AAPL, BRK.B), CIK numbers (320193 or CIK0000320193) or exact company names as SEC lists them (e.g. 'Tesla, Inc.'). Max 2,000.

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

Keep only these forms, e.g. 10-K, 10-Q, 8-K, 4, S-1, DEF 14A, 13F-HR. Empty = all forms.

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

When on, '10-K' also matches '10-K/A'. Default: true.

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

A date (2025-01-01) or a period ('90 days', '2 years'). Example: "2025-01-01".

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

A date (2025-12-31) or a period ('30 days'). Example: "2026-10-23".

## `includeOlderFilings` (type: `boolean`):

SEC's main file has each company's most recent ~1,000 filings. Turn on to also read the older history pages (1 extra request each; only pages that overlap your date window). Default: false.

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

0 = no limit. Newest filings first. Default: 100.

## `maxItems` (type: `integer`):

0 = no limit. You are only charged for filings saved. Default: 0.

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

SEC asks automated clients to declare who they are. If you add your email it is appended to the User-Agent sent to SEC (and nowhere else). Example: "you@yourcompany.com".

## `requestsPerSecond` (type: `integer`):

SEC's fair-access limit is 10/s in total; this Actor never exceeds 8 and defaults to 5.

## Actor input object example

```json
{
  "companies": [
    "AAPL",
    "MSFT"
  ],
  "formTypes": [
    "10-K",
    "10-Q",
    "8-K"
  ],
  "includeAmendments": true,
  "includeOlderFilings": false,
  "maxFilingsPerCompany": 100,
  "maxItems": 0,
  "requestsPerSecond": 5
}
```

# Actor output Schema

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

All filings saved by the run (default dataset, overview view).

## `errors` (type: `string`):

Companies that could not be resolved and any SEC stop reason.

## `runStats` (type: `string`):

RUN_STATS record.

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

// Run the Actor and wait for it to finish
const run = await client.actor("phaux/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 = {
    "companies": [
        "AAPL",
        "MSFT",
    ],
    "formTypes": [
        "10-K",
        "10-Q",
        "8-K",
    ],
}

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

```

## MCP server setup

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