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

Returns SEC EDGAR filings (10-K annual reports, 10-Q quarterly reports, 8-K current reports and more) for US listed companies by ticker or CIK, one row per filing with form, dates, 8-K items and direct document links. Supports onlyNew for daily monitoring.

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

## Pricing

$2.00 / 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 Filings Scraper: 10-K, 10-Q, 8-K by Ticker or CIK

Company filings from SEC EDGAR, the filing system of the U.S. Securities and Exchange Commission. Give a list of tickers or CIK numbers and get one clean row per filing with form type, filing date, report date, the items of an 8-K, a short description and direct links to the main document and the filing index on sec.gov.

Use it to collect annual and quarterly reports for a list of companies, to keep an eye on new 8-K current reports (earnings releases, leadership changes, acquisitions), or as the first step in a pipeline that downloads and parses the documents themselves. Schedule a daily run with `dateFrom` and `dateTo` left empty to get the latest filings for your watchlist.

### What is covered

Every company that files with the SEC, domestic and foreign, from the start of EDGAR in the mid 1990s until today. The actor reads the official submissions API, which lists all filings per company. Filings from the last year or the last 1 000 filings of a company come in one request. Older filings are fetched from additional files only when your date range reaches back that far.

Supported form types, each also as an amendment with `/A`:

| Form | What it is |
|---|---|
| `10-K` | Annual report of a US company |
| `10-Q` | Quarterly report of a US company |
| `8-K` | Current report on a major event. The `items` field tells which kind, for example `2.02` results of operations, `5.02` changes of directors or officers, `1.01` a material agreement |
| `20-F` | Annual report of a foreign company |
| `6-K` | Current report of a foreign company |
| `S-1` | Registration statement, for example before an IPO |
| `DEF 14A` | Definitive proxy statement before a shareholder meeting |
| `13F-HR` | Quarterly holdings report of an institutional investment manager. Use the manager's CIK |

### Example from a real run

This is the input and the first rows of a run on the Apify platform on 3 October 2026 (run `Ma9SAB7REASKJ9jy2`, 25 rows in total). Nothing is edited except that only the first rows are shown.

Input:

```json
{
  "companies": [
    "AAPL",
    "MSFT"
  ],
  "formTypes": [
    "10-K",
    "10-Q",
    "8-K"
  ],
  "includeAmendments": true,
  "maxFilingsPerCompany": 25,
  "maxResults": 50,
  "onlyNew": false
}
```

Output (excerpt):

