# SEC EDGAR Filings Scraper - 10-K, 10-Q, 8-K by Ticker (`tinyrex/sec-edgar-filings-scraper`) Actor

SEC EDGAR filings from the official SEC APIs: tickers or CIKs to 10-K, 10-Q, 8-K, Form 4 and S-1 filings with dates, 8-K items and document links, plus EDGAR full-text search. $0.50 per 1,000 filings; unknown tickers free.

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

## Pricing

from $0.40 / 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.
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 Scraper: 10-K, 10-Q, 8-K and Form 4 filings by ticker

**Turn a list of stock tickers or CIK numbers into a clean table of SEC filings, or search the full text of every EDGAR filing since 2001, in one run.** Use it for investment research, earnings and 8-K event monitoring, insider-filing (Form 4) tracking, due diligence, compliance archives and feeding filings into an LLM or RAG pipeline. The Actor reads the official SEC EDGAR APIs (`data.sec.gov` submissions and EDGAR full-text search) and returns the form type, filing and report dates, acceptance time, accession number, 8-K item numbers, XBRL flags, industry code and direct links to the main document and the filing index. **$0.50 per 1,000 filings; unknown tickers and searches with no match are free.** No API key, no login.

### What you get from the SEC EDGAR Filings Scraper

- **Filings by company.** Tickers (`AAPL`, `BRK-B`) are resolved to CIKs with the SEC's own ticker list, or pass CIKs directly. Filter by form type (10-K, 10-Q, 8-K, 4, S-1, DEF 14A, 13F-HR, SC 13D...), with or without amendments (`/A`), and by filing date. Newest filings come first.
- **Full history when you need it.** EDGAR keeps the latest ~1,000 filings per company in one file; turn on *Include older filings* to page through the rest (back to 1994 for big filers).
- **EDGAR full-text search.** Find every filing that mentions "going concern", "cybersecurity incident" or a competitor's name, filtered by form and date. One row per filing (several matching exhibits count once), with a link to the matching document.
- **8-K items as a list** (`["2.02", "9.01"]`), so you can keep only earnings releases (2.02), executive changes (5.02) or material agreements (1.01).
- **Ready-to-open links:** `documentUrl` (main document), `filingIndexUrl` (all documents and exhibits), plus SIC industry, state of incorporation and fiscal year end.

### Sample output (JSON)

```json
{
  "query": "AAPL",
  "queryType": "company",
  "found": true,
  "cik": "0000320193",
  "companyName": "Apple Inc.",
  "tickers": ["AAPL"],
  "exchanges": ["Nasdaq"],
  "form": "8-K",
  "filingDate": "2026-07-30",
  "reportDate": "2026-07-30",
  "acceptanceDateTime": "2026-07-31T00:30:28.000Z",
  "accessionNumber": "0000320193-26-000018",
  "items": ["2.02", "9.01"],
  "primaryDocument": "aapl-20260730.htm",
  "documentUrl": "https://www.sec.gov/Archives/edgar/data/320193/000032019326000018/aapl-20260730.htm",
  "filingIndexUrl": "https://www.sec.gov/Archives/edgar/data/320193/000032019326000018/0000320193-26-000018-index.htm",
  "fileNumber": "001-36743",
  "sizeBytes": 417360,
  "isXBRL": true,
  "isInlineXBRL": true,
  "sic": "3571",
  "sicDescription": "Electronic Computers",
  "stateOfIncorporation": "CA",
  "fiscalYearEnd": "0926",
  "error": null
}
```

A full-text search row has the same core fields plus `matchedDocumentUrl`, `matchedDocumentType` (for example `EX-99.1`) and `businessLocation`.

### How to use it

1. Add tickers or CIKs, for example `AAPL`, `TSLA`, `0000789019`.
2. Pick form types (empty means all forms) and an optional date range.
3. Optionally add a full-text query such as `"supply chain" tariff`.
4. Run, then export as CSV, Excel or JSON, or call it from the API, Make, n8n or Zapier.

**Example input: last two years of annual and quarterly reports for three companies**

```json
{
  "companies": ["AAPL", "MSFT", "NVDA"],
  "formTypes": ["10-K", "10-Q"],
  "dateFrom": "2024-10-01",
  "maxFilingsPerCompany": 20
}
```

**Example input: every 8-K that mentions a cybersecurity incident this year**

```json
{
  "fullTextQuery": "\"cybersecurity incident\"",
  "formTypes": ["8-K"],
  "dateFrom": "2026-01-01",
  "maxSearchResults": 500
}
```

