# SEC EDGAR full-text search (`apex-nexus/sec-edgar-full-text-search`) Actor

Keyless full-text search across SEC EDGAR filings via the official SEC EFTS API. Citation-ready results: company, CIK, form, filing date, accession, document URL, score. Public SEC data only - no credentials, proxies, API keys, LLMs. Stateless, not a tracker. Free when nothing matches.

- **URL**: https://apify.com/apex-nexus/sec-edgar-full-text-search.md
- **Developed by:** [Valunex](https://apify.com/apex-nexus) (community)
- **Categories:** Business
- **Security:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per usage

This Actor is paid per platform usage. The Actor is free to use, and you only pay for the Apify platform usage, which gets cheaper the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-usage

## 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 full-text search — citation-ready filing matches for AI assistants

Run a **keyless full-text search across SEC EDGAR filings** via the official SEC
EFTS API (`https://efts.sec.gov/LATEST/search-index`) and get back
**citation-ready results**: company, CIK, form, filing date, accession number,
document URL and relevance score for every matching filing.

**Actor:** `apex-nexus~sec-edgar-full-text-search`
**Store listing:** not yet published — publication (FREE or PAY_PER_EVENT) is a
director action and is gated by Apify's 5-publications-per-24h limit. This
README must not be changed to claim a store listing until the director flips it.

### What it is for

AI-assistant builders, legal researchers and compliance analysts who need to
find *what companies said* in EDGAR filings (full text, not just the recent
submissions metadata that most SEC scrapers return).

The Actor:

1. Calls the public SEC EFTS full-text search endpoint
   (`https://efts.sec.gov/LATEST/search-index`) with your query.
2. Parses every hit into a citation-ready dataset item: company, CIK, form,
   filing date, accession number, document URL and relevance score.
3. Caps output at `maxItems` (default 25, max 100) so a default run finishes in
   seconds.

Typical workflows:

- **"What did companies say about X?"** Search for a phrase (default: "material
  weakness") and get back every matching filing with a direct document URL.
- **Company research.** Restrict to a form type (`forms=10-K`) and scan filings
  for a term of interest.
- **Verification.** Every item carries `accession`, `cik` and `documentUrl`, so
  you can open the source SEC Archives document and confirm the match.

### What this is NOT

This is explicitly **not a tracker**: no watchlist state, no delta alerts, no
checkpoints, nothing remembered between runs. Each run is stateless and
independent. It is distinct from N1 (SEC EDGAR filing extractor — returns
citation-ready text chunks from a filing you bring), N2 (Form 4/3/5 XML to
transaction table), N3 (SEC Company Facts XBRL to flat rows) and N6 (SEC
10-K/10-Q financial-statement extractor): N2-fulltext searches *across all*
EDGAR full text rather than processing one filing you supply. The Actor is free
when there is nothing to return.

### Data sources

Public SEC data only, via the official SEC EFTS endpoint — no credentials, no
proxies, no API keys, no LLMs, no commercial inference:

- `https://efts.sec.gov/LATEST/search-index?q=...&forms=...` — full-text search

One request per run, so SEC rate guidance is respected trivially.

### Search terms (Store discovery)

Users find this Actor on the Apify Store with terms such as:

- SEC EDGAR full-text search
- EDGAR full text search
- SEC filing full text search
- sec full text search agent
- EDGAR citation-ready results

The Store title and description carry the core terms ("SEC EDGAR full-text
search", "SEC filing full text search", "EDGAR full text search", "sec full
text search agent", "citation-ready filing matches"); this section lists them
for reference when updating the listing metadata.

### Input

See `.actor/input_schema.json`. `query` defaults to `"material weakness"`.

| Field | Type | Default | Description |
|-------|------|---------|-------------|
| `query` | string | `"material weakness"` | Full-text search query passed to the SEC EFTS API. |
| `forms` | string | — | Optional comma-separated SEC form types (e.g. `"10-K"` or `"10-K,10-Q,8-K"`). All forms when omitted. |
| `maxItems` | integer | `25` | Hard cap on dataset items per run (1–100). |

Example input (default run):

```json
{
  "query": "material weakness",
  "maxItems": 25
}
```

Example input (10-Ks only):

```json
{
  "query": "going concern",
  "forms": "10-K",
  "maxItems": 10
}
```

### Output

One dataset item per matching filing. Download the whole dataset as CSV or JSON
from the Apify run. See `.actor/output_schema.json` and
`.actor/dataset_schema.json`.

| Field | Type | Description |
|-------|------|-------------|
| `query` | string | The search query this run used. |
| `company` | string | Company name as published in the EFTS record. |
| `cik` | string | SEC CIK (zero-padded to 10 digits). |
| `form` | string | SEC form type of the matching filing. |
| `filingDate` | string | Date filed with EDGAR (YYYY-MM-DD). |
| `accession` | string | SEC accession number. |
| `document` | string | Primary document file name (parsed from the EFTS hit id). |
| `documentUrl` | string (uri) | Direct URL of the SEC Archives filing document. |
| `score` | number|null | EFTS relevance score (higher = better match). |
| `excerpt` | string | EFTS returns scores, not excerpts — open `documentUrl` to locate the match. |
| `retrievedAt` | string | UTC timestamp (ISO 8601). |

Example output item:

```json
{
  "query": "material weakness",
  "company": "ChromaDex Corp. (CDXC) (CIK 0001386570)",
  "cik": "0001386570",
  "form": "10-K/A",
  "filingDate": "2020-05-18",
  "accession": "0001654954-20-005725",
  "document": "cdxc10ka_12312019.htm",
  "documentUrl": "https://www.sec.gov/Archives/edgar/data/1386570/000165495420005725/cdxc10ka_12312019.htm",
  "score": 9.922052,
  "excerpt": "",
  "retrievedAt": "2026-11-03T14:00:00+00:00"
}
```

### Limits

- One search request per run; results are capped at `maxItems` (default 25,
  max 100).
- Invalid or unresolvable input finishes with an empty dataset rather than
  crashing.
- Requests are keyless and paced trivially below SEC rate guidance.
- The EFTS search-index endpoint returns relevance scores, not highlighted
  excerpts; `excerpt` is intentionally empty — open `documentUrl` for the
  matching text.

### Quality gate (live, verified)

**Actor:** `apex-nexus~sec-edgar-full-text-search` (private — publication is a
director action).

**Default run** (input `{"query": "material weakness", "maxItems": 25}`):
returns >0 dataset items in under 5 minutes (verified via
`tools/smoke_test.py` against the live EFTS API).

### Claims statement

All claims in this README are limited to what the product verifiably does: it
calls the public SEC EFTS full-text search API and returns citation-ready items
(company, CIK, form, filing date, accession number, document URL, relevance
score) for matching filings. This README contains no revenue, user, or adoption
claims, because none are verified.

# Actor input Schema

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

Full-text search query passed to the SEC EFTS API (e.g. "material weakness"). Defaults to "material weakness".

## `forms` (type: `string`):

Optional comma-separated SEC form types to restrict the search to (e.g. "10-K" or "10-K,10-Q,8-K"). All forms when omitted.

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

Hard cap on the number of dataset items emitted per run (1-100).

## Actor input object example

```json
{
  "query": "material weakness",
  "forms": "",
  "maxItems": 25
}
```

# Actor output Schema

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

Citation-ready SEC EDGAR full-text search results — one item per matching filing.

# 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("apex-nexus/sec-edgar-full-text-search").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("apex-nexus/sec-edgar-full-text-search").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 apex-nexus/sec-edgar-full-text-search --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,apex-nexus/sec-edgar-full-text-search"
        }
    }
}
```

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/DlyLKc4K3Htt1hyyE/builds/AaN6tuFuc6g1HGRpN/openapi.json
