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

Scrape SEC EDGAR: full-text search across all filings since 2001, company filings by ticker or CIK (10-K, 10-Q, 8-K, S-1, 4...), and standardized XBRL financials: revenue, net income, EPS, cash flow, balance sheet. $0.30 per 1,000 rows.

- **URL**: https://apify.com/technicaldost/sec-edgar-scraper-filings-financials.md
- **Developed by:** [Technical Dost Solutions](https://apify.com/technicaldost) (community)
- **Categories:** AI
- **Security:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$0.30 / 1,000 rows

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 turns **SEC EDGAR** into clean datasets for analysts, investors, compliance teams and AI agents. Three things in one Actor: (1) **full-text search** across the text of every EDGAR filing since 2001, e.g. `"going concern"` or `"tariff" "supply chain"` in 10-Ks; (2) **company filings** by ticker or CIK with form and date filters (10-K, 10-Q, 8-K with item numbers, S-1, 13D, Form 4...), each with document and index links; and (3) **standardized financials** from XBRL: revenue, gross profit, operating income, net income, EPS, R\&D, operating cash flow, capex, free cash flow, assets, liabilities, equity, cash, debt and margins, annual and quarterly. No API key.

### What you get

- Full-text search over all EDGAR filings (2001 onwards) with exact phrases, form types, date range and company filter; up to 10,000 hits per query.
- Company filings by ticker (AAPL) or CIK: form, filed date, report date, 8-K items, accession number, primary document and index URLs, plus company profile (SIC, state, fiscal year end, address).
- Standardized financials from XBRL: 15 core metrics plus free cash flow and margins, annual and/or quarterly, using SEC's de-duplicated calendar frames (no double-counted restatements).
- Combine modes: search within a list of companies, or pull filings and financials for a watchlist.
- Polite to SEC servers (declared User-Agent, rate-limited) so runs keep working.
- Fair billing: $0.30 per 1,000 rows; unknown tickers and empty searches are free.

### How to use SEC EDGAR Scraper

1. Enter **Full-text search queries** (use quotes for exact phrases) and/or **Companies** (tickers or CIKs).
2. Optionally filter by **Forms** (e.g. 10-K, 8-K) and **Start/End date**.
3. Turn on **Financials** to add annual and/or quarterly XBRL financial rows for each company.
4. Run and export to JSON, CSV or Excel, or connect Google Sheets, a database or an AI agent.

### Input example

```json
{
  "companies": [
    "AAPL",
    "MSFT",
    "NVDA"
  ],
  "forms": [
    "10-K",
    "10-Q"
  ],
  "includeFinancials": true,
  "financialPeriods": "annual",
  "maxPeriods": 5
}
```

All fields are described in the **Input** tab.

### Output example

```json
{
  "type": "financials",
  "companyName": "Apple Inc.",
  "cik": "0000320193",
  "periodType": "annual",
  "periodStart": "2024-09-29",
  "periodEnd": "2025-09-27",
  "calendarPeriod": "CY2025",
  "revenue": 416161000000,
  "grossProfit": 195201000000,
  "operatingIncome": 133050000000,
  "netIncome": 112010000000,
  "epsBasic": 7.49,
  "epsDiluted": 7.46,
  "operatingCashFlow": 111482000000,
  "capitalExpenditures": 12715000000,
  "researchAndDevelopment": 34550000000,
  "totalAssets": 359241000000,
  "totalLiabilities": 285508000000,
  "stockholdersEquity": 73733000000,
  "cashAndEquivalents": 35934000000,
  "longTermDebt": 78328000000,
  "dilutedShares": 15004697000,
  "freeCashFlow": 98767000000,
  "grossMargin": 0.469,
  "netMargin": 0.2692,
  "currency": "USD",
  "input": "AAPL",
  "scrapedAt": "2026-11-01T20:51:30.000Z"
}
```

#### Output fields

| Field | Description |
|---|---|
| `type` | searchHit, filing or financials. |
| `query` | Search query (search hits). |
| `companyName` | Company name. |
| `tickers` | Tickers. |
| `cik` | 10-digit CIK. |
| `form` | Form type. |
| `filedDate` | Filing date. |
| `periodEnding` | Period of report (search hits). |
| `reportDate` | Report date (filings). |
| `acceptedAt` | EDGAR acceptance time. |
| `accessionNumber` | Accession number. |
| `fileName` | Matched document file. |
| `fileDescription` | Document description. |
| `items` | 8-K item numbers. |
| `description` | Primary document description. |
| `sic` | SIC code. |
| `sicDescription` | Industry. |
| `businessLocation` | Business location. |
| `stateOfIncorporation` | State of incorporation. |
| `otherFilers` | Other filers on the document. |
| `exchanges` | Exchanges. |
| `fiscalYearEnd` | Fiscal year end (MMDD). |
| `businessAddress` | Business address. |
| `website` | Website. |
| `isXBRL` | Has XBRL. |
| `sizeBytes` | Filing size. |
| `documentUrl` | Document URL. |
| `filingIndexUrl` | Filing index URL. |
| `score` | Search relevance. |
| `input` | Ticker/CIK as entered. |
| `periodType` | annual or quarterly. |
| `periodStart` | Period start. |
| `periodEnd` | Period end. |
| `calendarPeriod` | SEC calendar frame, e.g. CY2025, CY2026Q2. |
| `revenue` | Revenue. |
| `grossProfit` | Gross profit. |
| `operatingIncome` | Operating income. |
| `netIncome` | Net income. |
| `epsBasic` | EPS basic. |
| `epsDiluted` | EPS diluted. |
| `operatingCashFlow` | Operating cash flow. |
| `capitalExpenditures` | Capital expenditures. |
| `researchAndDevelopment` | R\&D expense. |
| `totalAssets` | Total assets. |
| `totalLiabilities` | Total liabilities. |
| `stockholdersEquity` | Stockholders' equity. |
| `cashAndEquivalents` | Cash and equivalents. |
| `longTermDebt` | Long-term debt. |
| `dilutedShares` | Weighted diluted shares. |
| `freeCashFlow` | Operating cash flow minus capex. |
| `grossMargin` | Gross margin (0-1). |
| `netMargin` | Net margin (0-1). |
| `currency` | USD. |
| `scrapedAt` | When the row was scraped. |

Export results as JSON, CSV, Excel, XML or HTML, or read them with the API.

### Use cases

- Investment research: screen 10-Ks for risk phrases ("going concern", "material weakness", "tariff").
- Fundamental datasets: revenue, earnings, cash flow and balance sheet history for a watchlist.
- Event monitoring: 8-K filings with item numbers (2.02 results, 5.02 executive changes, 1.01 agreements).
- Compliance and legal research: find every filing that mentions a company, product or contract.
- AI agents and RAG: structured filings and financials with direct document links.

### How much does SEC EDGAR Scraper cost?

This Actor uses **pay-per-event** pricing: **$0.0003 per row** ($0.3 per 1,000). Platform usage is included. There is no start fee. Searches or companies that return nothing are free.

Set **Maximum cost per run** in the run options to cap your spend; the Actor stops when the limit is reached.

### Use SEC EDGAR Scraper with AI agents (MCP)

Give Claude, ChatGPT, Cursor or any MCP client this Actor as a tool through the hosted [Apify MCP server](https://mcp.apify.com):

```bash
claude mcp add --transport http apify "https://mcp.apify.com/?tools=technicaldost/sec-edgar-scraper-filings-financials" --header "Authorization: Bearer YOUR_APIFY_TOKEN"
```

Or in a JSON MCP config:

```json
{
  "mcpServers": {
    "apify": {
      "url": "https://mcp.apify.com/?tools=technicaldost/sec-edgar-scraper-filings-financials",
      "headers": { "Authorization": "Bearer YOUR_APIFY_TOKEN" }
    }
  }
}
```

The tool is named `technicaldost--sec-edgar-scraper-filings-financials`. Ask your agent, for example, to *"run SEC EDGAR Scraper with {"companies": \["AAPL", "MSFT", "NVDA"], "forms": \["10-K", "10-Q"], "includeFinancials": true, "financialPeriods": "annual", "maxPeriods": 5}"*.

### Run SEC EDGAR Scraper via API

```bash
curl -X POST "https://api.apify.com/v2/acts/technicaldost~sec-edgar-scraper-filings-financials/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"companies": ["AAPL", "MSFT", "NVDA"], "forms": ["10-K", "10-Q"], "includeFinancials": true, "financialPeriods": "annual", "maxPeriods": 5}'
```

```python
from apify_client import ApifyClient

client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("technicaldost/sec-edgar-scraper-filings-financials").call(run_input={"companies": ["AAPL", "MSFT", "NVDA"], "forms": ["10-K", "10-Q"], "includeFinancials": True, "financialPeriods": "annual", "maxPeriods": 5})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)
```

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

const client = new ApifyClient({ token: 'YOUR_APIFY_TOKEN' });
const run = await client.actor('technicaldost/sec-edgar-scraper-filings-financials').call({"companies": ["AAPL", "MSFT", "NVDA"], "forms": ["10-K", "10-Q"], "includeFinancials": true, "financialPeriods": "annual", "maxPeriods": 5});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);
```

### Integrations

Schedule runs (daily, hourly) in Apify Console and send results to Google Sheets, Slack, Make, Zapier, n8n, Airbyte or your own webhook.

### FAQ

#### Do I need an SEC API key?

No. EDGAR's search, submissions and XBRL services are public. The Actor declares a User-Agent and stays well under SEC's rate limit, as SEC asks. You can add your own contact email in the input.

#### How does full-text search work?

It uses EDGAR full-text search (2001 onwards). Wrap phrases in quotes, combine terms, and filter by form type, dates and companies. Each hit is one document of a filing with a direct link.

#### Where do the financials come from?

From the company's XBRL data on data.sec.gov. Revenue uses Revenues or RevenueFromContractWithCustomer (whichever the company files). Values are as reported, in USD; quarterly cash-flow items are only available where companies report a 3-month figure.

#### Why do some companies have no financials?

Funds, trusts, foreign private issuers (20-F/40-F) and some small companies do not file US-GAAP XBRL facts.

#### How many filings per company?

Up to 1,000 of the most recent filings (SEC's recent list), filtered by form and date.

#### How is it priced?

$0.30 per 1,000 rows (a search hit, a filing or a financial period). No start fee.

#### Is it legal to scrape this data?

The Actor collects publicly available information only and does not log in or bypass access controls. Use the data in line with the website's terms and the laws that apply to you, especially when processing personal data.

### Related Actors

More tools from the same developer that work well together with this one:

- [SEC EDGAR Filing Monitor - New Filings by Ticker](https://apify.com/technicaldost/sec-edgar-filing-monitor): New SEC filings for any watchlist of US public companies, by ticker or CIK.
- [SEC Comment Letter Monitor](https://apify.com/technicaldost/sec-comment-letter-monitor): Returns SEC comment-letter correspondence for public companies by CIK: company, form type, filing date, accession number, document name and link.
- [Yahoo Finance Scraper](https://apify.com/technicaldost/yahoo-finance-scraper): Scrape stock quotes, historical prices, financials and company profiles from Yahoo Finance.
- [UK Companies House Scraper & Company Intelligence](https://apify.com/technicaldost/uk-companies-house-intelligence): The complete public record for any UK company from just its company number: status, registered office, SIC codes, accounts and confirmation-statement…

# Actor input Schema

## `searchQueries` (type: `array`):

Searches across filing text. Use quotes for exact phrases, e.g. "going concern" or "artificial intelligence".

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

e.g. AAPL, MSFT, 1318605. Alone: their filings (and financials). With a search query: limits the search to these companies.

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

Optional form filter, e.g. 10-K, 10-Q, 8-K, S-1, 4, SC 13D, DEF 14A.

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

YYYY-MM-DD. Optional.

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

YYYY-MM-DD. Optional.

## `maxResultsPerSearch` (type: `integer`):

Up to 10,000.

## `maxFilingsPerCompany` (type: `integer`):

Most recent first. Up to 1,000.

## `includeFilings` (type: `boolean`):

Save the filings list for each company (when no search query is given).

## `includeFinancials` (type: `boolean`):

Add standardized financial rows for each company.

## `financialPeriods` (type: `string`):

Annual, quarterly or both.

## `maxPeriods` (type: `integer`):

Most recent periods per company and period type. Up to 60.

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

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

## Actor input object example

```json
{
  "searchQueries": [
    "\"artificial intelligence\""
  ],
  "companies": [],
  "forms": [
    "10-K"
  ],
  "maxResultsPerSearch": 20,
  "maxFilingsPerCompany": 50,
  "includeFilings": true,
  "includeFinancials": false,
  "financialPeriods": "annual",
  "maxPeriods": 8
}
```

# Actor output Schema

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

No description

# 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 = {
    "searchQueries": [
        "\"artificial intelligence\""
    ],
    "companies": [],
    "forms": [
        "10-K"
    ],
    "maxResultsPerSearch": 20
};

// Run the Actor and wait for it to finish
const run = await client.actor("technicaldost/sec-edgar-scraper-filings-financials").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 = {
    "searchQueries": ["\"artificial intelligence\""],
    "companies": [],
    "forms": ["10-K"],
    "maxResultsPerSearch": 20,
}

# Run the Actor and wait for it to finish
run = client.actor("technicaldost/sec-edgar-scraper-filings-financials").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 '{
  "searchQueries": [
    "\\"artificial intelligence\\""
  ],
  "companies": [],
  "forms": [
    "10-K"
  ],
  "maxResultsPerSearch": 20
}' |
apify call technicaldost/sec-edgar-scraper-filings-financials --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,technicaldost/sec-edgar-scraper-filings-financials"
        }
    }
}
```

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/m2GyeCj5lYQAGPiqY/builds/R6kCDW1D1Ya6o1zvL/openapi.json
