How to Search SEC EDGAR Filings by Keyword (Full-Text Search API)
SEC EDGAR has a free full-text search API called EFTS. Learn how to search 10-K, 10-Q, and 8-K filings by keyword, filter by form type and date, and extract matched text with Python.
The actor referenced in this article is live on Apify. Pay only for results delivered.
Most people know SEC EDGAR for looking up filings by company. Fewer know about EDGAR’s full-text search: the ability to search the body text of every filing ever submitted. This unlocks cross-company research that is impossible with the standard EDGAR API.
What EDGAR full-text search covers
The EDGAR Full-Text Search System (EFTS) indexes the body text of all filings submitted since 1996. That includes:
- 10-K annual reports and 10-Q quarterly reports
- 8-K current reports (earnings, mergers, executive changes)
- DEF 14A proxy statements
- S-1 registration statements
- 13F institutional holdings reports
- 200+ other form types
The EFTS endpoint
The base URL is https://efts.sec.gov/LATEST/search-index?q="your+query". The API requires no authentication and returns JSON.
import requests
params = {
"q": '"supply chain disruption"', # use quotes for exact phrase
"dateRange": "custom",
"startdt": "2024-01-01",
"enddt": "2024-12-31",
"forms": "10-K",
}
r = requests.get("https://efts.sec.gov/LATEST/search-index", params=params)
hits = r.json()['hits']['hits']
for hit in hits:
src = hit['_source']
print(src['file_date'], src['entity_name'], src['form_type'])
print(src['file_num'])
Pagination
EFTS returns 10 results per page by default. Use from= to paginate:
all_results = []
offset = 0
while True:
params['from'] = offset
r = requests.get("https://efts.sec.gov/LATEST/search-index", params=params)
data = r.json()
hits = data['hits']['hits']
if not hits:
break
all_results.extend(hits)
offset += len(hits)
if offset >= data['hits']['total']['value']:
break
Using the Apify actor
The SEC EDGAR Full-Text Search scraper wraps EFTS with automatic pagination, rate-limit handling, and structured output:
import apify_client
client = apify_client.ApifyClient('YOUR_APIFY_TOKEN')
run_input = {
"query": "material weakness internal controls",
"formTypes": ["10-K", "10-Q"],
"startDate": "2024-01-01",
"endDate": "2024-12-31",
"maxResults": 200,
}
run = client.actor('themineworks/sec-edgar-fulltext-search').call(run_input=run_input)
for item in client.dataset(run['defaultDatasetId']).iterate_items():
print(item['company'], item['form_type'], item['filing_date'])
print(item['filing_url'])
High-value search queries
Risk research: "going concern" — companies auditors flagged as at risk of bankruptcy.
M&A research: "definitive agreement to acquire" — all announced acquisitions across all filers.
Executive changes: "appointed as Chief Executive Officer" in 8-K filings.
Climate risk: "physical risks of climate change" across all 10-K filings in a sector.
Litigation: "class action lawsuit" to track filings disclosing active litigation.
Pricing
First 25 results free. Pay per filing returned. Zero charge on empty searches.
Try the scraper referenced in this article — live on Apify, pay only for results.
Open sec-edgar-fulltext-search on Apify →Frequently asked questions
What is EDGAR EFTS? +
EDGAR Full-Text Search (EFTS) is the SEC own search endpoint at efts.sec.gov. It indexes the full body text of all filings submitted after 1996.
Can I search inside 10-K risk factors? +
Yes. EFTS searches the full body text of each filing, including the Risk Factors, MD&A, and all other sections of 10-K and 10-Q filings.
Is the EDGAR full-text search API free? +
Yes. EFTS is a free, unauthenticated endpoint with no rate limit documented by the SEC. Fair-use scraping is acceptable per the SEC robots.txt and EDGAR guidelines.
How to Scrape AmbitionBox Company Reviews and Ratings
AmbitionBox is India largest employer review platform with 300,000 companies. Learn how to pull ratings, review counts, salary data, and dimension scores as structured JSON without any official API.
AliExpress Product Data API: Prices, Ratings, and Orders in Python
AliExpress affiliate API has restricted coverage. Learn how to scrape AliExpress product listings for prices, ratings, order counts, and seller data as structured JSON — no affiliate approval needed.
ClinicalTrials.gov API v2: How to Search 500,000 Studies and Track Trial Status
ClinicalTrials.gov upgraded to a v2 REST API in 2024. Here is how to use it, what changed from v1, and how to build automated trial monitoring pipelines in Python.