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

Pull SEC filings for any public US company by ticker or CIK: 10-K, 10-Q, 8-K, insider Form 4, Form D funding rounds and 13F holdings, with direct document URLs. Plus XBRL financials (revenue, net income, assets, EPS) and full-text search across every filing since 2001.

- **URL**: https://apify.com/glitchbound/sec-filings-scraper.md
- **Developed by:** [Daniel Meshulam](https://apify.com/glitchbound) (community)
- **Categories:** Lead generation, AI, SEO tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.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.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## SEC EDGAR Scraper — Filings, Financials & Full-Text Search

Every SEC filing for every public US company, as structured rows — plus reported financials and full-text search across **every filing since 2001**.

Built directly on the SEC's own official API. No key, no login, no scraping of rendered pages. This is public disclosure that companies are legally required to file.

### Three things in one Actor

#### 1. Filings by company

Give it tickers or CIKs. Get back every filing with a **direct document URL**.

```json
{ "companies": ["AAPL", "TSLA"], "formTypes": ["10-K", "8-K"] }
```

Form types worth knowing:

| Form | What it is |
|---|---|
| `10-K` | Annual report |
| `10-Q` | Quarterly report |
| `8-K` | Material event (M\&A, exec change, restatement) |
| `4` | **Insider trade** — who bought/sold and when |
| `D` | **Private funding round** — startups raising money |
| `13F-HR` | Institutional holdings — what the big funds own |
| `SC 13D` | Activist stake |
| `S-1` | IPO registration |

#### 2. Financials from XBRL

Set `includeFinancials: true` and each company also returns reported annual figures:

`revenue` · `netIncome` · `totalAssets` · `totalLiabilities` · `stockholdersEquity` · `cashAndEquivalents` · `operatingIncome` · `earningsPerShareDiluted`

Pulled from the numbers companies actually tagged in their filings — not estimated, not scraped off a page. Restatements are handled: when a later filing revises an earlier year, you get the newest value.

#### 3. Full-text search

Search the *body text* of every filing since 2001.

```json
{ "searchQuery": "\"artificial intelligence\"", "formTypes": ["10-K"], "filedSince": "2025-01-01" }
```

Find every company that mentioned a phrase — a risk factor, a competitor's name, a technology, "going concern". Returns company, form, date, location and a relevance score.

### Example input

```json
{
  "companies": ["AAPL", "MSFT"],
  "formTypes": ["10-K"],
  "includeFinancials": true,
  "financialYears": 5,
  "filedSince": "2020-01-01"
}
```

### What you get

| Field | Example |
|---|---|
| `companyName`, `cik`, `tickers`, `exchanges` | `Apple Inc.`, `0000320193`, `["AAPL"]` |
| `form`, `formLabel` | `10-K`, `Annual report` |
| `filingDate`, `reportDate`, `acceptedAt` | |
| `filingUrl` | direct link to the document itself |
| `filingIndexUrl` | the full filing index |
| `industry`, `sic`, `state`, `city`, `ein`, `website` | `Electronic Computers`, `3571`, `CA` |
| `items` | the 8-K item codes, when applicable |
| `revenue`, `netIncome`, `totalAssets`, … | on `financials` rows |
| `relevanceScore` | on full-text search hits |

### Who this is for

- **Fintech & investment tools** — filings feed, fundamentals, no vendor contract
- **VC & deal sourcing** — Form D tells you who just raised, before the press release
- **Compliance & risk** — monitor a watchlist of companies for new 8-Ks
- **Competitive intel** — full-text search for your own company or a rival's name
- **AI / dataset builders** — clean structured filing metadata at scale

### Pricing

Pay per result. One row = one filing, one fiscal year of financials, or one search hit. Companies that can't be resolved come back as `error` rows and are **not** charged.

### Notes

- The SEC's fair-access policy asks callers to identify themselves and stay under 10 requests/second. This Actor does both, by design.
- Financials come from `companyfacts`, so a full 20-year history costs **one** request, not one per year.
- Companies that have never filed XBRL data (small or foreign filers) return an `error` row for financials but still return their filings normally.
- Set a **max charge per run** in the run options for a hard spend ceiling — the Actor honors it and stops cleanly.

### FAQ

#### Do I need a PACER account or an EDGAR API key?

No. This is the SEC's own official, free, key-free API. PACER is the federal
*courts* system and is unrelated. The SEC asks only that callers identify
themselves and stay under 10 requests per second, and this Actor does both.

#### How do I find out which companies just raised a private round?

Search for `formTypes: ["D"]` with a `searchQuery` for your sector. A Form D is
filed after a private placement, it is required, and it usually lands on EDGAR
before the funding announcement. Because you do not know the company names in
advance, this is a full-text search rather than a ticker list.

#### Can I search the text inside filings, not just the metadata?

Yes. `searchQuery` searches the body of every filing since 2001. Quote a phrase
to match it exactly: `"\"going concern\""`. That is how you find every company
that mentioned a risk factor, a competitor, or a technology.

#### Does `filedSince` work on a full-text search?

Yes, now. EDGAR's full-text endpoint silently ignores a half-open date range.
Measured: `startdt` alone returned filings going back eleven years, byte-identical
to sending no filter at all. Both bounds are always sent, defaulting the missing
one, so the window you ask for is the window you get.

#### Can I get revenue and net income without parsing a 10-K?

Set `includeFinancials: true`. Figures come from XBRL, meaning the numbers companies
actually tagged in their filings, not estimates and not scraped off a rendered
page. Restatements are handled: when a later filing revises an earlier year, you
get the newest value.

#### How many requests does a 20-year financial history cost?

One. Financials come from `companyfacts`, which returns a company's whole tagged
history in a single call rather than one call per year.

#### Which form types are worth knowing?

`10-K` annual, `10-Q` quarterly, `8-K` material event, `4` insider trades, `D`
private funding round, `13F-HR` institutional holdings, `SC 13D` activist stake,
`S-1` IPO registration.

#### What happens with companies that never filed XBRL?

Small and foreign filers return an `error` row for financials, which is unbilled,
but their filings still come back normally.

#### Can I monitor a watchlist for new filings?

Yes. Put the tickers in `companies`, set `filedSince` to your last run date, and
schedule it. New 8-Ks and Form 4s show up the day they are filed.

# Actor input Schema

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

Tickers or CIK numbers, one per line — e.g. "AAPL", "TSLA", "0000320193". Tickers are resolved to CIKs automatically.

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

Search the text of every filing since 2001, e.g. "artificial intelligence" or "going concern". Wrap a phrase in quotes for an exact match. Works with or without a company list.

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

Only return these forms — e.g. "10-K" (annual), "10-Q" (quarterly), "8-K" (material event), "4" (insider trade), "D" (private funding round), "13F-HR" (institutional holdings). Leave empty for all forms.

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

Return the filing list for each company, with direct document URLs.

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

Also return reported annual figures per company from XBRL: revenue, net income, total assets, liabilities, equity, cash, operating income and diluted EPS.

## `financialYears` (type: `integer`):

How many fiscal years of financials to return per company.

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

Cap on filings returned for each company, newest first.

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

Cap on results returned for the full-text search.

## `filedSince` (type: `string`):

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

## `filedUntil` (type: `string`):

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

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

Proxy settings.

## Actor input object example

```json
{
  "companies": [
    "AAPL"
  ],
  "includeFilings": true,
  "includeFinancials": false,
  "financialYears": 5,
  "maxFilingsPerCompany": 50,
  "maxSearchResults": 100,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

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

SEC filings, XBRL financials and full-text search hits.

# 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"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("glitchbound/sec-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"] }

# Run the Actor and wait for it to finish
run = client.actor("glitchbound/sec-filings-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).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"
  ]
}' |
apify call glitchbound/sec-filings-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=glitchbound/sec-filings-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/acts/gDm48X6cJgeYYqjH5/builds/8HPO4o3eMkCpXIIiY/openapi.json