```json
[
  {
    "cik": "320193",
    "ticker": "AAPL",
    "companyName": "Apple Inc.",
    "exchange": "Nasdaq",
    "sic": "3571",
    "sicDescription": "Electronic Computers",
    "stateOfIncorporation": "CA",
    "fiscalYearEnd": "0926",
    "form": "8-K/A",
    "filingDate": "2026-09-01",
    "reportDate": "2026-04-17",
    "accessionNumber": "0001140361-26-035325",
    "description": "8-K/A",
    "items": [
      "5.02"
    ],
    "primaryDocumentUrl": "https://www.sec.gov/Archives/edgar/data/320193/000114036126035325/ef20081427_8ka.htm",
    "indexUrl": "https://www.sec.gov/Archives/edgar/data/320193/000114036126035325/0001140361-26-035325-index.htm",
    "isXbrl": true,
    "sizeBytes": 241262,
    "source": "SEC EDGAR, U.S. Securities and Exchange Commission",
    "license": "Public domain, U.S. federal government information"
  },
  {
    "cik": "320193",
    "ticker": "AAPL",
    "companyName": "Apple Inc.",
    "exchange": "Nasdaq",
    "sic": "3571",
    "sicDescription": "Electronic Computers",
    "stateOfIncorporation": "CA",
    "fiscalYearEnd": "0926",
    "form": "10-Q",
    "filingDate": "2026-07-31",
    "reportDate": "2026-06-27",
    "accessionNumber": "0000320193-26-000020",
    "description": "10-Q",
    "items": [],
    "primaryDocumentUrl": "https://www.sec.gov/Archives/edgar/data/320193/000032019326000020/aapl-20260627.htm",
    "indexUrl": "https://www.sec.gov/Archives/edgar/data/320193/000032019326000020/0000320193-26-000020-index.htm",
    "isXbrl": true,
    "sizeBytes": 5946811,
    "source": "SEC EDGAR, U.S. Securities and Exchange Commission",
    "license": "Public domain, U.S. federal government information"
  },
  {
    "cik": "320193",
    "ticker": "AAPL",
    "companyName": "Apple Inc.",
    "exchange": "Nasdaq",
    "sic": "3571",
    "sicDescription": "Electronic Computers",
    "stateOfIncorporation": "CA",
    "fiscalYearEnd": "0926",
    "form": "8-K",
    "filingDate": "2026-07-30",
    "reportDate": "2026-07-30",
    "accessionNumber": "0000320193-26-000018",
    "description": "8-K",
    "items": [
      "2.02",
      "9.01"
    ],
    "primaryDocumentUrl": "https://www.sec.gov/Archives/edgar/data/320193/000032019326000018/aapl-20260730.htm",
    "indexUrl": "https://www.sec.gov/Archives/edgar/data/320193/000032019326000018/0000320193-26-000018-index.htm",
    "isXbrl": true,
    "sizeBytes": 417360,
    "source": "SEC EDGAR, U.S. Securities and Exchange Commission",
    "license": "Public domain, U.S. federal government information"
  }
]
```

### Input

| Field | Type | Default | Description |
|---|---|---|---|
| `companies` | array | `["AAPL", "MSFT"]` | Tickers (`AAPL`, `msft`, `BRK.B`) or CIK numbers (`320193` or `0000320193`). 1 to 200 per run. |
| `formTypes` | array | `["10-K", "10-Q", "8-K"]` | Form types from the table above. |
| `dateFrom` | string | 364 days before `dateTo` | First filing date, `YYYY-MM-DD`. |
| `dateTo` | string | today (New York time) | Last filing date (inclusive). |
| `includeAmendments` | boolean | `true` | Also return `10-K/A`, `8-K/A` and so on for the selected forms. |
| `maxFilingsPerCompany` | integer | `25` | Maximum number of filings per company, newest first. 1 to 5 000. |
| `maxResults` | integer | `50` | Maximum number of filings in total. Companies are handled in the order given. 1 to 100 000. |
| `onlyNew` | boolean | `false` | Return only filings that earlier runs with the same input did not deliver. See "Monitoring and scheduling". |

A run with empty input returns up to 25 of the newest 10-K, 10-Q and 8-K filings each for Apple and Microsoft from the last 365 days (25 in total on 2026-10-03).

Tickers are looked up in the SEC's own list of company tickers, in upper or lower case. A ticker and a CIK that point to the same company are merged, so the company is only fetched once. An unknown ticker or CIK gives a warning in the log and the run continues with the next company.

Example input: annual reports and current reports for Apple and Microsoft filed in the last year.

```json
{
  "companies": ["AAPL", "MSFT"],
  "formTypes": ["10-K", "8-K"],
  "includeAmendments": true,
  "maxFilingsPerCompany": 100,
  "maxResults": 200
}
```

### Output

