# SEC EDGAR Scraper (`rowfeed/sec-edgar-filings-scraper`) Actor

SEC EDGAR filing-index metadata as clean JSON: company filing history by ticker or CIK, or full-text search across all filers. Official SEC APIs, no login, no document parsing.

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

## Pricing

$0.50 / 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 – Company History & Full-Text Search

Get SEC EDGAR filing-index metadata as clean JSON: every 10-K, 10-Q, 8-K, Form 4 and other filing a company has made, or every filing across all of EDGAR that matches a full-text search.
Built for financial analysts, compliance teams, researchers and AI agents who need a reliable filing index without scraping HTML, running headless browsers or fighting SEC's 403s.
Plain HTTPS calls to SEC's own official, key-less JSON APIs with retries and a silent-failure check, so a scheduled run keeps working when EDGAR hiccups.

### What you get

- **Company filing history** – every accession number, form type, filing date, report period and primary-document link for a ticker or CIK, filterable by form type and date, newest first.
- **EDGAR full-text search** – every filing across all filers that matches a keyword or phrase, filterable by form type and date range, so you can track who is disclosing what (e.g. "climate risk", "data breach", a competitor's name).
- **Filing-index metadata only** – accession number, company, CIK, ticker, form type, dates, document link and filing size. No document bodies are parsed, so insider names on Forms 3/4/5 appear only as the index row SEC already publishes, never scraped out of the form text.

### Sample row

One 10-K from `mode: "company"` with `companies: ["AAPL"]`.

```json
{
  "accession_number": "0000320193-25-000079",
  "company_name": "Apple Inc.",
  "cik": 320193,
  "ticker": "AAPL",
  "form_type": "10-K",
  "filing_date": "2025-10-31",
  "report_period": "2025-09-27",
  "primary_document": "aapl-20250927.htm",
  "filing_url": "https://www.sec.gov/Archives/edgar/data/320193/000032019325000079/aapl-20250927.htm",
  "index_url": "https://www.sec.gov/Archives/edgar/data/320193/000032019325000079/0000320193-25-000079-index.htm",
  "file_number": "001-36743",
  "size": 9392337,
  "scraped_at": "2026-09-16T06:30:52+00:00",
  "acceptanceDateTime": "2025-10-31T10:01:26.000Z",
  "act": "34",
  "isXBRL": 1,
  "isInlineXBRL": 1,
  "primaryDocDescription": "10-K"
}
```

### Filters

| Input | Mode | Default | What it does |
|---|---|---|---|
| `mode` | – | `company` | `company` = filing history for specific companies. `search` = full-text search across all filers. |
| `companies` | company | `["AAPL", "MSFT", "TSLA"]` | Ticker symbols (e.g. `AAPL`) or CIK numbers (e.g. `320193`). An unknown ticker/CIK becomes an unbilled error row instead of stopping the run. |
| `formTypes` | both | `[]` | Keep only these form types, e.g. `["10-K", "10-Q", "8-K"]`. Empty = every form type. In `search` mode this matches SEC's form family, so `["8-K"]` also returns `8-K/A` amendments; check `form_type` on the row to filter exactly. |
| `since` | company | – | Only filings on or after this date (`YYYY-MM-DD`). |
| `maxFilingsPerCompany` | company | `100` | Row cap per company. |
| `query` | search | `climate risk` | Full-text search phrase, matched against filing text. |
| `startDate` / `endDate` | search | – | Date range (`YYYY-MM-DD`). |
| `maxResults` | search | `100` | Row cap for the search. |

### Pricing

Pay per event, no subscription: **$0.50 per 1,000 filing rows**. A default run (300 filings across 3 companies) costs $0.15. Set a maximum charge on the run and the Actor stops cleanly when it is reached, charging only for rows that were actually saved.

### Use it from your tools

- **API and SDKs** – call it via the Apify API or the official Python/JavaScript clients: one call to start the run, one to fetch the dataset as JSON or CSV.
- **Schedules** – run it daily inside Apify to catch new 8-Ks or 10-Qs the moment they post, and pipe rows to Google Sheets, a webhook or your own storage.
- **n8n, Make and Zapier** – trigger runs and feed filings into a workflow through Apify's integration for each.
- **AI agents and MCP** – this Actor is eligible for agentic use via Apify's MCP server and supports pay-per-event pricing, so an agent can pull a company's filing history or run a full-text search mid-task and pay only per row it actually reads.

### Details

- **Source**: three official SEC EDGAR APIs – full-text search (`efts.sec.gov/LATEST/search-index`), company submissions (`data.sec.gov/submissions`) and the ticker/CIK lookup (`www.sec.gov/files/company_tickers.json`). No login, no proxies, no browser, no scraping of filing bodies.
- **What is not included**: the contents of filings. Forms 3/4/5 (insider transactions) are returned only as the filing-index row SEC already publishes as public record (who filed, when, which form) – never as parsed officer/insider details pulled from the document text.
- **Reliability**: SEC requires a descriptive User-Agent and rate-limits requests; this Actor identifies itself accordingly and stays under 4 requests/second. 429 and 5xx responses are retried with exponential backoff (5 tries), a 200 without valid JSON counts as a failure, and one bad ticker or CIK never stops the run: it becomes an error row (`company`, `error`, `errorMessage`) and the rest continues. A run fails only when it produced no rows *and* hit real request errors; an unknown ticker with no other errors is a successful, empty-for-that-row run.
- **Run stats**: the `STATS` record in the run's key-value store holds request and error counts per category (`network`, `rate_limit`, `blocked`, `not_found`, `other`).
- **Output**: one dataset row per filing with the columns above first and every raw SEC field after them. The Overview table shows company, ticker, form, filing date, document and link. Export as JSON, CSV or Excel, fetch through the Apify API, or schedule runs and pipe them into Google Sheets, Make, Zapier or your own code.

Not affiliated with the U.S. Securities and Exchange Commission. Data comes from SEC's own public EDGAR APIs.

# Actor input Schema

## `mode` (type: `string`):

company = filing history for specific companies (one row per filing). search = EDGAR full-text search across all filers for a keyword or phrase (one row per matching document).

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

Ticker symbols (e.g. AAPL) or CIK numbers (e.g. 320193) to fetch filing history for. An unknown ticker or CIK becomes an unbilled error row instead of stopping the run.

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

Keep only these SEC form types, e.g. 10-K (annual report), 10-Q (quarterly report), 8-K (material event), 4 (insider trade). Leave empty for every form type.

## `since` (type: `string`):

Only keep filings dated on or after this date (YYYY-MM-DD). Leave blank for no lower bound.

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

Stop after this many filing rows per company. Each row is one `filing` event ($0.0005 each).

## `query` (type: `string`):

Full-text search phrase, e.g. "climate risk" or a company/product name. Matches document text across every EDGAR filer.

## `startDate` (type: `string`):

Only include filings dated on or after this date (YYYY-MM-DD). Leave blank for no lower bound.

## `endDate` (type: `string`):

Only include filings dated on or before this date (YYYY-MM-DD). Leave blank for no upper bound.

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

Stop after this many search result rows. Each row is one `filing` event ($0.0005 each).

## Actor input object example

```json
{
  "mode": "company",
  "companies": [
    "AAPL",
    "320193"
  ],
  "formTypes": [
    "10-K",
    "10-Q",
    "8-K"
  ],
  "maxFilingsPerCompany": 100,
  "query": "climate risk",
  "maxResults": 100
}
```

# Actor output Schema

## `results` (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 = {};

// Run the Actor and wait for it to finish
const run = await client.actor("rowfeed/sec-edgar-filings-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 = {}

# Run the Actor and wait for it to finish
run = client.actor("rowfeed/sec-edgar-filings-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 '{}' |
apify call rowfeed/sec-edgar-filings-scraper --silent --output-dataset

```

## MCP server setup

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