SEC EDGAR Full-Text Filing Search
Under maintenancePricing
Pay per usage
SEC EDGAR Full-Text Filing Search
Under maintenanceSearch SEC EDGAR full-text filing index by free-text query and/or CIK. Returns structured filing records (form type, file date, accession number, CIK, ticker, SIC) without API keys or captchas.
Pricing
Pay per usage
Rating
0.0
(0)
Developer
Mori
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
3 days ago
Last modified
Categories
Share
SEC EDGAR Full-Text Search
Search the SEC EDGAR full-text filing index by free-text query and/or CIK. Returns structured filing records — form type, file date, accession number, CIK, tickers, SIC, headquarter location — without API keys, OAuth, or captchas.
Built for the workflows where you need to answer questions like:
- "Show me all 10-K filings mentioning insider trading policy filed in Q1 2024."
- "Pull every Form 4 insider-trading report from Apple (CIK 320193) in 2025."
- "Find recent 8-K disclosures for any issuer in SIC code 737 (software / data processing)."
- "Get every recent exhibit from any issuer that includes the words going concern in the body."
Backed by SEC's public efts.search index — no proxy rotation, no scheduler, no quota to burn. Polite-pool only: a descriptive User-Agent and a soft 120ms inter-request sleep are baked in.
Input
| Field | Required | Description |
|---|---|---|
query | conditional | Free-text search. Supports phrase queries ("insider trading") and AND/OR operators. Must be supplied if ciks is empty. |
ciks | conditional | Comma-separated CIK numbers (10-digit zero-padded or trimmed, e.g. 0000320193 or 320193). Must be supplied if query is empty. |
forms | no | Comma-separated form-type filter (e.g. 10-K,10-Q,8-K,4). Leave empty for all forms. |
dateRange | no | EDGAR built-in date range (custom, today, last-week, last-month, last-quarter, last-year, 1d, 5d, 30d, 90d, 1y). Use custom with startdt/enddt. |
startdt | conditional | YYYY-MM-DD lower bound. Only when dateRange='custom'. |
enddt | conditional | YYYY-MM-DD upper bound. Only when dateRange='custom'. |
maxItems | no | Max records to return (1-100, default 10). EDGAR /search-index caps page size at 100. |
Validation rule: at least one of query or ciks must be non-empty. The actor fails fast at startup if both are missing.
Output
One JSON record per filing hit. Every field is a string (Apify's output schema v1 only renders string-typed properties — arrays are JSON-encoded).
| Field | Description |
|---|---|
id | EDGAR _id (filename within accession) |
accessionNumber | 0001213900-24-003044-style accession |
accessionUrl | EDGAR archive URL for the filing |
form | Filing form type (10-K, 10-Q, 8-K, 4, ...) |
fileType | Document type within filing (10-K, EX-19.1, ...) |
fileDescription | Free-text description |
fileDate | Filing date YYYY-MM-DD |
periodEnding | Period of report YYYY-MM-DD (or null) |
cik | Primary CIK (10-digit zero-padded) |
allCiks | JSON array of all CIKs in the filing |
displayNames | JSON array of issuer names (incl. ticker + CIK suffix as EDGAR publishes them) |
tickers | JSON array of ticker symbols parsed from displayNames |
sic | 4-digit SIC code |
sicDescription | Human-readable SIC industry (resolved against an inline SEC SIC subset) |
bizState | State of incorporation |
bizLocation | Headquarter location string |
fileNum | File number (001-41866-style) |
filmNum | Film number (legacy SEC id) |
documentUrl | Direct URL to the document |
filingIndexUrl | Filing index page |
edgarCompanyUrl | SEC EDGAR company filings page for primary CIK |
score | EDGAR full-text relevance score |
sourceQuery | Audit trail — the query + filters as dispatched |
fetchedAt | Actor fetch timestamp (ISO-8601) |
Example inputs
# Query mode: "insider trading" in 10-K filings, Q1 2024echo '{"query":"\"insider trading\"","forms":"10-K","dateRange":"custom","startdt":"2024-01-01","enddt":"2024-03-31","maxItems":5}' > .actor/input.jsonapify run -p# CIK mode: every Form 4 from Apple in 2025echo '{"ciks":"0000320193","forms":"4","dateRange":"custom","startdt":"2025-01-01","enddt":"2025-12-31","maxItems":10}' > .actor/input.jsonapify run -p# Combined: software industry (SIC 7372) + "data breach"echo '{"query":"data breach","forms":"8-K","dateRange":"last-month","maxItems":10}' > .actor/input.jsonapify run -p
Limits and gotchas
- Rate limit. SEC guidance: "no more than 10 requests per second" with a polite-pool User-Agent. The actor sends one request per run by default; pagination beyond
maxItems=100requires an external loop (intentional — EDGAR caps/search-indexpage size at 100). - No proxy. This is a keyless public endpoint. SEC blocks anonymous datacenter IPs at peak hours; consumer traffic from Apify's IP pool works fine for typical workloads but heavy commercial usage should consider a polite-pool agreement with SEC.
- SIC subset is partial. The actor embeds a ~250-entry subset of SEC's SIC table covering finance, real estate, manufacturing, retail, services, and government. Less-common SIC codes will return
sicDescription=null— consumers can resolve viahttps://www.sec.gov/corpfin/division-of-corporation-finance-standard-industrial-classification-sic-code-list. - Free-text quirks. EDGAR uses Elasticsearch's match-phrase semantics. A bareword query matches across all token positions; quoted strings anchor to phrase order; capitalisation is normalised. Wildcard
*returns an empty result set (useforms+ date filters to scope instead).
Pricing
Free tier: 10 runs/month on the Apify Free plan. Pro: pay-as-you-go compute units (negligible for single-call API actors — typically <0.001 CU per run).
Changelog
- 0.1.0 — initial release.