How to download SEC filings (10-K, 10-Q, 8-K, Form 4) by ticker and search EDGAR full text
Updated 2026-10-28 ยท Tool used: SEC EDGAR Filings Scraper - 10-K, 10-Q, 8-K by Ticker on Apify ยท Price: $0.0005 per filing ($0.50 per 1,000); unknown tickers, companies with no matching filings, empty searches and duplicates are free
The SEC publishes every filing for free, but the EDGAR website shows one company at a time, the JSON APIs need a CIK instead of a ticker, and full-text search is a separate service with its own format. Building a watchlist feed of 8-Ks or a table of the last two years of 10-Qs for 50 companies means stitching all of that together.
This guide shows how to get one clean row per filing from the official SEC EDGAR APIs: company, CIK, form, filing and report date, accession number, 8-K items as a list, SIC industry, and direct links to the main document and the filing index. The same run can also search the full text of every filing since 2001 for phrases like "going concern" or "cybersecurity incident". No API key is needed.
Open SEC EDGAR Filings Scraper on Apify โSteps
- Add tickers (
AAPL,BRK-B) or CIKs tocompanies. Tickers are resolved with the SEC's own ticker list, and unknown ones come back as free rows. - Pick
formTypes(empty means all forms) and an optionaldateFrom. Turn on older filings if you need history beyond the latest ~1,000 filings per company. - For a topic search, set
fullTextQuery(e.g."supply chain" tariff) with form and date filters instead of, or next to, companies. - Run it and export as CSV or Excel. For a daily feed of new filings for your watchlist, add a Schedule with
dateFromset to yesterday.
Example input
{
"companies": [
"AAPL",
"MSFT",
"NVDA"
],
"formTypes": [
"10-K",
"10-Q"
],
"dateFrom": "2024-10-01",
"maxFilingsPerCompany": 20
}
Example output (one item, shortened)
{
"query": "AAPL",
"queryType": "company",
"found": true,
"cik": "0000320193",
"companyName": "Apple Inc.",
"tickers": [
"AAPL"
],
"exchanges": [
"Nasdaq"
],
"form": "8-K",
"filingDate": "2026-07-30",
"reportDate": "2026-07-30",
"acceptanceDateTime": "2026-07-31T00:30:28.000Z",
"accessionNumber": "0000320193-26-000018",
"items": [
"2.02",
"9.01"
],
"primaryDocument": "aapl-20260730.htm",
"documentUrl": "https://www.sec.gov/Archives/edgar/data/320193/000032019326000018/aapl-20260730.htm",
"filingIndexUrl": "https://www.sec.gov/Archives/edgar/data/320193/000032019326000018/0000320193-26-000018-index.htm",
"fileNumber": "001-36743",
"sizeBytes": 417360,
"isXBRL": true,
"isInlineXBRL": true,
"sic": "3571",
"sicDescription": "Electronic Computers",
"stateOfIncorporation": "CA",
"fiscalYearEnd": "0926",
"error": null
}
Every run's dataset can be downloaded as JSON, CSV, Excel, XML or HTML from the Apify Console, or via https://api.apify.com/v2/datasets/<datasetId>/items?format=csv.
Run it from code
Python
from apify_client import ApifyClient # pip install apify-client
client = ApifyClient("<YOUR_APIFY_TOKEN>")
run_input = {
"companies": [
"AAPL",
"MSFT",
"NVDA"
],
"formTypes": [
"10-K",
"10-Q"
],
"dateFrom": "2024-10-01",
"maxFilingsPerCompany": 20
}
run = client.actor("tinyrex/sec-edgar-filings-scraper").call(run_input=run_input)
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item)JavaScript / Node.js
import { ApifyClient } from 'apify-client'; // npm i apify-client
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('tinyrex/sec-edgar-filings-scraper').call({
"companies": [
"AAPL",
"MSFT",
"NVDA"
],
"formTypes": [
"10-K",
"10-Q"
],
"dateFrom": "2024-10-01",
"maxFilingsPerCompany": 20
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);curl (no SDK)
# Runs the actor and returns the results directly (CSV here; use format=json for JSON)
curl -X POST "https://api.apify.com/v2/acts/tinyrex~sec-edgar-filings-scraper/run-sync-get-dataset-items?format=csv" \
-H "Authorization: Bearer $APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{"companies": ["AAPL", "MSFT", "NVDA"], "formTypes": ["10-K", "10-Q"], "dateFrom": "2024-10-01", "maxFilingsPerCompany": 20}' > results.csv
Get your API token in Apify Console โ Settings โ API & Integrations. The free Apify plan includes monthly credit that is enough to try this.
Use it from an AI agent (MCP)
The Apify MCP server exposes this actor as a tool for Claude, Cursor, VS Code, n8n and other MCP clients. Add this to your client's MCP config (or use the OAuth flow at mcp.apify.com instead of a token):
{
"mcpServers": {
"apify": {
"url": "https://mcp.apify.com?tools=tinyrex/sec-edgar-filings-scraper",
"headers": {
"Authorization": "Bearer <YOUR_APIFY_TOKEN>"
}
}
}
}
Then ask in plain language, e.g. "Sec edgar api python for this list and give me a table".
Pricing
Pay per result: $0.0005 per filing ($0.50 per 1,000); unknown tickers, companies with no matching filings, empty searches and duplicates are free. You can cap the cost of every run in the run options.
FAQ
Does the SEC have a free API for EDGAR filings?
Yes. The SEC runs free JSON APIs on data.sec.gov and a full-text search service, with a fair-use limit of 10 requests per second and a declared User-Agent. This actor stays well under that limit and returns flat rows instead of raw JSON.
How do I get only earnings releases or executive changes from 8-K filings?
Set formTypes to ["8-K"] and filter the items column: 2.02 is results of operations (earnings), 5.02 is officer and director changes, 1.01 is a material agreement.
Can I feed the filings into an LLM or RAG pipeline?
Yes. Each row has documentUrl and filingIndexUrl, so you can fetch the main document or exhibits you need. The actor itself returns metadata and links, not the full documents.
What does it cost?
$0.0005 per filing returned ($0.50 per 1,000), cheaper on higher Apify plans. A filing found by two searches is charged once.
Try it on Apify โMore guides
- Bulk tech stack lookup: a Wappalyzer / BuiltWith alternative for thousands of domains
- How to scrape Greenhouse, Lever and Ashby jobs (plus Personio, Teamtailor, Recruitee)
- How to export all products from any Shopify store to CSV or JSON
- How to scrape jobs from Workday career sites (myworkdayjobs.com)
- How to export products from any WooCommerce store to CSV or JSON
- How to export EU public tenders from TED (Tenders Electronic Daily) to CSV or JSON
- How to scrape remote jobs from Himalayas, Remote OK, We Work Remotely and more in one run
- How to export open EU funding calls (Horizon Europe, Digital Europe, cascade funding) to CSV or JSON
- How to turn any RSS or Atom feed into JSON or CSV (bulk, with monitoring)
- How to extract emails, phone numbers and social links from a list of company domains
- How to take bulk website screenshots from a URL list and save them to CSV or Google Drive
- How to export US federal (SAM.gov) and UK (Contracts Finder) tenders to CSV or JSON
- How to look up French companies by SIREN or SIRET and build a B2B list from Sirene
- How to look up Norwegian companies by organisation number and build lead lists from Brreg
- How to validate NPI numbers in bulk and build US healthcare provider lists from NPPES
- How to look up hundreds of UK companies on Companies House at once (profile, officers, PSC)
- How to look up Finnish companies by Y-tunnus and build B2B lead lists from the YTJ register
- How to extract all URLs from a website's sitemap (and find broken links)
- How to transcribe hundreds of audio and video files to text and subtitles with Whisper
- How to extract text from hundreds of PDFs, including scanned ones, in one run
- How to clean an email list before a campaign: bulk MX, disposable and typo check
- How to get Dutch public tenders from TenderNed into a spreadsheet, with daily alerts
- How to audit titles, meta descriptions, H1s and canonicals for hundreds of pages at once
- How to find every broken link and redirect on a website, with the pages to fix
- How to validate LEI codes and find the LEI for a list of companies in bulk
- How to run Lighthouse on hundreds of URLs and get Core Web Vitals in one table