SEC EDGAR Scraper | US Public Company Filings & Profiles avatar

SEC EDGAR Scraper | US Public Company Filings & Profiles

Pricing

from $1.20 / 1,000 results

Go to Apify Store
SEC EDGAR Scraper | US Public Company Filings & Profiles

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

Haketa

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

1

Monthly active users

2 days ago

Last modified

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, stateOfIncorporation and lei.

✨ 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.json map (~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, all tickers + primaryTicker, all exchanges + 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 recentFilings array — form type, filing & report dates, accession number, primary document name, size, XBRL flags, and a ready-to-open documentUrl plus indexUrl for every filing. Filter to just the forms you care about (10-K, 8-K, 4, …).
  • ✅ Optional XBRL fundamentals: flip on includeFundamentals for the latest reported Revenue, Net Income, Total Assets and Total Stockholders' Equity from SEC's companyconcept endpoint, 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, category and phone; filter to large accelerated filers (>$700M float) for highest-LTV accounts.
  • Compliance / KYC / legal — entity mapping with ein, formerNames, stateOfIncorporation, lei as 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 recentFilings to 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:

FieldTypeDescription
tickersarrayUS stock tickers, case-insensitive (AAPL, MSFT, BRK.B). Easiest way to look up companies.
companyNamesarrayFuzzy company names (apple → Apple Inc.). Use tickers/CIKs for exact matches.
ciksarray10-digit SEC Central Index Keys, with or without leading zeros (320193 or 0000320193).
includeRecentFilingsbooleanAttach each company's recent filings under recentFilings. Default true.
filingFormTypesarrayKeep only these form types (10-K, 10-Q, 8-K, S-1, DEF 14A, 4, …). Empty = keep all.
maxFilingsPerCompanyintegerCap on recent filings per company (SEC returns up to 1,000). 0 = all. Default 50.
includeFundamentalsbooleanAdd latest Revenue, Net Income, Total Assets, Total Equity from XBRL. Default false.
maxCompaniesintegerCap total companies returned. 0 = no limit.
userAgentEmailstringContact email sent in SEC's required User-Agent header. Default works fine.
maxConcurrencyintegerCompanies processed in parallel (1–8). Default 5.
requestDelayintegerPause in ms between requests. Default 150.
proxyConfigurationobjectOptional. 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)

FieldDescription
cikSEC Central Index Key, 10-digit zero-padded — the universal company id.
nameRegistered company name.
tickers, primaryTickerAll listed tickers and the first one.
exchanges, primaryExchangeAll listing exchanges and the first (Nasdaq, NYSE, …).
sic, sicDescriptionStandard Industrial Classification code + plain-text industry.
einFederal Employer Identification Number.
leiLegal Entity Identifier (present when SEC has filed one).
categoryFiler category — Large accelerated, Accelerated, Non-accelerated, Smaller reporting.
fiscalYearEndFiscal-year end as MMDD (Alphabet = 1231).
stateOfIncorporation(Description)State / country of incorporation.
entityType"operating", "investment company", etc.
phoneRegistered SEC phone number.
formerNamesArray of previously-filed names (present when the company was renamed).
mailing*, business*Street, city, state, zip, country for both addresses.
insiderTransactionFor…ExistsBooleans — whether Form 3/4/5 insider data exists.
recentFilingsArray of recent filings — see below.
recentFilingsCount, lastFilingDate, lastFilingFormFilings summary.
revenueLatest, netIncomeLatest, totalAssetsLatest, totalEquityLatestXBRL fundamentals, populated when includeFundamentals: true.
revenueLatestPeriodPeriod-end date for the reported revenue figure.
edgarUrl, submissionsUrlLinks to the EDGAR company page and the raw submissions JSON.
searchInput, scrapedAtHow 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

  1. On Apify Console — open the actor, type your tickers (or company names / CIKs), choose whether to include filings and fundamentals, and click Start.
  2. Via API — call the Apify SEC EDGAR API run-sync-get-dataset-items endpoint with the same JSON input to get records back in one request.
  3. On a schedule — attach an Apify Schedule (e.g. a daily cron) with a static ticker list to refresh your watchlist automatically.
  4. Pick your export — download as JSON, CSV or Excel from the Dataset tab, or stream it out.
  5. 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 — the documentUrl then 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 maxFilingsPerCompany small for big lists. 10–20 filings per company keeps runs fast; raise it when you need deep history.
  • Turn on fundamentals selectively. includeFundamentals adds 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 category for 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.

Pair the SEC EDGAR scraper with these companion datasets to build a full financial-intelligence pipeline:


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.