SEC EDGAR Filings Scraper
Search all SEC EDGAR filings by keyword, ticker or CIK. Get form, company, CIK, date and document link. $2.00 per 1,000.
How it works
- 1Open it on Apify
Hit Run on Apify — it opens the tool in the cloud, no install.
- 2Set the inputs
Adjust
mode,query,forms(sensible defaults are pre-filled). - 3Click Run
The tool runs on Apify’s cloud and collects the data for you.
- 4Export the results
Download as JSON, CSV or Excel, or pipe straight into your app, Google Sheets, or an AI agent.
Pricing
$0.002 per item = $2 per 1,000
| You are charged for | When | Price |
|---|---|---|
| Item returned | Charged per filing/result returned. | $0.002 |
Pay-per-event pricing: you are billed per result, not per subscription. Billing is handled by Apify on your own account. These are the live Apify store prices, in effect since 2026-06-12, and they are what you are actually charged.
Inputs
| Field | What it does | Type |
|---|---|---|
mode | How 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 or CIK. | string |
query | Full-text query for "search" mode (e.g. "artificial intelligence"). Matched as a phrase across filing documents. Required when mode is "search"; ignored in "company" mode. Note: SEC's full-text index is sparse, "search" rows often have null ticker, reportDate, and description (see README). Use "company" mode for more complete records. | string |
forms | Comma-separated SEC form types to filter by, e.g. "10-K,8-K". Leave empty for all forms. Applies to both modes. | string |
tickers | For "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 |
endDate | Only include filings filed on or before this date (YYYY-MM-DD). Optional. | string |
startDate | Only include filings filed on or after this date (YYYY-MM-DD). Optional. | string |
maxItems | Maximum 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 stops once this total is hit, so earlier tickers in the list can consume the budget before later ones. Full-text search itself caps at 10000 results. | integer |
notionConnector | Optional. Write each item as a page into your Notion when the run finishes. Authorize a Notion connector once in Settings → API & Integrations → MCP connectors, then pick it here. Leave empty to skip (default), results are always saved to the dataset regardless. | string |
notionParentId | Optional. 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 workspace instead. | string |
What you get
A structured dataset — each result includes fields like:
accessionNumbercikcompanyNamedescriptionfilingDatefilingUrlformprimaryDocumentreportDatetickerExport 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 SEC Filings by Ticker, Straight from EDGAR
Every AAPL filing with form type, filing and report date, accession number and a direct document link. Metadata and links, not the filing text.
EDGAR Full Text Search: Find a Phrase in SEC Filings
Searches the text of every filing for your phrase and returns which company filed it, what form, and where to read it. The text itself stays on EDGAR.
Related tools in News & Finance Data
Other ready-to-run tools in the same category — all pay-per-use on the Apify cloud.
Google News Scraper
Track Google News by keyword or topic. Get real publisher URLs, source, date and snippet. $3.00 per 1,000 articles.
GDELT Worldwide News Scraper
Search worldwide news via GDELT 2.0: headline, URL, domain, country, language and date. 250 articles per query. $2.00 per 1,000.
Yahoo Finance Scraper
Get Yahoo Finance quotes and OHLCV history with no API key. Ticker search, current quote with change % and the 52-week range. $1.00 per 1,000 rows.
CoinGecko Crypto Market Scraper
Scrape CoinGecko crypto market data with no API key. Get top coins, price, volume, 24h and 7d change, supply, ATH and ATL. $2.00 per 1,000 coins.
Where this tool sits
- Categories
- News & Finance Data
- Platforms
- Finance & Markets
SEC EDGAR Scraper: search every SEC filing by phrase, ticker or CIK
Give it a phrase and it runs the SEC's own full-text search across every indexed filing. Give it tickers or CIKs instead and it pulls those companies' filing histories. Each row carries the form type, the company, the CIK, the filing date, the accession number and a link straight to the document.
One thing to know before you budget a run: full-text search returns a row per matching document, not per filing. A 10-K whose exhibits all mention your phrase comes back as several rows, and each one is charged.
| Input | A search phrase, or a list of tickers and CIKs |
| Output | One row per matching filing document |
| Ceiling | 10,000 filings per run |
| Account needed | None, and no SEC key |
| Price | $2.00 per 1,000 filings, flat on every plan |
🔍 What SEC EDGAR Scraper does
In search mode it asks EDGAR's full-text index for your phrase and pages through the hits. Your words go in as one quoted phrase, so artificial intelligence finds that pair of words together, not documents that happen to contain both somewhere. There are no boolean operators and no wildcards.
In company mode you hand it tickers, CIKs or a mix of the two, and it reads each company's recent filing history from the SEC's submissions feed. These rows are fuller: the ticker, the report date and the document description are all populated, because that feed carries them and the full-text index usually does not.
Both modes take the same form filter and the same date window, and both stop at the same run total. What you get is filing metadata plus filingUrl, which points at the document itself rather than a landing page, so you can hand it straight to whatever reads it next.
📥 What you give it
{
"mode": "search",
"query": "artificial intelligence",
"forms": "10-K,8-K",
"startDate": "2024-01-01",
"maxItems": 500
}
{
"mode": "company",
"tickers": ["AAPL", "TSLA", "0000320193"],
"forms": "10-K",
"maxItems": 200
}
| Field | Default | What it is |
|---|---|---|
mode | search | search for the full-text index, company for filing histories. Anything else is treated as search. |
query | box starts at artificial intelligence | The phrase to search for. Needed in search mode, ignored in company mode. |
tickers | empty | Tickers like AAPL, or numeric CIKs, mixed freely. Needed in company mode, ignored in search mode. |
forms | empty | Comma-separated form types, such as 10-K,8-K. Empty means every form. Works in both modes. |
startDate | empty | YYYY-MM-DD. Only filings filed on or after this date. |
endDate | empty | YYYY-MM-DD. Only filings filed on or before this date. |
maxItems | 100 | The total for the whole run, up to 10,000. Not a per-company figure. |
notionConnector | none | Optional. Writes each row into your Notion once the run finishes. |
notionParentId | none | Optional. The Notion data source to write into. |
proxyConfiguration | off | Optional network settings. Off by default, and a normal run does not need it. |
maxItems is a budget for the run, shared by every ticker in the list. Four tickers at maxItems: 100 does not give you 100 each. The first company can spend the whole budget before the fourth is reached, so put the ones you care about first.
📤 What you get back
A real row from a recent run:
{
"ok": true,
"form": "20-F",
"companyName": "Xiao-I Corp",
"cik": "0001935172",
"ticker": "AIXI",
"filingDate": "2023-04-28",
"reportDate": "2022-12-31",
"accessionNumber": "0001213900-23-033683",
"primaryDocument": "f20f2022ex4-19_xiaoicorp.htm",
"description": "ENGLISH TRANSLATION OF AI CLOUD PLATFORM SERVICE CONTRACT BETWEEN SHANGHAI XIAO-I ROBOT TECHNOLOGY CO., LTD. AND CUSTOMER F DATED JUNE 27, 2022",
"filingUrl": "https://www.sec.gov/Archives/edgar/data/1935172/000121390023033683/f20f2022ex4-19_xiaoicorp.htm"
}
| Field | What it is |
|---|---|
form | The form type, such as 10-K, 8-K or 20-F. |
cik | The SEC's company number, zero-padded to ten digits. Stable, unlike a ticker. |
ticker | Often null in search mode. Always filled in company mode. |
reportDate | The period the filing covers, which is not the date it was filed. Often null in search mode. |
accessionNumber | The SEC's id for the filing. Pair it with primaryDocument to dedupe across runs. |
primaryDocument | The file inside the filing that matched. |
description | The SEC's own label for that document. Often null in search mode. |
filingUrl | Direct link to the document. null when the CIK or the file name was missing. |
🧾 Reading the output
Two kinds of row land in your dataset, and ok tells them apart.
| Row | How to spot it | Charged |
|---|---|---|
| A filing | ok: true and an accessionNumber | yes |
| A diagnostic | ok: false and an errorCode | no |
The overview table in the Apify console shows the filing columns only, so a diagnostic row looks blank there. Switch to the JSON or All fields view to read it.
| Code | What it means |
|---|---|
BAD_INPUT | search mode with no query, or company mode with no tickers. The row says which. |
NO_RESULTS | The request worked and nothing matched your phrase, forms or dates. |
NOT_FOUND | Some tickers or CIKs did not resolve. The unresolved field lists them, and the companies that did resolve still returned rows. |
RATE_LIMITED | The SEC asked for a slower pace than the run could keep. Try a smaller run. |
SERVER_ERROR | The SEC answered 5xx. Usually passes. |
BLOCKED | The SEC refused the request. Re-run it. |
NETWORK | The SEC was unreachable. Re-run it. |
▶️ How to run it
1. Open SEC EDGAR Scraper and click Try for free. 2. Leave Mode on full-text search and type a phrase into Search query, or switch to company filings and fill in Tickers or CIKs. 3. Set Max filings. Start around 50 to see the row shape. 4. Narrow it with Form types and the two date fields if you want, then click Start. 5. Download the dataset as JSON, CSV or Excel, or read it from the Apify API.
💰 How much does it cost?
$2.00 per 1,000 filings. Flat on every Apify plan, no volume tiers.
You pay per row delivered. Duplicate documents are dropped before they are counted, diagnostic rows are not charged, and a search that matches nothing is not charged.
💡 What people use it for
- Finding every company that used a phrase in its filings, then reading the documents that came back.
- Pulling one company's 10-K and 8-K history for a model that needs the source text, not a summary.
- Watching a form type on a schedule, using the date fields so each run only picks up what is new.
- Building a CIK list for an internal database, since the CIK survives ticker changes and renames.
🚧 What it does not do
- Metadata and a link, never the text. The filing itself is not downloaded or parsed here.
- Full-text search stops at 10,000 results per query. That is the SEC's ceiling. Narrow a common
phrase with a form filter or a date range instead of trying to page past it.
- Search rows are thin.
ticker,reportDateanddescriptionare frequentlynull, because
the SEC's full-text index does not carry them. Use company mode when you need full records.
- One row per matching document. A filing with several matching exhibits produces several rows.
companymode reads the recent filings block the SEC publishes per company. A start date
further back than that block reaches returns fewer rows without saying so.
- Dates are taken as given. An impossible date is not rejected, it just matches nothing.
- The query is one exact phrase. Quotes of your own,
AND,ORand wildcards are not
interpreted.
- A ticker that has been reused resolves to whichever company holds it today. Use a CIK to be
certain.
🧭 Which company data scraper do you need?
| If you want | Use |
|---|---|
| SEC filings by phrase, ticker or CIK | This one |
| Share prices, OHLCV history and company financials | Yahoo Finance Scraper |
| Trades disclosed by members of Congress | Congress Stock Trades Scraper |
| Newly incorporated UK companies | New UK Companies Scraper |
| Company pages and headcount on LinkedIn | LinkedIn Companies Scraper |
❓ Questions people ask
Do I need an SEC account or key? No. EDGAR is a public government system and this reads it directly.
Why did four tickers give me fewer rows than I expected? maxItems is one budget for the whole run. Raise it, or run the companies separately.
Why is ticker empty on my search results? The SEC's full-text index often does not publish it. Take the cik from the row and run company mode on that.
Can I search for two phrases at once? Not in one run. The query goes in as a single quoted phrase. Run them separately and join on accessionNumber.
Can I schedule it? Yes. Set startDate to the day you last ran it, and each run picks up what has been filed since.
Is this legal? EDGAR is published by the SEC for public use, and these are documents companies are required by law to file. Apify's write-up on scraping and the law is a good starting point, and we are not lawyers.
🆘 If something breaks
Open the Issues tab on the actor page. Send the run ID and the input you used. The errorCode on the diagnostic row usually names the problem on its own.