# SEC EDGAR Filings API: 10-K, 10-Q, 8-K (Unofficial) (`graylabs/sec-filings-feed`) Actor

Monitor SEC EDGAR filings: 10-K, 10-Q, 8-K, S-1 and more, with company, CIK, ticker, form type, filing date and document links. Reads the EDGAR daily index on sec.gov and company data from data.sec.gov. No API key. Filter by form, company or date; flag new filings. Not affiliated with the SEC.

- **URL**: https://apify.com/graylabs/sec-filings-feed.md
- **Developed by:** [Gray Labs](https://apify.com/graylabs) (community)
- **Categories:** Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $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 API: 10-K, 10-Q, 8-K (Unofficial)

### What does it do?

It returns **SEC filings** as clean rows you can download as JSON, CSV or Excel or read through the Apify API: 10-K, 10-Q, 8-K, S-1, 20-F, 6-K, proxy statements and other forms. It reads the SEC's public, keyless sources: the all-company feed reads the EDGAR daily index on www.sec.gov, and company details (ticker, industry, state, filer category) and filing details come from data.sec.gov. You need no account or API key. It filters by form type, company and date; it does not search the text of filings.

Each row is one filing with the **company name, CIK, ticker, form type, filing and report dates, accession number and document links**, plus the company's SIC industry code, state, exchange and filer category, and the item numbers of 8-K reports.

Two ways to use it:

- **All-company feed:** every filing filed in a date window, optionally only certain form types. Schedule it daily with **Only new filings** to get just what is new since the last run.
- **Company lookup:** list tickers or CIKs to get their filing history (up to 10 years back).

### What data can you extract?

| Field                                                                                                            | Meaning                                                                    |
| ---------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------- |
| `accessionNumber`                                                                                                | The SEC's unique filing ID                                                 |
| `cik`, `companyName`, `ticker`, `tickers`, `exchanges`                                                           | Company identifiers                                                        |
| `formType`, `baseFormType`, `isAmendment`                                                                        | Form (e.g. 10-K/A), base form (10-K), amendment flag                       |
| `filingDate`, `reportDate`, `acceptanceDateTime`                                                                 | When it was filed, the period it reports on, and the exact acceptance time |
| `items`                                                                                                          | 8-K item numbers (e.g. 2.02 results, 5.02 management changes)              |
| `primaryDocumentUrl`, `filingIndexUrl`, `filingFolderUrl`                                                        | Links to the main document, the filing index page and all files            |
| `primaryDocument`, `primaryDocumentDescription`, `sizeBytes`, `isXbrl`, `isInlineXbrl`, `fileNumber`             | Document details                                                           |
| `sic`, `sicDescription`, `stateOfIncorporation`, `businessState`, `entityType`, `filerCategory`, `fiscalYearEnd` | Company profile                                                            |
| `coFilerCiks`                                                                                                    | Other companies on the same filing (e.g. subsidiaries)                     |
| `changeStatus`                                                                                                   | new / unchanged (with tracking)                                            |
| `attribution`, `notice`, `retrievedAt`                                                                           | Source credit and a non-affiliation line on every row                      |

### How to use it

1. Click **Try for free** and keep the prefilled input (10-K, 10-Q and 8-K from the last 5 days, 20 filings), or set your own.
2. Run it. Rows appear in the **Output** tab.
3. For alerts, turn on **Track new filings** and **Only new filings** and schedule the Actor daily (mornings: the SEC adds each business day's filings to its index from about 10 PM ET).

### Input examples

New 8-K reports every day, only ones not seen before:

```json
{
    "formTypes": ["8-K"],
    "lastNDays": 5,
    "maxResults": 500,
    "trackChanges": true,
    "onlyNewFilings": true
}
```

Annual and quarterly reports of selected companies since 2024:

```json
{
    "companies": ["AAPL", "MSFT", "NVDA"],
    "formTypes": ["10-K", "10-Q"],
    "filedFrom": "2024-01-01",
    "maxResults": 100
}
```

IPO registration statements from the last 30 days:

```json
{
    "formTypes": ["S-1", "F-1"],
    "lastNDays": 30,
    "maxResults": 200
}
```

### Output example

```json
{
    "accessionNumber": "0001193125-26-323660",
    "cik": "0000789019",
    "companyName": "MICROSOFT CORP",
    "ticker": "MSFT",
    "tickers": ["MSFT"],
    "exchanges": ["Nasdaq"],
    "formType": "10-K",
    "baseFormType": "10-K",
    "isAmendment": false,
    "filingDate": "2026-07-29",
    "reportDate": "2026-06-30",
    "acceptanceDateTime": "2026-07-30T00:08:01.000Z",
    "items": [],
    "primaryDocument": "msft-20260630.htm",
    "primaryDocumentDescription": "10-K",
    "primaryDocumentUrl": "https://www.sec.gov/Archives/edgar/data/789019/000119312526323660/msft-20260630.htm",
    "filingIndexUrl": "https://www.sec.gov/Archives/edgar/data/789019/000119312526323660/0001193125-26-323660-index.htm",
    "filingFolderUrl": "https://www.sec.gov/Archives/edgar/data/789019/000119312526323660/",
    "fileNumber": "001-37845",
    "sizeBytes": 36328553,
    "isXbrl": true,
    "isInlineXbrl": true,
    "sic": "7372",
    "sicDescription": "Services-Prepackaged Software",
    "stateOfIncorporation": "WA",
    "businessState": "WA",
    "entityType": "operating",
    "filerCategory": "Large accelerated filer",
    "fiscalYearEnd": "0630",
    "coFilerCiks": [],
    "sourceName": "SEC EDGAR (U.S. Securities and Exchange Commission)",
    "changeStatus": null,
    "attribution": "Source: U.S. Securities and Exchange Commission, EDGAR, https://www.sec.gov. Information on sec.gov is public information. Normalised by this Actor; not an official reproduction.",
    "notice": "Unofficial. Not affiliated with or endorsed by the U.S. Securities and Exchange Commission.",
    "retrievedAt": "2026-10-23T14:47:34.577Z"
}
```

### How much does it cost?

- **$0.01 per run start** plus **$2 per 1,000 filings saved** ($0.002 each, the `filing` event). Example: 1,000 filings = $0.01 + $2 = $2.01.
- You pay only for rows that are saved. Rows skipped as duplicates, already seen or excluded are free.
- Set **Maximum cost per run** when you start a run; the Actor stops when it reaches your cap.

### Privacy: company data only

This Actor returns company and filing metadata. It **never returns filings that centre on individuals**: insider reports (Forms 3, 4 and 5), Form 144 sale notices, Schedule 13D/13G ownership reports and individual municipal adviser forms (MA-I). Filers that look like individuals (no industry code, not an operating company, and filing insider reports as an owner) are withheld and counted in the run summary. Street addresses and phone numbers are never output. The Actor does not open filing documents, so it outputs no signatories or officer names; the documents themselves, at the links, can contain them.

### Limits

- The all-company feed covers up to 90 days per run (one SEC daily index per business day). Today's filings appear the next morning.
- Company lookups use each company's recent filing history (at least the last year or 1,000 filings); older filings of very active filers may be missing.
- Requests are paced at 8 per second, below the SEC's limit of 10, so a full day of filings (about 2,000 rows) takes a few minutes. `maxRequests` (default 500) caps SEC requests per run.
- Tickers come from the SEC's own company records and can be missing for funds and private issuers.

### FAQ

**Do I need an API key?** No. The SEC's data APIs "do not require any authentication or API keys to access".

**Can I reuse the data?** The SEC states: "Information presented on sec.gov is considered public information and may be copied or further distributed by users of the web site without the SEC's permission." Every row credits the SEC as the source. This is not legal advice.

**Does it read full text or financial statements?** No. It returns filing metadata and links. Open `primaryDocumentUrl` for the document itself.

Unofficial. Not affiliated with or endorsed by the U.S. Securities and Exchange Commission. EDGAR is a registered trademark of the SEC.

# Changelog

This Actor's version history is a separate document: https://apify.com/graylabs/sec-filings-feed/changelog.md

# Actor input Schema

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

E.g. 10-K, 10-Q, 8-K, S-1, 20-F, 6-K, DEF 14A. Empty = all forms except person-centred ones (Forms 3/4/5, 144, Schedule 13D/13G, MA-I), which this Actor never returns.

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

Also return amendments (e.g. 10-K/A when you ask for 10-K).

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

Optional. E.g. AAPL, MSFT or 320193. When set, the Actor reads each company's filing history instead of the all-company daily feed, and the window can go back up to 10 years (recent filings: at least the last year or 1,000 filings per company).

## `lastNDays` (type: `integer`):

Filings filed in the last N days (UTC), including today. Default 5, so weekends are covered. The SEC adds each business day's filings to its daily index from about 10 PM ET. Max 90 without companies.

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

Start of the filing-date window (inclusive). Overrides Last N days.

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

End of the filing-date window (inclusive). Defaults to today.

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

Stop after saving this many filings (each saved filing is one charged result).

## `maxRequests` (type: `integer`):

Safety cap on SEC requests per run (index files plus one company lookup per new company). Default 500. Requests are paced at 8 per second, below the SEC's limit of 10.

## `trackChanges` (type: `boolean`):

Mark each filing new or unchanged (already seen) compared with earlier runs of the same search.

## `onlyNewFilings` (type: `boolean`):

With tracking, skip filings already returned by an earlier run of the same search (not charged).

## Actor input object example

```json
{
  "formTypes": [
    "10-K",
    "10-Q",
    "8-K"
  ],
  "includeAmendments": true,
  "companies": [],
  "lastNDays": 5,
  "maxResults": 20,
  "maxRequests": 500,
  "trackChanges": false,
  "onlyNewFilings": false
}
```

# Actor output Schema

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

No description

## `runSummary` (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 = {
    "formTypes": [
        "10-K",
        "10-Q",
        "8-K"
    ],
    "lastNDays": 5,
    "maxResults": 20
};

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

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

```

## MCP server setup

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

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/RjUmUq6jCjPYl18DS/builds/wsCO6r4ZWQOPqYI9B/openapi.json
