SEC EDGAR Full-Text Search API
Free SEC EDGAR full-text search API with no key: search the text of 10-K, 10-Q, 8-K and every other filing since 2001 by phrase, form type, company and date range.
Endpoint tested and returned HTTP 200 on 2026-08-21
What is the SEC EDGAR Full-Text Search API?
The SEC's EDGAR full-text search runs over the body text of filings and is exposed as a free JSON API with no key. It supports exact phrases, form-type filters and date ranges across filings from 2001 onwards.
EDGAR's structured APIs tell you what a company reported as numbers. This one tells you what it wrote. Searching for a phrase across every 10-K in a quarter — a risk factor, a technology, a counterparty name — is a fundamentally different question from pulling XBRL facts, and it is the question that surfaces things nobody has tagged. Quote a phrase to search it exactly; without quotes the terms are matched independently.
Two operational facts govern how you use it. Coverage starts in 2001, so anything earlier is invisible to this endpoint even though EDGAR holds the documents. And the SEC requires every automated request to send a descriptive `User-Agent` identifying you with contact details — requests with a default library agent get blocked, and the block is applied to the IP rather than the request. Results come back in raw Elasticsearch shape, with each hit's `_id` combining the accession number and the document filename.
Quick facts
- Base URL
https://efts.sec.gov/LATEST- Authentication
- No key, but the SEC requires a descriptive User-Agent header naming your application and a contact address. Requests without one are blocked.
- Rate limit
- 10 requests per second across all SEC endpoints, enforced per IP.
- Pricing
- Free.
- CORS
- Not enabled — call it from your server
- Official docs
- Read the docs
How to use the SEC EDGAR Full-Text Search API
Every request below was executed against the live API on 2026-08-21, and the response shown is the real body it returned — not an illustration.
1. 10-K filings mentioning "climate risk" in Q1 2025
GET https://efts.sec.gov/LATEST/search-index?q=%22climate%20risk%22&forms=10-K&dateRange=custom&startdt=2025-01-01&enddt=2025-03-31
curl 'https://efts.sec.gov/LATEST/search-index?q=%22climate%20risk%22&forms=10-K&dateRange=custom&startdt=2025-01-01&enddt=2025-03-31'const res = await fetch("https://efts.sec.gov/LATEST/search-index?q=%22climate%20risk%22&forms=10-K&dateRange=custom&startdt=2025-01-01&enddt=2025-03-31");
if (!res.ok) throw new Error(`Request failed: ${res.status}`);
const data = await res.json();
console.log(data);import requests
res = requests.get("https://efts.sec.gov/LATEST/search-index?q=%22climate%20risk%22&forms=10-K&dateRange=custom&startdt=2025-01-01&enddt=2025-03-31", timeout=20)
res.raise_for_status()
print(res.json()){
"took": 2541,
"timed_out": false,
"_shards": {
"total": 50,
"successful": 50,
"skipped": 0,
"failed": 0
},
"hits": {
"total": {
"value": 277,
"relation": "eq"
},
"max_score": 7.0256405,
"hits": [
{
"_index": "edgar_file",
"_id": "0001163165-25-000012:cop-20241231.htm",
"_score": 7.0256405,
"_source": {
"ciks": [
"0001163165"
],
"period_ending": "2024-12-31",
"file_num": [
"001-32395"
],
"display_names": [
"CONOCOPHILLIPS (COP) (CIK 0001163165)"
],
"xsl": null,
"sequence": 1,
"root_forms": [
"10-K"
],
"file_date": "2025-02-18",
"biz_states": [
"TX"
],
"sics": [
"2911"
],
"form": "10-K",
"adsh": "0001163165-25-000012",
"film_num": [
"25634395"
],
"biz_locations": [
"Houston, TX"
],
"file_type": "10-K",
"file_description": "10-K",
"inc_states": [
"DE"
],
"items": []
}
},
{
"_index": "edgar_file",
"_id": "0000083246-25-000007:hsbcusa-20241231.htm",
"_score": 5.5230966,
"_source": {
"ciks": [
"0000083246"
],
"period_ending": "2024-12-31",
"file_num": [
"001-07436"
],
"display_nameParameters
| Parameter | Type | Required | Description |
|---|---|---|---|
q | query | Required | Search terms. Wrap in double quotes for an exact phrase; unquoted terms match independently. "climate risk" |
forms | query | Optional | Comma-separated form types to restrict to. 10-K |
dateRange | query | Optional | `custom` to enable the explicit date bounds below. custom |
startdt / enddt | query | Optional | Filing date bounds in `YYYY-MM-DD`, used with `dateRange=custom`. 2025-01-01 |
ciks | query | Optional | Restrict to specific filers by zero-padded CIK. 0001163165 |
from | query | Optional | Result offset for paging. 10 |
Response fields
hits.total.valueinteger- Number of matching documents.
hits.hits[]._idstring- Accession number and filename joined by a colon — enough to build the document URL.
hits.hits[]._scorenumber- Relevance score for the match.
hits.hits[]._source.display_namesarray- Filer name with ticker and CIK in one display string.
hits.hits[]._source.ciksarray- Zero-padded CIK numbers of the filers on this document.
hits.hits[]._source.form / root_formsstring- Form type, and its root type with amendment suffixes stripped.
hits.hits[]._source.file_datestring- Date the filing was submitted.
hits.hits[]._source.period_endingstring- Reporting period the filing covers, which is not the filing date.
hits.hits[]._source.sicsarray- SIC industry classification codes for the filer.
hits.hits[]._source.biz_states / biz_locationsarray- Registered business location of the filer.
What you can build with the SEC EDGAR Full-Text Search API
- Find every 10-K discussing a specific risk factor in a period
- Track how often a term appears in filings over time
- Locate filings that name a particular counterparty or product
- Build a research corpus of filing text for a topic
Common errors and how to fix them
403 or a rate-limit page
No descriptive User-Agent was sent.
Fix: The SEC requires a `User-Agent` naming your application and a contact email. A default library agent will be blocked.
No results before 2001
Not an error — the index starts in 2001.
Fix: Earlier filings exist in EDGAR but are not full-text indexed. Use the archive browse endpoints instead.
Unexpectedly broad matches
The phrase was not quoted.
Fix: Wrap multi-word phrases in double quotes inside `q`, URL-encoded. Unquoted terms are matched independently.
429
More than 10 requests per second.
Fix: The limit is shared across all SEC endpoints from your IP. Space requests and cache aggressively.
SEC EDGAR Full-Text Search API — frequently asked questions
Is SEC full-text search free to use?
Yes. It needs no key or registration, but the SEC requires every automated request to send a descriptive User-Agent identifying your application and a contact address.
How far back does full-text search go?
To 2001. EDGAR holds older filings but they are not in the full-text index, so a pre-2001 phrase search returns nothing even though the document exists.
How is this different from the EDGAR company facts API?
Company facts returns structured XBRL numbers a filer tagged. Full-text search runs over the prose of the filing itself, which surfaces things no one tagged — risk language, named counterparties, product descriptions.
How do I build the URL for a matching document?
The `_id` combines the accession number and filename with a colon. Split it and assemble the EDGAR archive path from the accession number with dashes removed and the filer's CIK.
Tools that pair with this API
JSON Path Finder
Evaluate a dot/bracket path against your JSON and list every leaf path for discovery. Free online JSON path finder that runs 100% in your browser.
JSON Formatter
Format, beautify and minify JSON online with 2-space, 4-space or tab indentation. Sort keys alphabetically and catch syntax errors instantly — free and private.
URL Parser
Parse a URL into protocol, host, port, path, query parameters and hash. Handles relative URLs with a base and shows query params in a table. Free and private.
SEC EDGAR Full-Text Search is an independent third-party service and is not affiliated with ByteTools or ByteVancer. Details on this page were verified on 2026-08-21; always check the official documentation before relying on this API in production, as terms and limits can change.