SEC EDGAR Filings Scraper avatar

SEC EDGAR Filings Scraper

Pricing

Pay per event

Go to Apify Store
SEC EDGAR Filings Scraper

SEC EDGAR Filings Scraper

πŸ›οΈ Extract official SEC EDGAR filing metadata by ticker or CIK, including forms, dates, accession numbers, company identity, and filing/document URLs.

Pricing

Pay per event

Rating

0.0

(0)

Developer

Stas Persiianenko

Stas Persiianenko

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Categories

Share

Extract official SEC EDGAR filing metadata for US public companies by ticker or CIK. Turn company submissions into clean, export-ready rows with forms, dates, accession numbers, filing links, document links, and company identity.

Use it for recurring filing monitors, compliance research, investment screening, historical backfills, financial datasets, and retrieval-augmented generation (RAG) pipelines. The Actor reads the SEC's public JSON data directlyβ€”no browser, proxy, SEC account, or third-party data subscription is required.

What does SEC EDGAR Filings Scraper do?

SEC EDGAR Filings Scraper converts the SEC's aligned company-submission arrays into one normalized dataset row per filing.

It can:

  • 🏒 resolve ticker symbols such as AAPL, MSFT, and NVDA to official CIKs;
  • πŸ”’ accept zero-padded or numeric SEC CIKs directly;
  • πŸ“„ filter exact forms such as 10-K, 10-Q, 8-K, S-1, DEF 14A, or 4;
  • πŸ“… filter inclusive filing-date and report-period ranges;
  • πŸ—„οΈ follow historical submission shards for long-range backfills;
  • πŸ”— build deterministic SEC filing-detail and primary-document URLs;
  • πŸ“¦ export results to JSON, CSV, Excel, XML, RSS, or the Apify API.

Version 1 focuses on reliable cross-form filing index metadata. It does not parse financial statements, XBRL facts, insider transactions, filing text, or AI summaries.

Why use this SEC filing extractor?

The SEC submissions API is public, but its filing data is represented as multiple aligned arrays. Production pipelines must also resolve tickers, normalize CIKs, traverse older shard files, preserve array alignment, pace requests, retry transient failures, filter dates, and construct archive URLs.

This Actor handles those steps and returns stable records ready for analysis.

  • βœ… Official SEC source
  • βœ… No login or paid API key
  • βœ… Current and historical filings
  • βœ… Strict input validation
  • βœ… Source provenance on every row
  • βœ… Pay only for filing rows saved
  • βœ… Apify scheduling, webhooks, datasets, API, and integrations

Who is it for?

Investors and analysts

Track annual reports, quarterly reports, material events, proxy statements, registrations, and ownership forms across a watchlist.

Backfill filing histories by CIK, verify submission timelines, and feed internal review or retention systems.

Finance researchers

Create reproducible company-form-date panels without manually navigating EDGAR search pages.

Data vendors and engineers

Populate filing indexes, alerts, knowledge graphs, warehouses, and RAG corpora from official metadata.

AI agents and automation teams

Give an agent structured filing links and accession numbers before downstream document retrieval or analysis.

Supported company identifiers

Provide one or more values in identifiers:

  • ticker: AAPL
  • ticker with punctuation: BRK.B
  • numeric CIK: 320193
  • zero-padded CIK: 0000320193

Ticker matching is case-insensitive. Numeric CIKs are padded to the SEC's ten-digit format. Unknown tickers and malformed values fail clearly rather than silently returning unrelated data.

A single run supports up to 100 unique company identifiers.

Supported filing filters

Use formTypes for exact, case-insensitive SEC form matches. Common examples include:

  • 10-K β€” annual report
  • 10-Q β€” quarterly report
  • 8-K β€” current report
  • S-1 β€” registration statement
  • DEF 14A β€” definitive proxy statement
  • 13F-HR β€” institutional holdings report
  • 4 β€” beneficial ownership change

Leave formTypes empty to return every form in the company submissions feed.

Date bounds are inclusive. filingDateFrom and filingDateTo filter the SEC filing date. reportDateFrom and reportDateTo filter the filing's report period. When report-period filtering is active, filings without a report date are excluded.

Input

A focused current-filings run:

{
"identifiers": ["AAPL", "MSFT"],
"formTypes": ["10-K", "10-Q", "8-K"],
"maxItems": 50
}

A historical backfill:

{
"identifiers": ["0000320193"],
"formTypes": ["10-K"],
"filingDateFrom": "2010-01-01",
"filingDateTo": "2025-12-31",
"includeHistorical": true,
"maxItems": 500
}
FieldTypeRequiredDescription
identifiersstring[]YesOne to 100 ticker symbols or CIKs
formTypesstring[]NoExact SEC forms; empty means all forms
filingDateFromstringNoInclusive filing date, YYYY-MM-DD
filingDateTostringNoInclusive filing date, YYYY-MM-DD
reportDateFromstringNoInclusive report-period date
reportDateTostringNoInclusive report-period date
includeHistoricalbooleanNoFollow older SEC submission shards
maxItemsintegerNoGlobal output cap; default 100
userAgentstringNoOrganization/contact identification for SEC requests

