Request a tool
All toolsMCP serverRequest a toolPlatformsCategories
SEC EDGAR Filings Scraper icon

SEC EDGAR Filings Scraper

Pull SEC EDGAR filings as clean rows: form, company, date, accession number, and a direct document link. Search all filings or fetch by ticker/CIK.

Run this in the cloudRun on Apify →

News & Finance Data

How it works

  1. 1
    Open it on Apify

    Hit Run on Apify — it opens the tool in the cloud, no install.

  2. 2
    Set the inputs

    Adjust mode, query, forms (sensible defaults are pre-filled).

  3. 3
    Click Run

    The tool runs on Apify’s cloud and collects the data for you.

  4. 4
    Export the results

    Download as JSON, CSV or Excel, or pipe straight into your app, Google Sheets, or an AI agent.

Inputs

FieldWhat it doesType
modeHow to find filings. "search" runs an EDGAR full-text search across all filings using your query. "company" pulls a company's recent filing history by ticker orstring
queryFull-text query for "search" mode (e.g. "artificial intelligence"). Matched as a phrase across filing documents. Required when mode is "search"; ignored in "comstring
formsComma-separated SEC form types to filter by, e.g. "10-K,8-K". Leave empty for all forms. Applies to both modes.string
tickersFor "company" mode: one or more stock tickers (e.g. AAPL, TSLA) or numeric CIKs. Each company's filing history is fetched. Ignored in "search" mode.array
startDateOnly include filings filed on or after this date (YYYY-MM-DD). Optional.string
endDateOnly include filings filed on or before this date (YYYY-MM-DD). Optional.string
maxItemsMaximum number of filings to return across the WHOLE run (a total budget shared by all companies/queries, not a per-company cap). In "company" mode the run stopinteger
notionConnectorOptional. Write each item as a page into your Notion when the run finishes. Authorize a Notion connector once in Settings → API & Integrations → MCP connectors,string
notionParentIdOptional. The Notion data source ID of the database to write into (only used if a Notion connector is set). Leave empty to create the pages privately in your wostring

What you get

A structured dataset — each result includes fields like:

accessionNumbercikcompanyNamedescriptionfilingDatefilingUrlformprimaryDocumentreportDateticker

Export every run as JSON, CSV or Excel, or send it to your app, a database, Google Sheets, or an AI agent.

2 ready-to-run use cases

Apple (AAPL) SEC Filings Scraper - EDGAR by Ticker

Apple's EDGAR filings pulled by ticker: every 10-K, 10-Q, and 8-K with filing date, accession number, and a direct link to each document.

EDGAR Full-Text Search: AI Across SEC Filings

Which companies mention artificial intelligence? Run a full-text search across EDGAR filings to find every 10-K and 8-K, with company and filing links.

SEC EDGAR Filings Scraper

Pull filings from the U.S. SEC's EDGAR system through its official public APIs — no API key, no login, no anti-bot to fight. Two modes:

  • Full-text search — search the text of every filing for a phrase (e.g. artificial intelligence), optionally narrowed to specific form types and a date window.
  • Company filings — give one or more tickers or CIKs (e.g. AAPL, TSLA) and get that company's recent filing history.

Both modes return the same normalized shape, including a direct link to the primary filing document.

What you get per filing

form, companyName, cik, ticker, filingDate, reportDate, accessionNumber, primaryDocument, description, and filingUrl (a direct link to the document in https://www.sec.gov/Archives/...).

Which fields can be null. SEC's full-text search index does not return every field for every hit, so search-mode rows are sparser than company-mode rows. In particular, ticker, reportDate, and description are often null in search mode (EDGAR's full-text engine doesn't index a ticker for many filers, and report/period dates and document descriptions are inconsistently present). company mode (driven by the submissions API) is more complete, but reportDate, description, and ticker can still be null for some filings. filingUrl is null only when SEC didn't supply enough identifiers (cik + accession + primary document) to build a canonical Archives link. Treat these fields as best-effort, not guaranteed.

Input

FieldNotes
modesearch (full-text) or company (by ticker/CIK). Default search.
queryPhrase for search mode, e.g. "artificial intelligence". Required in search mode.
formsComma-separated form types, e.g. 10-K,8-K. Optional; applies to both modes.
tickersArray of tickers or CIKs for company mode, e.g. ["AAPL","TSLA"].
startDate / endDateOptional YYYY-MM-DD filing-date window.
maxItemsCap on total rows across the whole run (a shared budget, not per-company). In company mode, earlier tickers can use up the budget before later ones. Full-text search itself caps at 10000 results.
proxyConfigurationOptional. SEC's public API has no anti-bot, so a proxy gives no scraping benefit and this actor does no IP rotation. Off by default; enable only for anonymity, geolocation, or your own network's rate limits.

Output

One dataset row per filing, deduplicated by accessionNumber + primaryDocument. Empty results return a single diagnostic row and are not charged.

Examples

Full-text search:

{ "mode": "search", "query": "artificial intelligence", "forms": "10-K", "maxItems": 50 }

Company filings:

{ "mode": "company", "tickers": ["AAPL", "TSLA"], "forms": "10-K,8-K", "maxItems": 50 }

Sample output row

{
  "ok": true,
  "form": "10-K",
  "companyName": "Example Corp",
  "cik": "0000320193",
  "ticker": "EXMP",
  "filingDate": "2024-02-01",
  "reportDate": "2023-12-31",
  "accessionNumber": "0000320193-24-000006",
  "primaryDocument": "exmp-20231231.htm",
  "description": "10-K",
  "filingUrl": "https://www.sec.gov/Archives/edgar/data/320193/000032019324000006/exmp-20231231.htm"
}

In search mode, ticker, reportDate, and description are frequently null (EDGAR's full-text index is sparse). See "Which fields can be null" above.

Pricing

Pay-per-result: you are charged once per filing row returned. Empty runs, blocked/error runs, and diagnostic rows (ok:false) are never charged — only genuine filing rows (ok:true) bill. Bad input (e.g. an empty query in search mode, or no tickers in company mode) returns a single uncharged BAD_INPUT diagnostic row rather than failing the run.

Troubleshooting

  • Sparse rows / null ticker or dates — expected in search mode; SEC's full-text index omits these for many filers. Use company mode for richer records.
  • Some tickers returned nothing in company mode — the run pushes a NOT_FOUND diagnostic row listing exactly which ticker(s)/CIK(s) failed to resolve or had no matching filings.
  • A BLOCKED / RATE_LIMITED diagnostic — SEC has no anti-bot, so this almost always means your own network or a misconfigured proxy is being throttled; the actor already backs off and retries. Try again, or turn the proxy off if you enabled one.

Notes

This actor follows SEC's fair-access policy: every request carries a descriptive contact-style User-Agent (required — SEC returns 403 without one), uses gzip, and keeps a polite gap between requests. Full-text search covers filings indexed by EDGAR's full-text engine and is limited to 10000 results per query — split large jobs by form type or date window. Company mode returns the most recent ~1000 filings per company from the submissions API.