# SEC EDGAR Filings Search | Keyword, Company, Form, Date (`genial_candlestand/sec-edgar-filings-search`) Actor

Search SEC EDGAR filings and get company name, CIK, ticker, form type, filing date, states and document links per row. Filter by full-text keyword, company, form, dates or state; many searches per run, official EDGAR data, no login.

- **URL**: https://apify.com/genial_candlestand/sec-edgar-filings-search.md
- **Developed by:** [Flowo](https://apify.com/genial_candlestand) (community)
- **Categories:** Other, Automation
- **Features:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.63 / 1,000 filing documents

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

## SEC EDGAR Filings Search | Keyword, Company, Form, Date

![SEC EDGAR Filings Search | Keyword, Company, Form, Date](https://api.apify.com/v2/key-value-stores/Ll7RrWtDkZYOrBvfE/records/sec-gov-public-records-search-banner-3257e395.png)

This actor searches SEC EDGAR and returns one row per filing document with the company name, CIK, ticker, form type, filing date, report period, SIC code, office and incorporation states, 8-K item codes, and direct links to the document and the filing index. Combine full-text keywords with company, form type, date range and state filters. No login or API key is needed.

### What does SEC EDGAR Filings Search do?

You give any combination of keywords (phrases, OR, exclusions, wildcards), companies (ticker, name or CIK, up to 50), form types (10-K, 10-Q, 8-K, S-1, 4, DEF 14A, 13F-HR …), a filing-date range or "last N days", and a US state or country code. The actor queries the SEC EDGAR full-text search and returns structured JSON rows. Each row is one EDGAR document, either the main form or an exhibit such as EX-99.1.

It lists and links filings. It does not extract document text or XBRL financial data; you or your AI agent fetch the linked documents. It suits analysts, compliance and KYC teams, journalists, researchers and scheduled filing monitors.

### How to scrape SEC EDGAR filings

![How SEC EDGAR Filings Search works: Takes your keywords, companies, forms, dates and states; Queries EDGAR full-text search, 100 hits per page; Splits long date ranges to pass the 10,000-hit cap; Retu](https://api.apify.com/v2/key-value-stores/Ll7RrWtDkZYOrBvfE/records/sec-gov-public-records-search-how-be96ef18.png)

1. Open the actor in Apify Console and go to **Input**.
2. Enter at least one of **Keywords**, **Companies**, **Form types** or **States / countries**.
3. Optionally set **Filed from / Filed to** or **Last N days**, then **Max results**.
4. Click **Start** and download the dataset as JSON, CSV or Excel.

You can also start it through the Apify API, or from an AI agent through Apify MCP, with the same JSON input.

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

Price per event by Apify plan:

| Event | Free | Bronze | Silver | Gold and above |
|---|---|---|---|---|
| Filing document | $0.90 per 1,000 | $0.81 per 1,000 | $0.72 per 1,000 | $0.63 per 1,000 |
| Actor start | $0.00005 | $0.00005 | $0.00005 | $0.00005 |

A test run with the API example input below returned 100 rows in 1 s.

One paid event is one result row, a filing document: $0.0009 on the Free plan, about $0.90 per 1,000 rows. The actor start event is $0.00005 (the actor runs at 256 MB). Searches with no matches are free. Cost scenarios on the Free plan, start fee included:

| Scenario | Rows | Cost |
|---|---|---|
| Quick check of one company's 10-Qs | 100 | about $0.09 |
| Daily 8-K keyword monitor | 1,000 | about $0.90 |
| 10-K keyword study for one year | 5,000 | about $4.50 |
| Large screening from one search | 10,000 | about $9.00 |

### Input

![SEC EDGAR Filings Search input example: Keywords (full-text search), Form types, Filed from, Filed to, State / country means, Sort by, One row per filing](https://api.apify.com/v2/key-value-stores/Ll7RrWtDkZYOrBvfE/records/sec-gov-public-records-search-input-7530e25e.png)

Main fields:

- `queries` — full-text keywords, one search per line: `"going concern"`, `bitcoin OR ethereum`, `-exclude`, `wildcard*`.
- `companies` — tickers, CIKs or names, up to 50.
- `forms` — form types; a form also matches its amendments (10-K finds 10-K/A).
- `startDate` / `endDate` (YYYY-MM-DD) or `lastDays` — not both.
- `locations` and `locationType` (`located` or `incorporated`) — state or EDGAR country codes.
- `sort` — `relevance`, `newest` or `oldest`.
- `onePerFiling` — keep only the first matching document of each filing.
- `maxItems` — total row limit (default 100).

```json
{
  "queries": ["\"artificial intelligence\""],
  "forms": ["10-K"],
  "startDate": "2025-01-01",
  "endDate": "2025-12-31",
  "sort": "relevance",
  "maxItems": 100
}
```

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

![SEC EDGAR Filings Search output example: Filed, Form, Company, Ticker, CIK, Document type](https://api.apify.com/v2/key-value-stores/Ll7RrWtDkZYOrBvfE/records/sec-gov-public-records-search-output-550a2884.png)

| Field | Meaning |
|---|---|
| `companyName`, `cik`, `ticker`, `tickers` | First filer listed by EDGAR |
| `form`, `fileType`, `fileDescription` | Filing form and the type of this document |
| `filingDate`, `reportDate` | Filing date and period of report |
| `url`, `filingIndexUrl` | Document and filing index on sec.gov |
| `accessionNumber`, `documentName`, `sequence` | Filing and document identifiers |
| `sicCodes`, `businessStates`, `businessLocations`, `incorporationStates` | Industry and location |
| `itemCodes` | 8-K item numbers |
| `entityNames`, `entityCiks` | All filers (e.g. reporting owner and issuer on Form 4) |
| `relevanceScore`, `query`, `position` | Match score, the search that found the row, rank |

Example row (shortened):

```json
{
  "url": "https://www.sec.gov/Archives/edgar/data/1498148/000164117225012903/form10-k.htm",
  "filingIndexUrl": "https://www.sec.gov/Archives/edgar/data/1498148/000164117225012903/0001641172-25-012903-index.htm",
  "accessionNumber": "0001641172-25-012903",
  "form": "10-K",
  "fileType": "10-K",
  "filingDate": "2025-05-29",
  "reportDate": "2025-02-28",
  "companyName": "Artificial Intelligence Technology Solutions Inc.",
  "cik": "0001498148",
  "ticker": "AITX",
  "sicCodes": ["7372"],
  "businessStates": ["MI"],
  "incorporationStates": ["NV"],
  "relevanceScore": 17.735008,
  "query": "\"artificial intelligence\"",
  "position": 1
}
```

### Use cases

- Find every 10-K mentioning "going concern" for companies incorporated in Nevada.
- Run a daily schedule with `lastDays: 1` to catch new 8-Ks that mention "tariff".
- List all 10-Q filings of a set of tickers for a period.
- Screen companies for KYC or due diligence by state, form and keyword.
- Let an AI agent pick relevant filings for a question, then read the linked documents.

### Limitations

- Full-text search covers filings from 2001.
- Keyword rows are per document, so exhibits add rows; use `onePerFiling` for unique filings.
- One search returns at most 10,000 results with relevance sorting. With newest/oldest the date range is split automatically to go deeper.
- Company names resolve to the best EDGAR match; unknown ones are skipped with a warning.
- For Forms 3/4/5, `companyName` is the reporting owner; the issuer is in `entityNames`.
- Many fields (`ticker`, `reportDate`, `itemCodes`) can be empty. Very fresh filings may appear after a delay of a few minutes.
- The search uses an SEC endpoint that is public but undocumented and could change.

### Tips and troubleshooting

- Give at least one of keywords, companies, form types or states. Dates or Last N days alone fail with an input error that names these four fields.
- Use either Last N days or Filed from / Filed to, not both. Dates must be real YYYY-MM-DD dates and the start must not be after the end.
- States are two-letter codes such as NV or TX; a full name like California is rejected.
- To go beyond 10,000 results of one search, sort by newest or oldest: the date range is then split automatically.
- For a daily monitor, schedule the run with Last N days = 1 and One row per filing on.
- Fewer rows than expected? Check that the filters are not too narrow, and the run log for a company name that was skipped or resolved to another EDGAR match.

### API, MCP and integrations

Run the actor from your code with the same JSON input as in Console. Your API token is in [Console → Settings → API & Integrations](https://console.apify.com/settings/integrations).

**Python** (`pip install apify-client`):

```python
from apify_client import ApifyClient

client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("genial_candlestand/sec-edgar-filings-search").call(run_input={
    "queries": ["\"artificial intelligence\""],
    "forms": ["10-K"],
    "startDate": "2025-01-01",
    "endDate": "2025-12-31",
    "maxItems": 100,
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)
```

**Node.js** (`npm install apify-client`):

```js
import { ApifyClient } from 'apify-client';

const client = new ApifyClient({ token: 'YOUR_APIFY_TOKEN' });
const run = await client.actor('genial_candlestand/sec-edgar-filings-search').call({
    "queries": ["\"artificial intelligence\""],
    "forms": ["10-K"],
    "startDate": "2025-01-01",
    "endDate": "2025-12-31",
    "maxItems": 100,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);
```

**HTTP** — one request runs the actor and returns the results (runs up to 5 minutes; longer ones: [run asynchronously](https://docs.apify.com/api/v2/act-runs-post)):

```bash
curl -X POST "https://api.apify.com/v2/acts/genial_candlestand~sec-edgar-filings-search/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"queries":["\"artificial intelligence\""],"forms":["10-K"],"startDate":"2025-01-01","endDate":"2025-12-31","maxItems":100}'
```

**AI agents (MCP).** Add the actor as a tool of the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp). Claude Code:

```bash
claude mcp add --transport http apify "https://mcp.apify.com?tools=genial_candlestand/sec-edgar-filings-search"
```

Claude Desktop, Cursor or VS Code: `{"mcpServers": {"apify": {"url": "https://mcp.apify.com?tools=genial_candlestand/sec-edgar-filings-search"}}}`. Then ask, for example:

- "Find 10-K filings from 2025 that mention going concern, incorporated in Nevada"
- "List the latest 10-Q filings of AAPL, TSLA and MSFT"
- "Show new 8-Ks from the last day that mention tariff"

**Integrations.** Run it on a schedule with [Apify Schedules](https://docs.apify.com/platform/schedules) and send the results to Google Sheets, Slack, Zapier, Make, n8n or your webhook — see [Apify integrations](https://docs.apify.com/platform/integrations).

### FAQ

**Is it legal to scrape SEC EDGAR?**<br>
EDGAR is a public SEC database, and the actor reads only public data, with a declared user agent and rate limiting in line with SEC fair access. You are responsible for how you use the data. Personal data appears only as the SEC shows it publicly, such as filer names.

**Do I need a proxy or login?**<br>
No. The proxy setting is optional.

**Does it return filing text or financial statements?**<br>
No. It returns metadata and links to the documents.

**Why do I get several rows per filing?**<br>
Keyword searches match each document, including exhibits. Turn on `onePerFiling`.

**How is it different from other SEC EDGAR actors?**<br>
It runs full-text keyword search and returns 29 fields per row, including the filing index URL, SIC codes, business and incorporation states, 8-K item codes, relevance score and the search that found the row. It does not return financial statements, document text or AI summaries. The price is $0.90 per 1,000 rows on the Free plan.

### Also useful

- [Trustpilot Reviews Scraper](https://apify.com/genial_candlestand/trustpilot-reviews-scraper) — check what customers say about a company you found in filings: ratings and replies
- [Google Ads Transparency Scraper](https://apify.com/genial_candlestand/google-ads-transparency-scraper) — see the public ads of an advertiser or domain you research
- [Google Trends Scraper](https://apify.com/genial_candlestand/google-trends-scraper) — compare filing topics with search interest over time
- [Google Jobs Scraper](https://apify.com/genial_candlestand/google-jobs-scraper) — see which jobs a company currently advertises

# Actor input Schema

## `queries` (type: `array`):

Words to find in filings and exhibits, one search per line. Supports "exact phrase", OR, -exclude and wildcard\*. Optional if you filter by company, form, date or state.

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

Ticker (TSLA), CIK (320193) or name (Berkshire Hathaway), one per line, at most 50. Names resolve to the best EDGAR match.

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

EDGAR form types such as 10-K, 10-Q, 8-K, S-1, 4, DEF 14A, 13F-HR. A form also matches its amendments. Empty = all forms.

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

Earliest filing date, YYYY-MM-DD (inclusive). Empty = from 2001. Must not be after 'Filed to'. Do not combine with 'Last N days'.

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

Latest filing date, YYYY-MM-DD (inclusive). Empty = today. Do not combine with 'Last N days'.

## `lastDays` (type: `integer`):

Only filings from the last N days, e.g. 1 for a daily scheduled run. Use instead of Filed from / Filed to.

## `locations` (type: `array`):

Only companies located (or incorporated, see next field) in these EDGAR codes: US state codes like CA, NY, TX, or EDGAR country codes like X0 (United Kingdom). Two letters/digits each.

## `locationType` (type: `string`):

How 'States / countries' is matched: principal office location or state of incorporation. Used only when 'States / countries' is filled.

## `sort` (type: `string`):

Order of results. Relevance applies to keyword searches; without keywords EDGAR returns newest first. Above 10 000 results per search the actor switches relevance to newest (with a warning) to go deeper.

## `onePerFiling` (type: `boolean`):

Keyword searches match each document of a filing (main form and exhibits such as EX-99.1). Turn on to keep only the first matching document of each filing (unique accession numbers).

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

Stop after this many rows in total (all searches together). Up to 10 000 per search with relevance; more with newest/oldest (the date range is split automatically).

## `proxyConfiguration` (type: `object`):

Not needed: SEC APIs are public. Leave off unless your runs get blocked.

## Actor input object example

```json
{
  "queries": [
    "\"artificial intelligence\""
  ],
  "forms": [
    "10-K"
  ],
  "startDate": "2025-01-01",
  "endDate": "2025-12-31",
  "locationType": "located",
  "sort": "relevance",
  "onePerFiling": false,
  "maxItems": 100,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

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

Dataset with all found filing documents

# 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 = {
    "queries": [
        "\"artificial intelligence\""
    ],
    "forms": [
        "10-K"
    ],
    "startDate": "2025-01-01",
    "endDate": "2025-12-31",
    "maxItems": 100
};

// Run the Actor and wait for it to finish
const run = await client.actor("genial_candlestand/sec-edgar-filings-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 = {
    "queries": ["\"artificial intelligence\""],
    "forms": ["10-K"],
    "startDate": "2025-01-01",
    "endDate": "2025-12-31",
    "maxItems": 100,
}

# Run the Actor and wait for it to finish
run = client.actor("genial_candlestand/sec-edgar-filings-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 '{
  "queries": [
    "\\"artificial intelligence\\""
  ],
  "forms": [
    "10-K"
  ],
  "startDate": "2025-01-01",
  "endDate": "2025-12-31",
  "maxItems": 100
}' |
apify call genial_candlestand/sec-edgar-filings-search --silent --output-dataset

```

## MCP server setup

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