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 21 Aug 2026
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 21 Aug 2026, 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.
Alternatives to SEC EDGAR Full-Text Search API
If SEC EDGAR Full-Text Search does not fit, these finance & crypto apis cover similar ground. Every one was called before publishing, and each links to its own reference page with a working curl command and the response it returned.
| API | What it does | Auth | CORS | Last verified |
|---|---|---|---|---|
| CoinGecko | Free cryptocurrency price API covering 10,000+ coins. Live prices, market cap and volume in any currency, no API key on the public tier. Tested curl example. | No key | Yes | 19 Aug 2026 |
| Binance Public API | Binance public market data API needs no API key: live ticker prices, order books, klines and 24h stats for every trading pair. Tested curl example and response. | No key | Yes | 19 Aug 2026 |
| Coinbase Exchange Rates | Coinbase public exchange rates API with no key: convert any cryptocurrency to 100+ fiat currencies in a single request. Tested curl example and live JSON. | No key | Yes | 19 Aug 2026 |
| Frankfurter | Free currency exchange rate API with no key, built on European Central Bank data. Latest and historical rates, time series and conversion. Tested curl example. | No key | Yes | 19 Aug 2026 |
| Statistics Canada WDS | Free Statistics Canada Web Data Service with no key: CPI, GDP, employment and any published table by vector id or product id. Read-only POST, tested example included. | No key | Yes | 21 Aug 2026 |
| SUNAT Exchange Rate (apis.net.pe) | Free API for the official SUNAT exchange rate used in Peruvian tax filings: buying and selling PEN/USD rates for the current or any past date. No key, tested example. | No key | No | 21 Aug 2026 |
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 21 Aug 2026; always check the official documentation before relying on this API in production, as terms and limits can change.