SEC EDGAR Filings Scraper
Pricing
Pay per event
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
Maintained by CommunityActor 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, andNVDAto 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, or4; - π 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.
Compliance and legal teams
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 report10-Qβ quarterly report8-Kβ current reportS-1β registration statementDEF 14Aβ definitive proxy statement13F-HRβ institutional holdings report4β 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}
| Field | Type | Required | Description |
|---|---|---|---|
identifiers | string[] | Yes | One to 100 ticker symbols or CIKs |
formTypes | string[] | No | Exact SEC forms; empty means all forms |
filingDateFrom | string | No | Inclusive filing date, YYYY-MM-DD |
filingDateTo | string | No | Inclusive filing date, YYYY-MM-DD |
reportDateFrom | string | No | Inclusive report-period date |
reportDateTo | string | No | Inclusive report-period date |
includeHistorical | boolean | No | Follow older SEC submission shards |
maxItems | integer | No | Global output cap; default 100 |
userAgent | string | No | Organization/contact identification for SEC requests |
Output data
Each dataset row represents one SEC filing index record.
| Field | Meaning |
|---|---|
companyName | SEC registrant name |
cik | Zero-padded ten-digit CIK |
ticker, exchange | Primary ticker and exchange when available |
tickers, exchanges | All aliases supplied by SEC |
accessionNumber | Unique SEC accession number |
form | SEC form type |
filingDate | Date filed with SEC |
reportDate | Reporting period when present |
acceptanceDateTime | SEC acceptance timestamp when present |
act | Governing act code when present |
fileNumber, filmNumber | SEC reference identifiers |
items | Form item codes supplied by SEC |
size | Filing size in bytes |
isXbrl, isInlineXbrl | SEC XBRL indicators |
primaryDocument | Primary filing document filename |
primaryDocumentDescription | SEC document description |
filingDetailsUrl | Filing index page URL |
primaryDocumentUrl | Direct primary document URL |
sourceSubmissionsUrl | Exact SEC JSON source URL |
scrapedAt | UTC 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
- Open the Actor input page.
- Add at least one ticker or CIK.
- Optionally choose form types and date ranges.
- Enable historical shards only for older backfills.
- Set
maxItemsto the desired global cap. - Click Start.
- 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/Awhen needed. - π Schedule small current-only runs for monitoring rather than repeating full history.
- π Store accession numbers as durable filing identifiers.
- π§Ύ Use
sourceSubmissionsUrlfor 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:
- run current submissions for a ticker watchlist;
- filter the dataset by filing date or accession number;
- send dataset items through a webhook;
- deduplicate accession numbers in the destination;
- 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 ApifyClientclient = 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.
Is scraping SEC EDGAR legal?
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.
Related Automation Lab actors
Choose a form-specific product when you need parsed entities rather than a generic filing index:
- SEC Form 4 Insider Trading Scraper
- SEC 8-K Filings Scraper
- SEC Form D Filings Scraper
- SEC Company Facts Scraper
- SEC S-1 Filings Scraper
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.