# SEC EDGAR Scraper - Filings, Full-Text Search & Financials (`martin10291/sec-edgar-scraper`) Actor

SEC EDGAR filings and financials in one table. Filings by ticker or CIK (10-K, 10-Q, 8-K, S-1, Form 4, 13F...), full-text search across all filings, the latest filings of any form type, and yearly or quarterly financials from XBRL. Only-new mode for alerts. Official SEC API, no key.

- **URL**: https://apify.com/martin10291/sec-edgar-scraper.md
- **Developed by:** [Martin Petrov](https://apify.com/martin10291) (community)
- **Categories:** Lead generation, News, Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$1.00 / 1,000 results

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 Scraper - Filings, Full-Text Search & Financials

Get **SEC EDGAR** data in one clean table: **company filings by ticker** (10-K, 10-Q, 8-K, S-1, Form 4, 13F, 13D, DEF 14A...), **full-text search across every EDGAR filing**, the **latest filings from all US public companies**, and **annual or quarterly financials** (revenue, net income, EPS, cash flow, assets, debt) from XBRL.

The actor uses only the **official SEC APIs** (data.sec.gov and EDGAR full-text search): no login, no API key, no browser, no blocking. Fast, cheap and stable.

### What you get

- **Company filings**: form, filing date, report date, acceptance time, 8-K item codes **with plain-English descriptions**, document URL, filing index URL, file number, size, XBRL flag.
- **Full-text search**: every filing that mentions your phrase ("going concern", "cybersecurity incident", "artificial intelligence", a competitor's name...), with company, tickers, location, state of incorporation, SIC code and a link to the matching document.
- **Latest filings**: new 8-Ks, S-1 IPO filings, Form 4 insider trades, 13D activist stakes, Form D private placements... from all companies, newest first.
- **Financials**: revenue, cost of revenue, gross profit, R\&D, operating income, net income, EPS (basic and diluted), operating cash flow, capex, **free cash flow**, total assets, liabilities, equity, cash, long-term debt, **gross and net margin**, with correct fiscal years (also for Apple, Microsoft, NVIDIA and other non-calendar years).
- **Company profile** (optional): industry, exchange, state, fiscal year end, website, phone, business address.
- **Only-new mode**: each filing is returned and paid for once. Great for alerts.

### Use cases

- **Investors and analysts**: 5 years of financials for your watch list in one spreadsheet, or every 10-K and 10-Q with direct links.
- **Event-driven alerts**: officer departures (8-K item 5.02), cybersecurity incidents (1.05), material agreements (1.01), auditor changes (4.01), restatements (4.02).
- **IPO and deal flow**: every new S-1 and Form D, with business location and industry.
- **Sales and lead generation**: companies that just raised money, changed their CFO or announced an acquisition.
- **Compliance, legal and research**: full-text search for any phrase across all filings since 2001.
- **AI and RAG pipelines**: clean filing URLs and structured financials, ready for LLMs.

### Input examples

**Filings for a watch list (last 12 months):**

```json
{ "mode": "company_filings", "tickers": ["AAPL", "TSLA"], "forms": ["10-K", "10-Q", "8-K"], "postedWithinDays": 365 }
```

**Full-text search:**

```json
{ "mode": "search", "keywords": ["going concern", "cybersecurity incident"], "forms": ["8-K", "10-K"], "postedWithinDays": 90 }
```

**Daily alert: CEO/CFO changes at any company:**

```json
{ "mode": "latest", "forms": ["8-K"], "eightKItems": ["5.02"], "postedWithinDays": 2, "onlyNew": true }
```

**New IPO filings this week with company profile:**

```json
{ "mode": "latest", "forms": ["S-1", "F-1"], "postedWithinDays": 7, "includeCompanyInfo": true }
```

**5 years of financials:**

```json
{ "mode": "financials", "tickers": ["NVDA", "MSFT", "AMZN"], "periodType": "annual", "years": 5 }
```

### Output example (financials)

```json
{
  "type": "financials",
  "companyName": "Apple Inc.",
  "ticker": "AAPL",
  "periodType": "annual",
  "fiscalYear": 2025,
  "fiscalPeriod": "FY",
  "periodStart": "2024-09-29",
  "periodEnd": "2025-09-27",
  "revenue": 416161000000,
  "grossProfit": 195201000000,
  "operatingIncome": 133050000000,
  "netIncome": 112010000000,
  "epsDiluted": 7.46,
  "freeCashFlow": 98767000000,
  "grossMarginPct": 46.91,
  "netMarginPct": 26.92,
  "currency": "USD",
  "form": "10-K"
}
```

### Output example (filing)

```json
{
  "type": "filing",
  "companyName": "Astrana Health, Inc.",
  "tickers": ["ASTH"],
  "form": "8-K",
  "filingDate": "2026-09-23",
  "items": ["1.05"],
  "itemDescriptions": ["Material Cybersecurity Incident"],
  "documentUrl": "https://www.sec.gov/Archives/edgar/data/1083446/000110465926109813/asth-20260922x8k.htm",
  "businessLocation": "Alhambra, CA"
}
```

### Tips

- Use the **CIK number** if a ticker is not found (delisted or private filers such as funds).
- Form types include amendments: `10-K` also returns `10-K/A`.
- Financials cover US-GAAP filers. Foreign companies filing 20-F with IFRS are not included.
- Quarterly financials come from 10-Q filings, so the fourth quarter is part of the annual 10-K.
- Set **Max results** to control cost. Use **only-new mode** with a schedule for alerts to Slack, email or Google Sheets.

### Pricing

**$1.00 per 1,000 results.** No subscription and no extra proxy costs.

### Is it legal?

Yes. All data comes from the SEC's official public APIs. The actor follows the SEC fair-access rules (fewer than 10 requests per second, identified User-Agent).

### Support

Missing a field or a form type? Open an issue on the actor page and we usually reply within a day.

# Actor input Schema

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

Company filings by ticker/CIK, full-text search across all filings, the latest filings from all companies, or yearly/quarterly financials (XBRL).

## `tickers` (type: `array`):

Stock tickers (AAPL, TSLA) or SEC CIK numbers (320193). Used by 'Company filings' and 'Financials'. Optional filter for search and latest.

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

e.g. 10-K, 10-Q, 8-K, S-1, 4, 13F-HR, SC 13D, DEF 14A, D. Empty = all forms. 'Latest filings' defaults to 8-K.

## `keywords` (type: `array`):

Each phrase is one search across the full text of all EDGAR filings since 2001, e.g. "artificial intelligence", "going concern", "cybersecurity incident".

## `postedWithinDays` (type: `integer`):

0 = no limit (company filings) or 30 days (search and latest).

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

Optional. Overrides 'within the last N days'.

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

Optional. Default today.

## `eightKItems` (type: `array`):

Only 8-Ks with these item codes, e.g. 1.01 (material agreement), 2.02 (results), 5.02 (officer change), 1.05 (cybersecurity incident).

## `periodType` (type: `string`):

For 'Financials' mode.

## `years` (type: `integer`):

How many fiscal years of financials per company.

## `includeCompanyInfo` (type: `boolean`):

Adds industry (SIC), state, exchange, website, phone and business address to each filing.

## `onlyNew` (type: `boolean`):

For alerts: each filing is returned (and paid for) once.

## `monitorId` (type: `string`):

Separate memory for different watch lists (used with only-new mode).

## `contactEmail` (type: `string`):

SEC asks automated tools to identify themselves. If set, it is sent in the User-Agent header to SEC only.

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

Hard limit on results saved (and paid for).

## Actor input object example

```json
{
  "mode": "company_filings",
  "tickers": [
    "AAPL",
    "TSLA"
  ],
  "forms": [
    "10-K",
    "10-Q",
    "8-K"
  ],
  "postedWithinDays": 365,
  "periodType": "annual",
  "years": 5,
  "includeCompanyInfo": false,
  "onlyNew": false,
  "monitorId": "default",
  "maxItems": 50
}
```

# Actor output Schema

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

SEC filings or yearly/quarterly financials.

# 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 = {
    "mode": "company_filings",
    "tickers": [
        "AAPL",
        "TSLA"
    ],
    "forms": [
        "10-K",
        "10-Q",
        "8-K"
    ],
    "postedWithinDays": 365,
    "maxItems": 50
};

// Run the Actor and wait for it to finish
const run = await client.actor("martin10291/sec-edgar-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 = {
    "mode": "company_filings",
    "tickers": [
        "AAPL",
        "TSLA",
    ],
    "forms": [
        "10-K",
        "10-Q",
        "8-K",
    ],
    "postedWithinDays": 365,
    "maxItems": 50,
}

# Run the Actor and wait for it to finish
run = client.actor("martin10291/sec-edgar-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 '{
  "mode": "company_filings",
  "tickers": [
    "AAPL",
    "TSLA"
  ],
  "forms": [
    "10-K",
    "10-Q",
    "8-K"
  ],
  "postedWithinDays": 365,
  "maxItems": 50
}' |
apify call martin10291/sec-edgar-scraper --silent --output-dataset

```

## MCP server setup

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