| Field | Description |
|---|---|
| `cik` | Central Index Key of the company, without leading zeros |
| `ticker` | The ticker you gave, or the company's first ticker in EDGAR. `null` for companies without one |
| `companyName` | Company name as registered with the SEC |
| `exchange` | First exchange listed for the company, for example `Nasdaq` or `NYSE` |
| `sic`, `sicDescription` | Standard Industrial Classification code and its name |
| `stateOfIncorporation` | State or country code of incorporation |
| `fiscalYearEnd` | End of the fiscal year as `MMDD` |
| `form` | Form type, for example `10-K` or `8-K/A` |
| `filingDate` | Date the filing was made, `YYYY-MM-DD` |
| `reportDate` | Period of the report (10-K, 10-Q) or date of the event (8-K). `null` when the form has none |
| `accessionNumber` | Unique id of the filing, for example `0000320193-26-000018` |
| `description` | Description of the main document as given by the filer |
| `items` | Items of an 8-K, for example `["2.02", "9.01"]`. Empty for other forms |
| `primaryDocumentUrl` | Link to the main document on sec.gov |
| `indexUrl` | Link to the filing index with all documents and exhibits |
| `isXbrl` | `true` when the filing has XBRL financial data |
| `sizeBytes` | Size of the whole filing in bytes |
| `source`, `license` | Attribution for the data |

```json
{
  "cik": "320193",
  "ticker": "AAPL",
  "companyName": "Apple Inc.",
  "exchange": "Nasdaq",
  "sic": "3571",
  "sicDescription": "Electronic Computers",
  "stateOfIncorporation": "CA",
  "fiscalYearEnd": "0926",
  "form": "8-K",
  "filingDate": "2026-07-30",
  "reportDate": "2026-07-30",
  "accessionNumber": "0000320193-26-000018",
  "description": "8-K",
  "items": ["2.02", "9.01"],
  "primaryDocumentUrl": "https://www.sec.gov/Archives/edgar/data/320193/000032019326000018/aapl-20260730.htm",
  "indexUrl": "https://www.sec.gov/Archives/edgar/data/320193/000032019326000018/0000320193-26-000018-index.htm",
  "isXbrl": true,
  "sizeBytes": 417360,
  "source": "SEC EDGAR, U.S. Securities and Exchange Commission",
  "license": "Public domain, U.S. federal government information"
}
```

### Monitoring and scheduling

Set `onlyNew` to `true` to use the actor for recurring monitoring. The actor then remembers which filings it has delivered for the same input, in a named key-value store in your Apify account (`nightwave-state-sec-edgar-filings`, one record per input). Each run returns and charges only filings that earlier runs did not deliver. The first run returns everything in the selection. A run without news finishes successfully with 0 rows.

A filing is identified by its accession number. The first run returns up to `maxFilingsPerCompany` filings per company from the last 365 days, and later runs return only filings made since.

`onlyNew` and `maxResults` are not part of the remembered input, so you can change them without starting over. Changing any other field starts a fresh state. To start over with the same input, delete the record in the key-value store.

Example: a daily run at 23:00 Swedish time on weekdays, after the EDGAR filing day has closed, that returns new filings for five large companies. In Apify Console, open **Schedules**, create a schedule with the cron expression `0 23 * * 1-5` and add this actor with the input below.

```json
{
  "companies": ["AAPL", "MSFT", "NVDA", "AMZN", "GOOGL"],
  "formTypes": ["10-K", "10-Q", "8-K"],
  "onlyNew": true,
  "maxFilingsPerCompany": 10,
  "maxResults": 100
}
```

The same schedule through the Apify API:

```sh
curl -X POST "https://api.apify.com/v2/schedules?token=<YOUR_TOKEN>" \
  -H "Content-Type: application/json" \
  -d '{"name": "daily-sec-edgar-filings", "cronExpression": "0 23 * * 1-5", "timezone": "Europe/Stockholm", "isEnabled": true, "isExclusive": true,
       "actions": [{"type": "RUN_ACTOR", "actorId": "nightwave-owner~sec-edgar-filings",
                    "runInput": {"contentType": "application/json; charset=utf-8", "body": "<the input above as a JSON string>"}}]}'
```

Connect a webhook or an integration (Slack, e-mail, Google Sheets) to the actor in Apify Console if you want the new rows sent somewhere when the run finishes.

### Good to know