Schedule it daily with `dateFrom` set to yesterday to get a feed of new filings for your watchlist.

### Pricing

Pay per event: **$0.0005 per filing returned ($0.50 per 1,000)**, cheaper on higher Apify plans. A filing found by two searches is charged once. Unknown tickers, companies with no matching filings and empty searches return a free row with the reason in `error`. Set *Max filings per run* or a maximum charge per run to cap spend; the Actor stops cleanly at the limit and also stops before the run timeout, keeping everything it already saved.

### FAQ

**Is it legal to scrape SEC EDGAR?** EDGAR filings are public records published by the US Securities and Exchange Commission, and the SEC provides these APIs for automated access. The Actor follows the SEC fair-access policy: it identifies itself in the User-Agent and stays well under 10 requests per second. You can add your own contact email in the input, which the SEC asks automated tools to declare.

**Does it download the full filing text?** No. It returns filing metadata and direct links; open `documentUrl` or `filingIndexUrl` to get the documents. Pair it with [PDF Text Extractor & OCR](https://apify.com/tinyrex/pdf-ocr-text-extractor) for PDF exhibits.

**How fresh is the data?** The SEC updates the submissions API in real time as filings are accepted, so new 8-Ks show up within minutes.

**Can I get insider trades (Form 4)?** Yes, set the form type to `4`. You get each Form 4 filing with its link; the transaction table itself is inside the document.

### Related Actors

- [UK Companies House Lookup](https://apify.com/tinyrex/uk-companies-house-lookup): UK company profiles, officers and owners.
- [GLEIF LEI Lookup](https://apify.com/tinyrex/gleif-lei-lookup): legal entity identifiers and parent companies worldwide.
- [TED EU Tenders Scraper](https://apify.com/tinyrex/ted-tenders-scraper): public procurement notices from the EU.

Not affiliated with or endorsed by the US Securities and Exchange Commission. Data comes from public SEC EDGAR APIs.

# Actor input Schema

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

Stock tickers (AAPL, BRK-B) or SEC CIK numbers (320193). One company per line.

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

Only these forms, e.g. 10-K, 10-Q, 8-K, 4, S-1, DEF 14A, 13F-HR. Leave empty for all forms.

## `includeAmendments` (type: `boolean`):

With 10-K selected, also return 10-K/A and so on.

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

Earliest filing date. Leave empty for no limit.

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

Latest filing date. Leave empty for today.

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

Newest first.

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

Big filers (with many Form 4s) keep older filings in extra files. Turn on for full history; costs more requests, not more money unless the filings match.

## `fullTextQuery` (type: `string`):

Search inside filing text since 2001, e.g. "artificial intelligence" or "going concern". Uses the form types and dates above. Quotes for exact phrases.

## `maxSearchResults` (type: `integer`):

One row per filing (EDGAR caps a search at 10,000 hits).

## `maxFilings` (type: `integer`):

Hard cap on charged filings for the whole run.

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

The SEC fair-access policy asks automated tools to declare a contact in the User-Agent. Only sent to sec.gov, never written to the output.

## Actor input object example

```json
{
  "companies": [
    "AAPL",
    "TSLA"
  ],
  "formTypes": [
    "10-K",
    "8-K"
  ],
  "includeAmendments": true,
  "maxFilingsPerCompany": 5,
  "includeOlderFilings": false,
  "maxSearchResults": 100,
  "maxFilings": 1000
}
```

# Actor output Schema

## `filings` (type: `string`):

SEC filings with document links.

## `summary` (type: `string`):

Totals for the run.

# 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",
        "TSLA"
    ],
    "formTypes": [
        "10-K",
        "8-K"
    ],
    "maxFilingsPerCompany": 5
};

// Run the Actor and wait for it to finish
const run = await client.actor("tinyrex/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",
        "TSLA",
    ],
    "formTypes": [
        "10-K",
        "8-K",
    ],
    "maxFilingsPerCompany": 5,
}

# Run the Actor and wait for it to finish
run = client.actor("tinyrex/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",
    "TSLA"
  ],
  "formTypes": [
    "10-K",
    "8-K"
  ],
  "maxFilingsPerCompany": 5
}' |
apify call tinyrex/sec-edgar-filings-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,tinyrex/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/U3vF9lIUH9a6gFxJM/builds/0e3DxnrrzOiBTfWad/openapi.json