Output data

Each dataset row represents one SEC filing index record.

FieldMeaning
companyNameSEC registrant name
cikZero-padded ten-digit CIK
ticker, exchangePrimary ticker and exchange when available
tickers, exchangesAll aliases supplied by SEC
accessionNumberUnique SEC accession number
formSEC form type
filingDateDate filed with SEC
reportDateReporting period when present
acceptanceDateTimeSEC acceptance timestamp when present
actGoverning act code when present
fileNumber, filmNumberSEC reference identifiers
itemsForm item codes supplied by SEC
sizeFiling size in bytes
isXbrl, isInlineXbrlSEC XBRL indicators
primaryDocumentPrimary filing document filename
primaryDocumentDescriptionSEC document description
filingDetailsUrlFiling index page URL
primaryDocumentUrlDirect primary document URL
sourceSubmissionsUrlExact SEC JSON source URL
scrapedAtUTC extraction timestamp

Output example

{
"companyName": "Apple Inc.",
"cik": "0000320193",
"ticker": "AAPL",
"exchange": "Nasdaq",
"tickers": ["AAPL"],
"exchanges": ["Nasdaq"],
"accessionNumber": "0000320193-24-000123",
"form": "10-K",
"filingDate": "2024-11-01",
"reportDate": "2024-09-28",
"primaryDocument": "aapl-20240928.htm",
"primaryDocumentDescription": "10-K",
"filingDetailsUrl": "https://www.sec.gov/Archives/edgar/data/320193/000032019324000123/0000320193-24-000123-index.html",
"primaryDocumentUrl": "https://www.sec.gov/Archives/edgar/data/320193/000032019324000123/aapl-20240928.htm",
"sourceSubmissionsUrl": "https://data.sec.gov/submissions/CIK0000320193.json",
"scrapedAt": "2026-07-24T00:00:00.000Z"
}

Optional fields are omitted when the SEC does not provide a value. This avoids ambiguous null values in CSV and downstream pipelines.

Current filings versus historical backfills

The main company submissions response contains recent filing arrays and references to older JSON shards.

Keep includeHistorical off for:

  • frequent monitoring runs;
  • recently filed forms;
  • quick watchlist checks;
  • lower request volume and faster completion.

Enable includeHistorical for:

  • multi-year archives;
  • older annual reports;
  • compliance retention projects;
  • longitudinal finance research.

When filing-date bounds are present, historical shards outside the requested range are skipped before download.

How much does it cost to extract SEC EDGAR filings?

The Actor uses pay-per-event pricing: a small run-start charge plus a charge for each filing row saved. Current Bronze pricing is $0.005 per run plus $0.000053757 per filing, with lower unit prices on higher plans and a Free-plan tier.

You are not charged per ticker, SEC request, retry, or historical shard. Use maxItems to keep test runs predictable. Final live tier prices are always displayed on the Actor's Pricing tab.

Because extraction uses official HTTP JSON at 256 MB without a browser or proxy, platform compute usage is designed to remain low.

How to run it

  1. Open the Actor input page.
  2. Add at least one ticker or CIK.
  3. Optionally choose form types and date ranges.
  4. Enable historical shards only for older backfills.
  5. Set maxItems to the desired global cap.
  6. Click Start.
  7. Open the Dataset tab to preview or export filing records.

For a cheap first run, keep the prefilled AAPL input and maxItems: 20.

Tips for reliable filing workflows

  • 🎯 Use CIKs when your internal system already stores them; they avoid ticker changes.
  • πŸ“… Add filing-date bounds to historical backfills so irrelevant shards are skipped.
  • πŸ“„ Use exact SEC form names, including amendments such as 10-K/A when needed.
  • πŸ” Schedule small current-only runs for monitoring rather than repeating full history.
  • πŸ”— Store accession numbers as durable filing identifiers.
  • 🧾 Use sourceSubmissionsUrl for provenance and audit trails.
  • πŸ“¦ Export to a dataset or warehouse before retrieving primary filing documents at scale.

Scheduling and filing alerts

Apify schedules can run the Actor hourly, daily, weekly, or on a custom cron expression.

A typical monitor workflow is:

  1. run current submissions for a ticker watchlist;
  2. filter the dataset by filing date or accession number;
  3. send dataset items through a webhook;
  4. deduplicate accession numbers in the destination;
  5. notify Slack, email, or an internal case-management system.

The Actor itself returns filing records. Alert delivery and cross-run persistence are configured with Apify schedules, webhooks, or your integration platform.

Integrations

Google Sheets

Send dataset rows to a spreadsheet for analyst review, filtering, and annotations.

Slack or Microsoft Teams

Trigger a webhook after the run and post newly observed accession numbers and filing links.

Zapier and Make

