# SEC EDGAR Filings Scraper (`publicrecords101/sec-edgar-scraper`) Actor

Extract recent SEC EDGAR filings (8-K, 10-K, 10-Q, Form 4 and more) for any list of tickers or CIKs, with 8-K item codes, dates and document links. Official SEC data, no API key needed.

- **URL**: https://apify.com/publicrecords101/sec-edgar-scraper.md
- **Developed by:** [Public Records Data Tools](https://apify.com/publicrecords101) (community)
- **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.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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

### What does the SEC EDGAR Filings Scraper do?

The **SEC EDGAR Filings Scraper** extracts **company filings from SEC EDGAR**, the US Securities and Exchange Commission's
public filing system. Give it a list of **stock tickers or CIK numbers** and get every recent **8-K, 10-K, 10-Q, Form 4,
S-1, 13D** or other filing with the **filing date**, **acceptance time**, **8-K item codes with plain-English titles**, and
direct **links to the document and filing index**, as clean JSON, CSV or Excel.

It reads SEC's official public JSON API at data.sec.gov, so there is **no login and no API key**. The easiest way to try it:
enter a few tickers such as `AAPL` and `TSLA`, press **Start**, and you get their latest filings in seconds.

### What data can you extract from SEC EDGAR?

| Field | Example |
|---|---|
| `companyName`, `ticker`, `tickers`, `exchange` | Tesla, Inc., TSLA, Nasdaq |
| `cik` | 0001318605 |
| `sic`, `industry`, `stateOfIncorporation` | 3711, Motor Vehicles & Passenger Car Bodies, TX |
| `formType`, `isAmendment` | 8-K, false |
| `filingDate`, `reportDate`, `acceptedAt` | 2026-09-29, 2026-09-29, 2026-09-29T20:38:50.000Z |
| `accessionNumber` | 0001628280-26-063820 |
| `items`, `itemDescriptions` | 1.01 Entry into a Material Definitive Agreement, ... |
| `documentDescription`, `primaryDocument` | 8-K, tsla-20260929.htm |
| `documentUrl`, `filingIndexUrl` | Links to the filing on sec.gov |
| `fileSizeBytes`, `isXBRL`, `isInlineXBRL` | 158715, true, true |

Every field is described in the Actor's output schema. Dates are `YYYY-MM-DD`; `acceptedAt` is UTC.

### Who uses SEC filing data?

- **Investors and analysts** watching a portfolio or watchlist for new 8-Ks, earnings (Item 2.02) and insider trades (Form 4).
- **Compliance and risk teams** monitoring counterparties and vendors for material events.
- **Journalists and researchers** tracking filings across an industry.
- **Fintech and data teams** feeding filings into dashboards, alerts or databases.
- **AI agents and assistants** answering "what did these companies file this week?"

### How to use the SEC EDGAR Filings Scraper

1. Enter **companies** as tickers (AAPL, BRK.B) or CIK numbers (320193), up to 500 per run.
2. Optionally pick **form types** (e.g. 8-K, 4), a **Days back** window or **Date from / Date to**, and whether to
   include amendments.
3. Set **Maximum results** and press **Start**.
4. Download the results as JSON, CSV, Excel or HTML, or read them through the API.

### How much does it cost to scrape SEC EDGAR?

This Actor uses **pay-per-result pricing**: you pay only for filings saved to your dataset. There is no monthly fee and no
separate charge for platform usage.

| Apify plan | Price per 1,000 filings |
|---|---|
| Free | $3.00 |
| Bronze | $2.70 |
| Silver | $2.40 |
| Gold | $2.00 |

**Example:** 1,000 filings cost **$3.00** on the free plan and **$2.00** on Gold. A test run with 20 filings costs $0.06.
Each run also has Apify's standard start fee of $0.00005.

In our test runs, 20 filings took about 3 seconds and 1,000 filings from 30 large companies took about 80 seconds.

### Input example

```json
{
    "companies": ["AAPL", "TSLA", "BRK.B"],
    "formTypes": ["8-K", "4"],
    "daysBack": 7,
    "includeAmendments": true,
    "onlyNew": false,
    "maxItems": 100
}
```

### Output example

```json
{
    "companyName": "Tesla, Inc.",
    "cik": "0001318605",
    "ticker": "TSLA",
    "tickers": [
        "TSLA"
    ],
    "exchange": "Nasdaq",
    "sic": "3711",
    "industry": "Motor Vehicles & Passenger Car Bodies",
    "stateOfIncorporation": "TX",
    "formType": "8-K",
    "isAmendment": false,
    "filingDate": "2026-09-29",
    "reportDate": "2026-09-29",
    "acceptedAt": "2026-09-29T20:38:50.000Z",
    "accessionNumber": "0001628280-26-063820",
    "items": [
        "1.01",
        "1.02",
        "2.03",
        "9.01"
    ],
    "itemDescriptions": [
        "Entry into a Material Definitive Agreement",
        "Termination of a Material Definitive Agreement",
        "Creation of a Direct Financial Obligation or an Obligation under an Off-Balance Sheet Arrangement",
        "Financial Statements and Exhibits"
    ],
    "documentDescription": "8-K",
    "primaryDocument": "tsla-20260929.htm",
    "documentUrl": "https://www.sec.gov/Archives/edgar/data/1318605/000162828026063820/tsla-20260929.htm",
    "filingIndexUrl": "https://www.sec.gov/Archives/edgar/data/1318605/000162828026063820/0001628280-26-063820-index.htm",
    "fileSizeBytes": 158715,
    "isXBRL": true,
    "isInlineXBRL": true,
    "sourceUrl": "https://data.sec.gov/submissions/CIK0001318605.json",
    "scrapedAt": "2026-10-13T00:00:00.000Z"
}
```

### Get only new filings every day

Turn on **Only new filings** and schedule the Actor daily. Each run returns only filings that your earlier runs with the
same companies and forms have not returned. Connect the run to email, Slack or Google Sheets to get filing alerts.

### Integrations and API

Run the Actor from the Apify API, the JavaScript or Python client, or connect it to **Make**, **Zapier**,
**Google Sheets**, **Slack** and webhooks. Results can be exported as JSON, CSV, Excel, XML or RSS.

### Use with AI assistants (MCP)

The Actor works as a tool for AI agents through Apify's MCP server: the input fields have plain names and
descriptions, and a run for a few tickers returns in seconds.

### Other public-records scrapers

| Actor | Data |
|---|---|
| [Grants.gov Scraper](https://apify.com/publicrecords101/grants-gov-scraper) | Federal grant opportunities with deadlines, amounts and eligibility |
| [USAspending Scraper](https://apify.com/publicrecords101/usaspending-contracts-scraper) | Federal contract awards, including contracts ending soon (recompete leads) |
| [FDA Recalls Scraper](https://apify.com/publicrecords101/fda-recalls-scraper) | FDA food, drug and medical device recalls in one feed |
| [NIH RePORTER Scraper](https://apify.com/publicrecords101/nih-reporter-scraper) | NIH-funded research projects: newly funded labs, PIs and amounts |
| [Federal Register Scraper](https://apify.com/publicrecords101/federal-register-scraper) | US rules, proposed rules and notices with comment deadlines |

### FAQ

**Is it legal to scrape SEC EDGAR?** EDGAR filings are public records that SEC publishes for anyone to use. This Actor
reads only SEC's official JSON API, declares a contact address as SEC asks, and stays well under SEC's limit of 10
requests per second. It returns filing metadata and links, not the full text of documents. You are responsible for how
you use the data.

**Why do I get fewer results than I expected?** Check the form types, the date window (30 days by default) and Maximum
results. Tickers SEC does not list are reported in the run log and skipped; use the CIK number instead.

**Can I send my own contact email to SEC?** Yes. Set **Your contact email** and it is sent to SEC in the request header
instead of ours. It is not stored.

**How fresh is the data?** Each run reads SEC live, so new filings appear as soon as SEC publishes them.

**Something is wrong or missing?** Open an issue on the Actor's Issues tab and we'll reply within 48 hours. Custom
filters or data joins are welcome too.

# Changelog

This Actor's version history is a separate document: https://apify.com/publicrecords101/sec-edgar-scraper/changelog.md

# Actor input Schema

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

Stock tickers (e.g. AAPL, BRK.B) or SEC CIK numbers (e.g. 320193). Up to 500 per run.

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

Only return these forms, e.g. 8-K, 10-K, 10-Q, 4, S-1, SC 13D, DEF 14A. Leave empty for all forms.

## `daysBack` (type: `integer`):

Return filings from the last this many days. Ignored when "Date from" is set.

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

Earliest filing date to include (YYYY-MM-DD). Overrides "Days back".

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

Latest filing date to include (YYYY-MM-DD). Leave empty for today.

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

Also return amended filings (e.g. 8-K/A when you ask for 8-K).

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

Skip filings returned by your earlier runs with the same companies and forms. Use with a schedule to get daily alerts.

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

Stop after this many filings.

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

SEC asks automated tools to declare a contact. If set, your email is sent to SEC in the request header instead of the default contact. It is not stored.

## Actor input object example

```json
{
  "companies": [
    "AAPL",
    "TSLA",
    "320193"
  ],
  "formTypes": [
    "8-K",
    "4"
  ],
  "daysBack": 7,
  "dateFrom": "2026-01-01",
  "dateTo": "2026-06-30",
  "includeAmendments": true,
  "onlyNew": true,
  "maxItems": 500,
  "contactEmail": "analyst@example.com"
}
```

# Actor output Schema

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

SEC filings found by this run, one per row.

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

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

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

```

## MCP server setup

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