- **Ownership reports are not included.** Forms 3, 4 and 5 (insider holdings and trades), Form 144 (planned sales by insiders) and Schedules 13D and 13G (holdings above 5 %) are reports about individual people, so the actor leaves them out and rejects them in the input with a clear message. Insider trades are therefore not part of this actor.
- **SEC's rules for automated access are followed.** The SEC allows at most 10 requests per second and asks every automated client to declare who it is. This actor sends at most 8 requests per second through a simple queue, identifies itself with the User-Agent `Nightwave AB kontakt@nightwave.se` and asks for gzip compressed responses. See [Accessing EDGAR Data](https://www.sec.gov/search-filings/edgar-search-assistance/accessing-edgar-data). A run with 200 companies takes well under a minute.
- **The SEC publishes continuously.** New filings appear in EDGAR within minutes on business days, and the submissions API is updated shortly after. A filing made late in the day can show up in the next day's run. EDGAR dates filings in Eastern time, which is why the default end date is today in New York.
- The actor lists the filings and links to them. It does not download or parse the documents, so a run stays small and fast.
- Requests are retried three times on network errors, rate limits (429) and server errors. A company that SEC does not know (404) gives a warning and the run moves on. A response in an unexpected format stops the run with a clear message instead of storing broken rows.
- The data describes what companies have filed. It is not investment advice.

### Use cases

- Watch a list of tickers for new 8-K current reports (earnings releases, leadership changes, acquisitions) and get only the new ones each day with `onlyNew: true`.
- Collect the links to every 10-K and 10-Q for a set of companies as input to a document parser or an LLM pipeline.
- Filter 8-K filings by item number, for example `5.02` (director or officer changes) or `2.02` (results of operations).
- Build a filing calendar per company from `filingDate`, `reportDate` and `fiscalYearEnd`.
- Look up CIK, SIC code, exchange and state of incorporation for a list of tickers.

### FAQ

**How often is the data updated?**
Every run reads EDGAR live. New filings show up in EDGAR shortly after the SEC accepts them, also outside market hours.

**What does 1 000 rows cost?**
2 USD (0.002 USD per filing, event `filing`), plus Apify platform usage, which is a fraction of a cent per run.

**Can I schedule it?**
Yes. Leave `dateFrom` and `dateTo` empty, set `onlyNew: true` and add the actor to an Apify schedule. See "Monitoring and scheduling" above.

**Can I use the data commercially?**
Yes. EDGAR filings are U.S. federal government information in the public domain. The actor follows the SEC's fair access rules (declared user agent and a limited request rate).

### Data source and license

The data comes from the SEC's public EDGAR APIs: `https://www.sec.gov/files/company_tickers.json` for tickers and `https://data.sec.gov/submissions/CIK##########.json` for the filings, see [EDGAR Application Programming Interfaces](https://www.sec.gov/search-filings/edgar-application-programming-interfaces). No API key is needed. Information published by the SEC is U.S. federal government information and is not subject to copyright in the United States ([17 U.S.C. § 105](https://www.law.cornell.edu/uscode/text/17/105)). The filed documents themselves are written by the companies; the actor only returns the index data (form, dates, description, links) that EDGAR publishes about them. Every row carries `source` and `license` so you can credit SEC EDGAR when you publish the data.

This actor is not affiliated with or endorsed by the U.S. Securities and Exchange Commission.

### Pricing

Pay per result: 0.002 USD per row returned (event `filing`), which is 2 USD per 1 000 filings. Apify bills platform usage on top as usual. It is small: the example run above returned 25 rows and used 0.0003 USD of platform usage. `maxResults` caps how many rows a run returns, so you always know the highest possible cost.

### Contact

Built and maintained by Nightwave AB. Questions, bugs and feature requests: kontakt@nightwave.se

### På svenska

Actorn hämtar bolagsfilings från SEC EDGAR, den amerikanska finansinspektionens (SEC) arkiv. Ange tickers eller CIK-nummer och få en rad per filing med formulär, datum, rapportperiod, 8-K-punkter, beskrivning och direkta länkar till dokumentet och filingens index på sec.gov.

