# SEC EDGAR Filings Scraper: 10-K, 10-Q, 8-K and Company Data (`santamaria-automations/sec-edgar-filings-scraper`) Actor

Get SEC EDGAR filings by ticker, CIK or company name, or search filing text. Returns form type, dates, 8-K items, document links and company profile. Pay per event.

- **URL**: https://apify.com/santamaria-automations/sec-edgar-filings-scraper.md
- **Developed by:** [NanoScrape](https://apify.com/santamaria-automations) (community)
- **Categories:** Lead generation, Other
- **Security:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $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

Get filings from the SEC EDGAR database by ticker, CIK or company name, or search the text of filings. You get one record per filing: form type, filing and report dates, 8-K item numbers, file sizes, XBRL flags, links to the filing page and the main document, and the company profile (industry code, address, phone, fiscal year end, exchanges). Use it for investor research, compliance monitoring, event tracking from 8-K filings, and lead lists based on public companies.

The data comes from the public EDGAR interfaces of the U.S. Securities and Exchange Commission. No API key is needed. The actor identifies itself with a descriptive User-Agent and keeps its request rate below the limits of the SEC fair access policy.

### What you get

One record per filing. Fields a filing does not have are `null` (or an empty list).

| Field | Type | Description |
|-------|------|-------------|
| `accession_number` | string | EDGAR accession number, unique per filing |
| `cik` | string | Company CIK, 10 digits |
| `company_name` | string or null | Company name |
| `ticker` | string or null | First ticker of the company |
| `tickers` | array | All tickers of the company |
| `exchanges` | array | Exchanges of the company, for example `Nasdaq` |
| `form_type` | string | Form type, for example `10-K`, `10-Q`, `8-K`, `4` |
| `filing_date` | string or null | Filing date, `YYYY-MM-DD` |
| `report_date` | string or null | Period of report, `YYYY-MM-DD` |
| `acceptance_datetime` | string or null | Time EDGAR accepted the filing (UTC) |
| `act` | string or null | Securities act, for example `33` or `34` |
| `file_number`, `film_number` | string or null | SEC file number and film number |
| `items` | array | 8-K item numbers such as `2.02` and `9.01`; empty for other forms |
| `core_type` | string or null | Core type as listed by EDGAR, usually the form type or XBRL |
| `size` | integer or null | Size of the filing in bytes |
| `is_xbrl`, `is_inline_xbrl`, `is_xbrl_numeric` | boolean or null | XBRL flags of the filing |
| `primary_document` | string or null | File name of the main document |
| `primary_doc_description` | string or null | Description of the main document |
| `filing_url` | string | Filing index page on sec.gov |
| `document_url` | string or null | Main document on sec.gov |
| `sic`, `sic_description` | string or null | Standard Industrial Classification code and name |
| `entity_type`, `filer_category` | string or null | EDGAR entity type and filer category |
| `state_of_incorporation` | string or null | State or country of incorporation |
| `fiscal_year_end` | string or null | Fiscal year end as `MMDD` |
| `business_address`, `mailing_address` | object or null | `street1`, `street2`, `city`, `state`, `state_name`, `zip`, `country`, `is_foreign`, `foreign_region` |
| `phone` | string or null | Company phone number |
| `ein` | string or null | Employer identification number as published by EDGAR |
| `lei`, `website`, `investor_website` | string or null | Published when the company has filed them |
| `search_query` | string or null | The search text that returned the filing; `null` for company lookups |
| `search_score` | number or null | Relevance score of the best matching document in the filing |
| `matched_document_name`, `matched_document_type`, `matched_document_description`, `matched_document_url` | string or null | The best matching document of the filing (for example the 10-K itself or an exhibit) |
| `scraped_at` | string | UTC timestamp, ISO 8601 |

EDGAR full-text search returns matching documents and a relevance score. It does not return text snippets, so the record names the matching document and links to it.

### Input

| Field | Type | Default | Description |
|-------|------|---------|-------------|
| `companies` | list of text | empty | Tickers (`AAPL`), CIK numbers (`0000320193` or `320193`) or company names (`Microsoft Corp`). A comma or line separated text also works. A name uses the best match in the SEC company list. |
| `searchQuery` | text | empty | Full-text search over filings, for example `"going concern"` with quotes for an exact phrase. Covers filings from 2001 on. With `companies` given, the search is limited to those companies. |
| `formTypes` | list of text | empty (all forms) | For example `10-K`, `10-Q`, `8-K`, `4`, `S-1`. A form type matches exactly: `10-K` does not include `10-K/A`, so list both to get both. |
| `dateFrom`, `dateTo` | text | empty | Filing date range, `YYYY-MM-DD`, both ends included. |
| `maxResults` | integer | `100` | Maximum number of filings across all companies. `0` means no limit. The limit is shared equally between the companies; a share that is not used goes to the later ones. |
| `includeOlderFilings` | boolean | `false` | EDGAR lists the most recent filings of a company first and keeps older ones on extra pages. Switch on to read those pages as well. Company lookups only. |

Numbers may be given as text (`"25"`). An empty input `{}` runs a small sample (company `AAPL`, forms `10-K`, `10-Q` and `8-K`, up to 10 filings) and the run status says so. If the input cannot be read, the actor runs that same sample and writes a warning to the log. A company given twice, or by ticker and by CIK, is fetched once, and a filing that is found twice is delivered once. Dates that are not `YYYY-MM-DD` stop the run before anything is charged.

#### Example input

```json
{
  "companies": ["AAPL", "MSFT", "0001318605"],
  "formTypes": ["10-K", "10-Q", "8-K"],
  "dateFrom": "2026-01-01",
  "maxResults": 60
}
```

Full-text search:

```json
{
  "searchQuery": "\"going concern\"",
  "formTypes": ["10-K"],
  "dateFrom": "2026-01-01",
  "maxResults": 20
}
```

#### Example output

```json
{
  "accession_number": "0000320193-25-000079",
  "cik": "0000320193",
  "company_name": "Apple Inc.",
  "ticker": "AAPL",
  "tickers": ["AAPL"],
  "exchanges": ["Nasdaq"],
  "form_type": "10-K",
  "filing_date": "2025-10-31",
  "report_date": "2025-09-27",
  "acceptance_datetime": "2025-10-31T10:01:26.000Z",
  "act": "34",
  "file_number": "001-36743",
  "film_number": "251437791",
  "items": [],
  "core_type": "XBRL",
  "size": 9392337,
  "is_xbrl": true,
  "is_inline_xbrl": true,
  "is_xbrl_numeric": null,
  "primary_document": "aapl-20250927.htm",
  "primary_doc_description": "10-K",
  "filing_url": "https://www.sec.gov/Archives/edgar/data/320193/000032019325000079/0000320193-25-000079-index.htm",
  "document_url": "https://www.sec.gov/Archives/edgar/data/320193/000032019325000079/aapl-20250927.htm",
  "sic": "3571",
  "sic_description": "Electronic Computers",
  "entity_type": "operating",
  "filer_category": "Large accelerated filer",
  "state_of_incorporation": "CA",
  "fiscal_year_end": "0926",
  "business_address": {"street1": "ONE APPLE PARK WAY", "street2": null, "city": "CUPERTINO", "state": "CA", "state_name": "CA", "zip": "95014", "country": null, "is_foreign": null, "foreign_region": null},
  "mailing_address": {"street1": "ONE APPLE PARK WAY", "street2": null, "city": "CUPERTINO", "state": "CA", "state_name": "CA", "zip": "95014", "country": null, "is_foreign": false, "foreign_region": null},
  "phone": "(408) 996-1010",
  "ein": "942404110",
  "lei": null,
  "website": null,
  "investor_website": null,
  "search_query": null,
  "search_score": null,
  "matched_document_name": null,
  "matched_document_type": null,
  "matched_document_description": null,
  "matched_document_url": null,
  "scraped_at": "2026-10-28T09:26:19Z"
}
```

### Pricing

Pay per event. There are two events: `actor-start`, a one-time event charged together with the first delivered filing, and `filing`, charged once for each delivered filing. The price of each event is shown on the Pricing tab of this Actor. You are charged only for filings that were delivered; a run that finds nothing costs nothing. If you set a maximum cost per run, the run stops at that limit and the status message says how many filings were delivered.

### FAQ

**Which companies can I look up?** Every company with a CIK on EDGAR. Tickers and names are matched against the SEC company ticker list; a company that is not in that list can still be looked up by CIK.

**What happens with a ticker that does not exist?** It is skipped and listed in the run status. The other companies are still processed.

**Why does `10-K` not return `10-K/A`?** Form types match exactly. Add `10-K/A` to `formTypes` to get amendments as well.

**How far back do company lookups go?** Without `includeOlderFilings` the actor reads the recent filings list of each company, which EDGAR keeps at one year of filings or the latest 1000 filings, whichever is more. Switch on `includeOlderFilings` to read the older pages too.

**How is the limit shared between companies?** `maxResults` is divided equally between the companies in the order given. If a company has fewer matching filings than its share, the rest goes to the later companies.

**Which filing does a full-text hit point to?** Search finds documents inside filings, including exhibits. The actor delivers one record per filing and keeps the best scoring document in the `matched_document_*` fields.

**Where do the dates come from?** `filing_date` is the day the SEC accepted the filing. `report_date` is the period the filing covers and is empty for forms without one.

### Limits

- Only public EDGAR data is returned. The actor returns filing metadata and links; it does not download or parse the filing documents.
- Full-text search covers filings from 2001 on. The actor reads at most 100 result pages (10,000 documents) per search.
- `company_name` is the current company name, which can differ from the name the company had when an old filing was made.
- The actor makes at most 4 requests per second, below the SEC limit.

# Actor input Schema

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

Stock tickers (AAPL), CIK numbers (0000320193 or 320193) or company names (Microsoft Corp). A name uses the best match in the SEC company list. Duplicates are removed. Leave empty together with Search text to run the sample.

## `searchQuery` (type: `string`):

Search the text of filings, for example "going concern" in quotes for an exact phrase. EDGAR full-text search covers filings from 2001 on. With companies given, the search is limited to those companies.

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

Only these form types, for example 10-K, 10-Q, 8-K, 4, S-1, DEF 14A. A form type matches exactly, so 10-K does not include 10-K/A; list both to get both. Leave empty for all form types.

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

Only filings filed on or after this date, format YYYY-MM-DD.

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

Only filings filed on or before this date, format YYYY-MM-DD.

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

Maximum number of filings across all companies. The limit is shared equally between the companies. Set to 0 for no limit. When no company and no search text is given, a sample of at most 10 filings is returned.

## `includeOlderFilings` (type: `boolean`):

EDGAR lists the most recent filings of a company (at least one year, usually the latest 1000) first and keeps older ones on extra pages. Switch on to read those pages as well. Only used for company lookups, not for full-text search.

## Actor input object example

```json
{
  "companies": [
    "AAPL",
    "MSFT"
  ],
  "formTypes": [
    "10-K",
    "10-Q",
    "8-K"
  ],
  "maxResults": 20,
  "includeOlderFilings": false
}
```

# Actor output Schema

## `defaultDataset` (type: `string`):

SEC EDGAR filings with form type, dates, 8-K items, document links and company profile.

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

// Run the Actor and wait for it to finish
const run = await client.actor("santamaria-automations/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 = {
    "companies": [
        "AAPL",
        "MSFT",
    ],
    "formTypes": [
        "10-K",
        "10-Q",
        "8-K",
    ],
    "maxResults": 20,
}

# Run the Actor and wait for it to finish
run = client.actor("santamaria-automations/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 '{
  "companies": [
    "AAPL",
    "MSFT"
  ],
  "formTypes": [
    "10-K",
    "10-Q",
    "8-K"
  ],
  "maxResults": 20
}' |
apify call santamaria-automations/sec-edgar-filings-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,santamaria-automations/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/9OPysoDje94Z6N3Mm/builds/Fs9hzj1uiaoMczTfq/openapi.json
