SEC EDGAR Filings Scraper avatar

SEC EDGAR Filings Scraper

Pricing

$2.00 / 1,000 item returneds

Go to Apify Store
SEC EDGAR Filings Scraper

SEC EDGAR Filings Scraper

Scrape SEC EDGAR filings via the official public APIs. Full-text search across all filings, or pull a company's filing history by ticker/CIK. Returns normalized rows with form, company, dates, accession number and a direct document URL. No API key.

Pricing

$2.00 / 1,000 item returneds

Rating

0.0

(0)

Developer

Dami's Studio

Dami's Studio

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a day ago

Last modified

Share

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.