Create no-code workflows that route 8-K, 10-K, or Form 4 metadata to CRM, email, or storage systems.

Snowflake, BigQuery, or PostgreSQL

Load normalized rows into a warehouse and join them with issuer, market, or portfolio data.

RAG and document pipelines

Use primaryDocumentUrl as the retrieval queue, while retaining accessionNumber, company identity, form, and dates as document metadata.

JavaScript API example

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('automation-lab/sec-edgar-filings-scraper').call({
identifiers: ['AAPL', 'MSFT'],
formTypes: ['10-K', '10-Q'],
maxItems: 100,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);

Python API example

from apify_client import ApifyClient
client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("automation-lab/sec-edgar-filings-scraper").call(run_input={
"identifiers": ["NVDA"],
"formTypes": ["8-K"],
"maxItems": 50,
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item["ticker"], item["form"], item["filingDetailsUrl"])

cURL API example

curl -X POST \
"https://api.apify.com/v2/acts/automation-lab~sec-edgar-filings-scraper/run-sync-get-dataset-items?token=$APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"identifiers": ["AAPL"],
"formTypes": ["10-K"],
"maxItems": 25
}'

For asynchronous runs, call the /runs endpoint and read the resulting default dataset after completion.

Use with Apify MCP

Connect the Actor to AI assistants through Apify MCP.

Claude Code

Add the hosted Apify MCP server with the exact Actor tool enabled:

$claude mcp add --transport http apify "https://mcp.apify.com/?tools=automation-lab/sec-edgar-filings-scraper"

Authenticate with your Apify token when prompted. Example prompts:

  • "Find Apple's latest 10-K and return the SEC filing and primary-document URLs."
  • "List Microsoft 8-K filings since 2025-01-01."
  • "Backfill NVIDIA 10-K accession numbers from 2015 through 2025."

Claude Desktop setup

Cursor setup

VS Code setup

For Claude Desktop, Cursor, or VS Code, add this MCP JSON configuration in the client's MCP settings:

{
"mcpServers": {
"apify": {
"url": "https://mcp.apify.com/?tools=automation-lab/sec-edgar-filings-scraper"
}
}
}

Authenticate with Apify, then ask the assistant to run a bounded query. Keep maxItems low for interactive work. MCP returns structured Actor output, making forms, dates, companies, and links available without scraping EDGAR HTML pages.

Data source and fair access

This Actor reads public SEC endpoints:

  • company ticker mapping on www.sec.gov;
  • company submissions and historical shards on data.sec.gov;
  • filing documents under www.sec.gov/Archives.

Requests include a descriptive User-Agent and are serialized with conservative pacing. Transient rate limits and server errors receive bounded exponential retries. You can provide your own organization and contact identification in userAgent.

Do not use the Actor to overload SEC systems. Keep schedules and company batches proportionate to your actual workflow.

SEC EDGAR filing data is public government information. However, users remain responsible for complying with SEC fair-access guidance, applicable laws, contractual duties, privacy requirements, and their own organization's policies.

This Actor is a technical data-access tool, not legal, investment, accounting, or compliance advice. Verify important records against the linked official filing before making decisions.

Error handling

The Actor fails clearly when:

  • no identifiers are provided;
  • an identifier is malformed;
  • a ticker does not exist in the current SEC mapping;
  • a date is invalid or a start date follows an end date;
  • SEC data cannot be fetched after bounded retries;
  • no filing matches the supplied companies and filters.

A zero-match run is not reported as a misleading successful extraction. For expected sparse monitors, use a date/form combination known to include at least one filing or handle failed no-match runs in your scheduler.

FAQ

Does it download complete filing documents?

No. It outputs direct filing-detail and primary-document URLs. Document or XBRL parsing is outside the v1 cross-form index scope.

Can I search by company name?

Use ticker symbols or CIKs. Company-name matching is ambiguous and is intentionally not guessed.

Why did my report-date filter return no records?

Some SEC forms have no report date. When report-date bounds are supplied, those records fail closed. Remove the report filter or filter on filing date instead.

Why is an older filing missing?

Enable includeHistorical for records moved from the recent submissions arrays into SEC historical shards. Also verify maxItems and date bounds.

Does it support amended forms?

Yes. Match the exact amended form name, such as 10-K/A, or leave formTypes empty.

Are results deduplicated?

Yes. Accession numbers are deduplicated within each run, including across current and historical sources.

Does it need a proxy or SEC API key?

No. It uses official anonymous public JSON endpoints with fair-access identification and pacing.

Choose a form-specific product when you need parsed entities rather than a generic filing index:

Use SEC EDGAR Filings Scraper when you need a broad, normalized, cross-form company filing index with official links and historical backfill support.

Support

If a run fails unexpectedly, open an issue from the Actor page and include:

  • the run URL;
  • the input identifiers and filters;
  • the expected company/form/date;
  • whether historical shards were enabled.

Do not include Apify tokens or confidential downstream data. Run logs already show high-level company and CIK processing without exposing credentials.