- Formulär: 10-K, 10-Q, 8-K, 20-F, 6-K, S-1, DEF 14A och 13F-HR, med eller utan ändringar (/A). Standard är 10-K, 10-Q och 8-K under de senaste 365 dagarna.
- Upp till 200 bolag per körning. Ticker och CIK för samma bolag slås ihop, och okända bolag ger en varning i loggen.
- Ägarrapporter (formulär 3, 4, 5 och 144 samt Schedule 13D och 13G) handlar om enskilda personer och ingår inte. Insiderköp finns alltså inte i den här actorn.
- Actorn följer SEC:s regler för automatisk åtkomst: högst 8 anrop per sekund (SEC tillåter 10), User-Agent med företagsnamn och e-post och gzip-komprimering.
- SEC publicerar löpande under amerikanska arbetsdagar.
- Källa: SEC EDGAR, U.S. Securities and Exchange Commission. Amerikansk federal myndighetsinformation är fri att använda (public domain). Datan beskriver vad bolagen har lämnat in och är ingen investeringsrådgivning.
- Med `onlyNew: true` levereras bara filings som tidigare körningar med samma input inte har levererat, vilket passar för daglig bevakning (se "Monitoring and scheduling"). Tom input ger de senaste filingarna för Apple och Microsoft.
- Pris: 0,002 USD per filing (2 USD per 1 000) plus Apifys plattformsanvändning.
- Kontakt: kontakt@nightwave.se

# Actor input Schema

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

Tickers (AAPL, msft, BRK.B) or CIK numbers (320193 or 0000320193), for example \["AAPL", "MSFT"]. 1 to 200 per run. A ticker and a CIK for the same company are merged. Defaults to AAPL and MSFT.

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

Form types to include, for example \["10-K", "8-K"]. Defaults to 10-K, 10-Q and 8-K. Ownership reports (forms 3, 4, 5, 144 and Schedules 13D and 13G) are not available because they name individual people.

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

First filing date, YYYY-MM-DD, for example "2026-01-01". Defaults to 364 days before the end date, so the default run covers the last 365 days.

## `dateTo` (type: `string`):

Last filing date (inclusive), YYYY-MM-DD, for example "2026-10-03". Defaults to today in New York time.

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

Also return amended filings (10-K/A, 8-K/A and so on) for the selected form types, for example true. Defaults to true.

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

Maximum number of filings per company, newest first, for example 25. Defaults to 25.

## `maxResults` (type: `integer`):

Maximum number of filings to return in total, for example 50. Companies are handled in the order given. Each filing is one billable result. Defaults to 50.

## `onlyNew` (type: `boolean`):

For scheduled runs. When true, filings that an earlier run with the same input already delivered are skipped and not charged, so a daily run returns only filings made since the last run. The first run returns everything. Defaults to false.

## Actor input object example

```json
{
  "companies": [
    "AAPL",
    "MSFT",
    "NVDA"
  ],
  "formTypes": [
    "10-K",
    "8-K"
  ],
  "dateFrom": "2026-01-01",
  "dateTo": "2026-10-03",
  "includeAmendments": true,
  "maxFilingsPerCompany": 25,
  "maxResults": 50,
  "onlyNew": true
}
```

# Actor output Schema

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

All rows produced by the run, as JSON. Open in Apify Console or download via the dataset API.

# 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"
    ],
    "includeAmendments": true,
    "maxFilingsPerCompany": 25,
    "maxResults": 50,
    "onlyNew": false
};

// Run the Actor and wait for it to finish
const run = await client.actor("nightwave-owner/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",
    ],
    "includeAmendments": True,
    "maxFilingsPerCompany": 25,
    "maxResults": 50,
    "onlyNew": False,
}

# Run the Actor and wait for it to finish
run = client.actor("nightwave-owner/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"
  ],
  "includeAmendments": true,
  "maxFilingsPerCompany": 25,
  "maxResults": 50,
  "onlyNew": false
}' |
apify call nightwave-owner/sec-edgar-filings --silent --output-dataset

```

## MCP server setup

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