SEC EDGAR Scraper | US Public Company Filings & Profiles
Pricing
from $1.20 / 1,000 results
SEC EDGAR Scraper | US Public Company Filings & Profiles
SEC EDGAR scraper & API: export US public-company filings, profiles and XBRL fundamentals (revenue, net income, assets, EPS) by ticker, CIK or name. Equity research, financial statement data and compliance — official data.sec.gov, fast, no login.
Pricing
from $1.20 / 1,000 results
Rating
0.0
(0)
Developer
Haketa
Maintained by CommunityActor stats
0
Bookmarked
1
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Share
SEC EDGAR Scraper — Company Profiles, Filings & XBRL Fundamentals
Turn a list of US stock tickers, CIKs or company names into a clean, structured dataset of public-company profiles, recent SEC filings and financial fundamentals. This SEC EDGAR scraper pulls straight from SEC's official data.sec.gov and www.sec.gov endpoints — the regulatory source of truth for every US public company — so you scrape SEC EDGAR with no login, no coding, no HTML parsing and no anti-bot gymnastics. Pass ["AAPL", "MSFT", "NVDA"] and get back per-company CIK, ticker, exchange, SIC industry, EIN, fiscal-year end, filer category, mailing + business addresses, registered phone, the latest filings with direct document links, and optional XBRL revenue / net income / assets / equity.
Export every record to JSON, CSV, Excel, or API.
Built for equity & credit analysts, fintech and data teams, compliance / KYC desks, B2B sales & lead-gen, investigative journalists, and quants building training corpora from public filings.
🔎 Why scrape SEC EDGAR?
SEC EDGAR is where every US public company files its disclosures — 10-K annual reports, 10-Q quarterlies, 8-K material events, S-1 IPO registrations, DEF 14A proxies, Form 4 insider trades and more. It is the most regulated, most-litigated, most-syndicated dataset in finance, and it is 100% public. Bloomberg, Refinitiv, S&P Capital IQ and FactSet all resell cleaned-up versions of the exact same fields SEC publishes for free, at four figures per seat per month.
The catch is delivery format. SEC ships the data as a sprawling CIK directory of thousands of tiny JSON endpoints, each with its own arcane User-Agent rule and a per-IP rate limit that throttles anyone who pulls at scale. Getting a tidy, de-duplicated table of companies — let alone one joined to their filings and fundamentals — is a meaningful engineering job. This SEC EDGAR scraper does that job for you and returns spreadsheet-ready rows.
Common reasons people scrape SEC EDGAR:
- Build a watchlist that flags every new 8-K or 10-K filed by your coverage names.
- Pull company profiles (CIK, ticker, exchange, SIC industry, EIN, addresses, phone) for an entire sector in one run.
- Pre-screen earnings season with the latest 10-K / 10-Q filings and XBRL fundamentals per name.
- Map every S-1 (IPO) and S-4 (M&A) filed in your target market for deal-flow intelligence.
- Enrich a CRM with regulator-grade identity data on the highest-budget B2B buyers — US public companies.
- Feed filing document URLs straight into an LLM or ingestion pipeline for text analysis.
- Run compliance / KYC entity mapping on
formerNames,ein,stateOfIncorporationandlei.
✨ What this SEC EDGAR scraper does
- ✅ Three ways in — all auto-resolved: supply stock tickers (easiest), CIK numbers, or fuzzy company names. Each is matched against SEC's official
company_tickers.jsonmap (~10,400 live symbols) to the canonical 10-digit CIK. Class-share tickers with a dot (BRK.B) resolve correctly to SEC's dashed form (BRK-B). - ✅ Rich company profile per row:
cik,name, alltickers+primaryTicker, allexchanges+primaryExchange,sic+sicDescription,ein,lei,category(filer size),fiscalYearEnd,stateOfIncorporation,entityType,phone,formerNames, and full mailing + business addresses. - ✅ Recent filings, already linked: each company carries a
recentFilingsarray — form type, filing & report dates, accession number, primary document name, size, XBRL flags, and a ready-to-opendocumentUrlplusindexUrlfor every filing. Filter to just the forms you care about (10-K,8-K,4, …). - ✅ Optional XBRL fundamentals: flip on
includeFundamentalsfor the latest reported Revenue, Net Income, Total Assets and Total Stockholders' Equity from SEC'scompanyconceptendpoint, with automatic fallback across GAAP tag names so newer filers still populate. - ✅ Scales cleanly & safely: concurrent workers with automatic HTTP 429 handling — the scraper retries with backoff and rotates through fresh datacenter-proxy IPs when SEC throttles, so large watchlists come back complete instead of silently truncated.
- ✅ De-duplicated output: every company appears once, keyed on CIK, even if you pass the same name three ways.
- ✅ Export anywhere: JSON, CSV, Excel, or pull via the Apify SEC EDGAR API.
Everything above is exactly what the actor produces — no promised fields it doesn't return.
🎯 Use cases
- Equity / credit research — material-event monitoring, earnings-season prep, sector screens joined to fundamentals.
- M&A / corporate development — track S-1 (IPO) and S-4 (merger) filings across your TAM for live deal flow.
- B2B sales & lead generation — target US public companies by
sicDescription,categoryandphone; filter to large accelerated filers (>$700M float) for highest-LTV accounts. - Compliance / KYC / legal — entity mapping with
ein,formerNames,stateOfIncorporation,leias join keys; Section 16 monitoring via Form 4. - Quant / AI / ML — build filing text corpora from every row's
documentUrl; backtest fundamentals with repeated runs. - Investigative journalism — follow filings by company and surface insider activity via
insiderTransactionForIssuerExists. - Proptech / REIT analytics — slice every Real Estate Investment Trust by SIC and score on total assets.
- ESG research — filter
recentFilingsto sustainability-related forms for a disclosure snapshot.
📥 Input
Give the actor at least one ticker, CIK or company name. Leave everything blank to get a ready-made sample of well-known US public companies. All parameters:
| Field | Type | Description |
|---|---|---|
tickers | array | US stock tickers, case-insensitive (AAPL, MSFT, BRK.B). Easiest way to look up companies. |
companyNames | array | Fuzzy company names (apple → Apple Inc.). Use tickers/CIKs for exact matches. |
ciks | array | 10-digit SEC Central Index Keys, with or without leading zeros (320193 or 0000320193). |
includeRecentFilings | boolean | Attach each company's recent filings under recentFilings. Default true. |
filingFormTypes | array | Keep only these form types (10-K, 10-Q, 8-K, S-1, DEF 14A, 4, …). Empty = keep all. |
maxFilingsPerCompany | integer | Cap on recent filings per company (SEC returns up to 1,000). 0 = all. Default 50. |
includeFundamentals | boolean | Add latest Revenue, Net Income, Total Assets, Total Equity from XBRL. Default false. |
maxCompanies | integer | Cap total companies returned. 0 = no limit. |
userAgentEmail | string | Contact email sent in SEC's required User-Agent header. Default works fine. |
maxConcurrency | integer | Companies processed in parallel (1–8). Default 5. |
requestDelay | integer | Pause in ms between requests. Default 150. |
proxyConfiguration | object | Optional. SEC is open-access so proxy is off by default; the scraper auto-rotates datacenter IPs only if SEC throttles. |
Input example
{"tickers": ["AAPL", "MSFT", "NVDA", "GOOGL", "META"],"includeRecentFilings": true,"maxFilingsPerCompany": 20,"includeFundamentals": true,"filingFormTypes": ["10-K", "10-Q", "8-K"]}
More examples:
{ "companyNames": ["apple", "nvidia", "berkshire"] }
{ "ciks": ["0000320193", "0000789019", "1652044"], "maxFilingsPerCompany": 25 }
📤 Output
Each dataset item is one company. Below is a real record from a fresh verification run (filings array trimmed to one entry for brevity):
{"cik": "0001652044","name": "Alphabet Inc.","tickers": ["GOOGL", "GOOG", "GOOGM", "GOOGN"],"primaryTicker": "GOOGL","exchanges": ["Nasdaq", "Nasdaq", "Nasdaq", "Nasdaq"],"primaryExchange": "Nasdaq","sic": "7370","sicDescription": "Services-Computer Programming, Data Processing, Etc.","ein": "611767919","lei": null,"description": null,"website": null,"investorWebsite": null,"category": "Large accelerated filer","fiscalYearEnd": "1231","stateOfIncorporation": "DE","stateOfIncorporationDescription": "DE","entityType": "operating","phone": "650-253-0000","formerNames": null,"mailingStreet": "1600 AMPHITHEATRE PARKWAY","mailingCity": "MOUNTAIN VIEW","mailingState": "CA","mailingZip": "94043","mailingCountry": null,"businessStreet": "1600 AMPHITHEATRE PARKWAY","businessCity": "MOUNTAIN VIEW","businessState": "CA","businessZip": "94043","businessCountry": null,"insiderTransactionForOwnerExists": true,"insiderTransactionForIssuerExists": true,"recentFilings": [{"form": "4","filingDate": "2026-10-30","reportDate": "2026-10-29","accessionNumber": "0001193125-26-442116","primaryDocument": "xslF345X06/ownership.xml","primaryDocDescription": "4","fileNumber": null,"items": null,"sizeBytes": 8340,"isXBRL": false,"isInlineXBRL": false,"documentUrl": "https://www.sec.gov/Archives/edgar/data/1652044/000119312526442116/xslF345X06/ownership.xml","indexUrl": "https://www.sec.gov/Archives/edgar/data/1652044/000119312526442116/0001193125-26-442116-index.htm"}],"recentFilingsCount": 20,"lastFilingDate": "2026-10-30","lastFilingForm": "4","revenueLatest": null,"revenueLatestPeriod": null,"netIncomeLatest": null,"totalAssetsLatest": null,"totalEquityLatest": null,"edgarUrl": "https://www.sec.gov/cgi-bin/browse-edgar?action=getcompany&CIK=0001652044&type=&dateb=&owner=include&count=40","submissionsUrl": "https://data.sec.gov/submissions/CIK0001652044.json","searchInput": "ticker:GOOGL","scrapedAt": "2026-11-01T23:56:47.695Z"}
Field reference (main fields)
| Field | Description |
|---|---|
cik | SEC Central Index Key, 10-digit zero-padded — the universal company id. |
name | Registered company name. |
tickers, primaryTicker | All listed tickers and the first one. |
exchanges, primaryExchange | All listing exchanges and the first (Nasdaq, NYSE, …). |
sic, sicDescription | Standard Industrial Classification code + plain-text industry. |
ein | Federal Employer Identification Number. |
lei | Legal Entity Identifier (present when SEC has filed one). |
category | Filer category — Large accelerated, Accelerated, Non-accelerated, Smaller reporting. |
fiscalYearEnd | Fiscal-year end as MMDD (Alphabet = 1231). |
stateOfIncorporation(Description) | State / country of incorporation. |
entityType | "operating", "investment company", etc. |
phone | Registered SEC phone number. |
formerNames | Array of previously-filed names (present when the company was renamed). |
mailing*, business* | Street, city, state, zip, country for both addresses. |
insiderTransactionFor…Exists | Booleans — whether Form 3/4/5 insider data exists. |
recentFilings | Array of recent filings — see below. |
recentFilingsCount, lastFilingDate, lastFilingForm | Filings summary. |
revenueLatest, netIncomeLatest, totalAssetsLatest, totalEquityLatest | XBRL fundamentals, populated when includeFundamentals: true. |
revenueLatestPeriod | Period-end date for the reported revenue figure. |
edgarUrl, submissionsUrl | Links to the EDGAR company page and the raw submissions JSON. |
searchInput, scrapedAt | How the row was identified + ISO scrape timestamp. |
Each recentFilings entry: form, filingDate, reportDate, accessionNumber, primaryDocument, primaryDocDescription, fileNumber, items, sizeBytes, isXBRL, isInlineXBRL, documentUrl (direct download of the primary document) and indexUrl (the filing's index page).
Honest coverage notes (from the fresh run): core identity fields — cik, name, primaryTicker, primaryExchange, sicDescription, edgarUrl, recentFilings — populate at 100%. ein, phone, category, fiscalYearEnd, exchanges and entityType are also ~100%; addresses ~99%. Fields like website, investorWebsite, description, lei, businessCountry and formerNames are present only when SEC has that datum on file — SEC leaves them blank for most filers, so a null there is accurate, not a scraping miss. The fundamentals fields are null unless you set includeFundamentals: true.
🔁 Pagination & scale
This is a bulk, identifier-driven scraper rather than a page-by-page crawler: you hand it a list of tickers / CIKs / names and it fetches every matching company's submissions endpoint concurrently, writing one de-duplicated row per CIK. There is no page cursor to manage — the size of your input list is the pagination, capped by maxCompanies, and maxFilingsPerCompany controls how deep each company's filings history goes (up to SEC's 1,000-filing ceiling).
It is built to return hundreds to thousands of companies in a single run. SEC enforces its rate limit per IP, so on large runs the scraper automatically retries throttled requests with exponential backoff and rotates fresh datacenter-proxy IPs until each company comes back — large watchlists complete instead of truncating. For the full S&P 500, pass all 500 tickers in one run.
⚙️ How to use
- On Apify Console — open the actor, type your tickers (or company names / CIKs), choose whether to include filings and fundamentals, and click Start.
- Via API — call the Apify SEC EDGAR API
run-sync-get-dataset-itemsendpoint with the same JSON input to get records back in one request. - On a schedule — attach an Apify Schedule (e.g. a daily cron) with a static ticker list to refresh your watchlist automatically.
- Pick your export — download as JSON, CSV or Excel from the Dataset tab, or stream it out.
- Integrate — push results to Google Sheets, Make, Zapier, a webhook, or your own database / warehouse.
💡 Tips
- Filter forms to cut noise. Set
filingFormTypes: ["8-K"]for a material-event feed, or["4"]for insider trades — thedocumentUrlthen points straight at the relevant filing. - Use CIKs for guaranteed matches. ADRs and OTC-only tickers may not be in SEC's listed-symbol map; pass the CIK directly to always resolve.
- Keep
maxFilingsPerCompanysmall for big lists. 10–20 filings per company keeps runs fast; raise it when you need deep history. - Turn on fundamentals selectively.
includeFundamentalsadds a few extra requests per company — great for research lists, skip it when you only need profiles + filings. - Large accelerated filer = biggest companies. Filter on
categoryfor the highest-float, highest-budget names. - Leave the proxy off. SEC is open-access; the scraper only rotates IPs automatically if it actually gets throttled, so you pay nothing extra on normal runs.
❓ FAQ
Is scraping SEC EDGAR legal? Yes. Every field returned is public SEC disclosure published for free by a US government agency. There is no paywall, no terms-of-service barrier and no anti-bot to bypass. SEC's only requirement is that clients identify themselves with a User-Agent, which this actor does automatically.
How many companies can I get, and how fast? Hundreds to thousands per run — the input list size is the only ceiling. A broad large-cap list resolved 420 companies in a fresh verification run; throughput is roughly several companies per second on default settings (slower with fundamentals, which add extra requests per company).
Do I need proxies or a login? No login ever. No proxy needed either — SEC serves any IP. The scraper transparently rotates free datacenter-proxy IPs only when SEC rate-limits a large run, so your results stay complete.
What export formats are supported? JSON, CSV, Excel, and JSON Lines, plus programmatic access via the Apify API.
Is there a SEC EDGAR API?
Yes — this actor is itself a hosted SEC EDGAR API. Trigger runs and fetch the dataset over HTTP, or use run-sync-get-dataset-items for synchronous one-call results.
How fresh is the data?
Real-time. Every run hits SEC's live endpoints; SEC updates its submissions JSON within minutes of accepting a filing, so recentFilings reflects the latest acceptances.
Can I filter by filing type?
Yes — filingFormTypes keeps only the forms you choose (10-K, 10-Q, 8-K, S-1, DEF 14A, Form 4, 13F-HR, SC 13D/G, 6-K, 20-F, and more). Leave it empty to keep everything.
Why is a ticker not resolving?
SEC's mapping is US-listed symbols only. Class-share dots are handled automatically (BRK.B → BRK-B), but ADRs and OTC-only tickers may be absent — pass the CIK directly in that case.
Why are some fundamentals null?
Set includeFundamentals: true to populate them. Even then, foreign filers under IFRS and some investment companies don't report the standard US-GAAP tags, so those stay null — that's accurate to what SEC holds.
🔗 Related scrapers
Pair the SEC EDGAR scraper with these companion datasets to build a full financial-intelligence pipeline:
- Yahoo Finance Fundamentals Scraper — market prices, valuation multiples and ratios to sit beside SEC's as-reported XBRL figures.
- TradingView Scraper — technical screeners, indicators and market data for the same tickers.
- CoinGecko Scraper — crypto market data to round out a multi-asset research stack.
- DeFiLlama Scraper — DeFi protocol TVL, chains and yields for on-chain coverage.
- Y Combinator Companies Scraper — startup profiles for pre-IPO deal flow next to this actor's public-company coverage.
- BuiltIn Tech Companies Scraper — tech-company profiles and hiring signals for market mapping.
Ready to go? Drop in a list of tickers and run the SEC EDGAR scraper now — clean company profiles, linked filings and fundamentals, straight from the official source, exportable to JSON, CSV, Excel or API.