# SEC EDGAR Filings Search - Official API (`slanlabs/sec-edgar-filings`) Actor

Full-text search across SEC EDGAR filings and per-company filing feeds via the SEC's official APIs. 8-K, 10-K, 10-Q, S-1, Form 4 and more. Agent-ready pay-per-event pricing.

- **URL**: https://apify.com/slanlabs/sec-edgar-filings.md
- **Developed by:** [SlanLabs](https://apify.com/slanlabs) (community)
- **Categories:** Business, AI
- **Stats:** 2 total users, 1 monthly users, 0.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$3.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 Search & Monitor

Full-text search inside SEC filings, plus complete per-company filing feeds, via the SEC's own official EDGAR APIs. 8-K, 10-K, 10-Q, S-1, Form 4 and every other form type - two decades of corporate disclosure, one API call away, with pay-per-event pricing.

### Why EDGAR data

EDGAR is the primary source for US public-company disclosure - earnings reports, material events, insider trades, risk factors, executive compensation. Analysts monitor it for signals, journalists for stories, compliance teams for obligations, and increasingly AI agents for grounded financial research. The SEC's APIs are public and free; this Actor makes them agent-friendly: clean rows, sensible defaults, per-filing pricing.

### Modes

- `search-filings` - full-text search inside filing documents (2001 to today). Supports quoted phrases like `"supply chain disruption"`, form-type filters, and custom date ranges.
- `company-filings` - the recent filing history for one company, by ticker (`AAPL`) or CIK. Form filtering and date bounds included.

### What you get per filing

- `accessionNumber`, `form`, `filedAt`, `company`, `cik`, `ticker`
- `documentUrl` - direct link to the primary document
- `filingIndexUrl` - the full filing folder
- `items` (for 8-K item breakdowns), `reportDate`, `periodEnding`

### Inputs

| Field | Required | Description |
| --- | --- | --- |
| `mode` | yes | `search-filings` or `company-filings` |
| `query` | search-filings | Full-text query; quotes for phrases |
| `tickerOrCik` | company-filings | `AAPL` or a 10-digit CIK |
| `forms` | no | Restrict to e.g. `["8-K", "10-K", "S-1", "4"]` |
| `dateFrom` / `dateTo` | no | Filing-date bounds (search defaults to the last 90 days) |
| `maxResults` | no | Default 100, max 1000 |

### Examples

Every 8-K mentioning a CEO transition this quarter:

```json
{ "mode": "search-filings", "query": "\"CEO transition\"", "forms": ["8-K"], "maxResults": 200 }
```

NVIDIA's last 20 filings:

```json
{ "mode": "company-filings", "tickerOrCik": "NVDA", "maxResults": 20 }
```

### FAQ

**Is this the official SEC source?** Yes - EDGAR full-text search and the SEC's submissions API, with the SEC-required declared User-Agent.

**Do I need an SEC account or API key?** No.

**How fresh is it?** New filings are searchable within minutes of acceptance.

**What does it cost?** Pay-per-event: $3 per 1,000 filings plus minimal compute.

**Can I use it for monitoring?** Yes - schedule it with a fixed query; the default 90-day window keeps monitoring queries fast.

**Any usage note?** The SEC asks for fair access rates; the Actor throttles itself accordingly.

### Pipeline patterns

**Thematic monitoring.** Schedule `search-filings` with a standing query - `"cybersecurity incident"`, `"going concern"`, `"restructuring"` - over the default rolling 90-day window, daily. New matches are your signal feed.

**Company watchlists.** Loop `company-filings` over a portfolio of tickers; a new 8-K or Form 4 is often worth knowing about within the hour.

**Event studies.** Use `dateFrom`/`dateTo` around an event window and `forms=["10-K"]` to pull every annual report filed in a period, then fetch `documentUrl` for full-text analysis downstream.

**Insider-trading radar.** `forms=["4"]` in search mode surfaces insider transaction reports matching names or keywords.

### Field notes

`accessionNumber` is the canonical dedupe key. `documentUrl` points at the primary document; `filingIndexUrl` lists every exhibit - useful when the meat is in EX-99 attachments. The full-text index covers 2001 onward; `company-filings` reaches further back for filing metadata. Search defaults to the last 90 days because EDGAR requires both date bounds for a custom range; set them explicitly for historical work.

### More FAQ

**Why did my old-filing search return nothing?** You set only one date bound. EDGAR silently ignores a custom range unless both `dateFrom` and `dateTo` are set - the Actor defaults both for exactly this reason.

**Amendments?** They appear as separate filings (form suffix /A) with their own accession numbers.

**Private companies?** Only SEC-reporting filers - public companies, plus private ones with registered offerings.

**Mutual funds and ETFs?** Yes, same API - funds file N-PORT, N-CSR and other forms that the form filter accepts.

**Can I download the actual document text?** The Actor returns metadata and links; fetch `documentUrl` for the document itself - plain HTML you can parse freely.

**Rate limits?** The SEC asks for no more than 10 requests per second per user; the Actor stays well under that.

### More official-API Actors from SlanLabs

- [App Store Reviews (Official Apple Feeds)](https://apify.com/slanlabs/app-store-reviews) - every public review for any iOS app, any country
- [App Store Top Charts (Official Apple Feeds)](https://apify.com/slanlabs/app-store-top-charts) - live top free, paid and grossing charts for apps, books, podcasts and music
- [Bluesky Scraper - Posts, Profiles, Search](https://apify.com/slanlabs/bluesky-scraper) - posts, profiles, search and threads via the open AT Protocol
- [GDELT Global News Monitor](https://apify.com/slanlabs/gdelt-news-monitor) - worldwide news coverage in 65+ languages, updated every 15 minutes
- [Hacker News Search & Monitor](https://apify.com/slanlabs/hackernews-monitor) - every story and comment since 2006, plus the live front page
- [US Government Spending & Contracts (USASpending)](https://apify.com/slanlabs/usaspending-contracts) - federal contracts, grants and loans by keyword, agency, NAICS or recipient

# Actor input Schema

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

search-filings: full-text search inside filing documents (EDGAR full-text search, last ~24 years, 2001+). company-filings: recent filings for one company by ticker or CIK.

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

search-filings only. Supports quotes for phrases, e.g. "artificial intelligence".

## `tickerOrCik` (type: `string`):

company-filings only. Stock ticker (AAPL) or 10-digit CIK.

## `forms` (type: `array`):

Restrict to form types, e.g. \["8-K", "10-K", "10-Q", "S-1", "4"]. Empty means all.

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

YYYY-MM-DD. Filings filed on/after this date.

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

YYYY-MM-DD. Filings filed on/before this date.

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

Stop after this many results.

## Actor input object example

```json
{
  "query": "\"artificial intelligence\"",
  "tickerOrCik": "AAPL",
  "maxResults": 100
}
```

# Actor output Schema

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

SEC filings dataset

## `summary` (type: `string`):

Run summary

# 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 = {
    "query": "\"artificial intelligence\"",
    "tickerOrCik": "AAPL"
};

// Run the Actor and wait for it to finish
const run = await client.actor("slanlabs/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 = {
    "query": "\"artificial intelligence\"",
    "tickerOrCik": "AAPL",
}

# Run the Actor and wait for it to finish
run = client.actor("slanlabs/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 '{
  "query": "\\"artificial intelligence\\"",
  "tickerOrCik": "AAPL"
}' |
apify call slanlabs/sec-edgar-filings --silent --output-dataset

```

## MCP server setup

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