Endpoints
/v1/extractor
https://secfeedapi.com/v1/extractorOne item of a 10-K (1, 1A, 7...), 10-Q (part1item2, part2item1a...) or 8-K (2-2, 5-2...) as text or html.
| Parameter | Type | Description | Example |
|---|---|---|---|
urlrequired | string | Filing index page (ending in -index.htm) or the primary document URL. sec.gov/ix?doc= links are accepted. | https://www.sec.gov/Archives/edgar/data/1045810/000104581026000021/0001045810-26-000021-index.htm |
itemrequired | string | Item id. 10-K: 1, 1A, 1B, 1C, 2, 3, 7, 7A, 8, 9A and so on. 10-Q: part1item2, part2item1a. 8-K: the item number with a dash, 2-2 for 2.02, 5-2 for 5.02. | 1A |
type | string | text for plain text with paragraph breaks, html for the same text wrapped in <p> tags. Default text. | html |
- Returns text/plain or text/html, not JSON.
- The form is detected from the document's cover page.
- 10-K item ids are case-insensitive; 10-Q and 8-K ids must match the formats shown.
Request examples
Every response below is real output from the API, trimmed to the first records.
Cybersecurity section of a 10-K
Item 1C as plain text, starting with its heading.
curl -H "Authorization: Bearer $SECFEED_KEY" \ "https://secfeedapi.com/v1/extractor?url=https://www.sec.gov/Archives/edgar/data/1045810/000104581026000021/0001045810-26-000021-index.htm&item=1C"
import os, requests
r = requests.get(
"https://secfeedapi.com/v1/extractor",
params={'url': 'https://www.sec.gov/Archives/edgar/data/1045810/000104581026000021/0001045810-26-000021-index.htm', 'item': '1C'},
headers={"Authorization": f"Bearer {os.environ['SECFEED_KEY']}"},
timeout=60,
)
r.raise_for_status()
print(r.json())MD&A from a 10-Q
Part I, Item 2 of a quarterly report.
curl -H "Authorization: Bearer $SECFEED_KEY" \ "https://secfeedapi.com/v1/extractor?url=https://www.sec.gov/Archives/edgar/data/1045810/000104581026000075/0001045810-26-000075-index.htm&item=part1item2"
import os, requests
r = requests.get(
"https://secfeedapi.com/v1/extractor",
params={'url': 'https://www.sec.gov/Archives/edgar/data/1045810/000104581026000075/0001045810-26-000075-index.htm', 'item': 'part1item2'},
headers={"Authorization": f"Bearer {os.environ['SECFEED_KEY']}"},
timeout=60,
)
r.raise_for_status()
print(r.json())MD&A from a 10-K as HTML
Each paragraph comes back in its own <p> tag, ready to render.
curl -H "Authorization: Bearer $SECFEED_KEY" \ "https://secfeedapi.com/v1/extractor?url=https://www.sec.gov/Archives/edgar/data/1045810/000104581026000021/0001045810-26-000021-index.htm&item=7&type=html"
import os, requests
r = requests.get(
"https://secfeedapi.com/v1/extractor",
params={'url': 'https://www.sec.gov/Archives/edgar/data/1045810/000104581026000021/0001045810-26-000021-index.htm', 'item': '7', 'type': 'html'},
headers={"Authorization": f"Bearer {os.environ['SECFEED_KEY']}"},
timeout=60,
)
r.raise_for_status()
print(r.json())Response fields
| Field | Type | Meaning |
|---|---|---|
(body) | text | The section text. Content-Type is text/plain or text/html with charset utf-8. |
heading | text | The body starts with the item heading as written in the filing, for example Item 1C. Cybersecurity. |
paragraphs | text | Paragraphs are separated by a blank line in text mode and wrapped in <p> in html mode. |
error | string | On failure the body is JSON with an error message, for example when the item does not exist in the filing. |
Item ids by form
| Form | Item id | Section |
|---|---|---|
| 10-K | 1 | Business |
| 10-K | 1A | Risk Factors |
| 10-K | 1C | Cybersecurity |
| 10-K | 3 | Legal Proceedings |
| 10-K | 7 | Management's Discussion and Analysis |
| 10-K | 7A | Market Risk |
| 10-K | 8 | Financial Statements |
| 10-K | 9A | Controls and Procedures |
| 10-Q | part1item1 | Financial Statements |
| 10-Q | part1item2 | MD&A |
| 10-Q | part1item4 | Controls and Procedures |
| 10-Q | part2item1 | Legal Proceedings |
| 10-Q | part2item1a | Risk Factors |
| 8-K | 2-2 | Item 2.02 Results of Operations |
| 8-K | 5-2 | Item 5.02 Director and Officer Changes |
| 8-K | 7-1 | Item 7.01 Regulation FD |
| 8-K | 8-1 | Item 8.01 Other Events |
How to
How do I get risk factors from a 10-K?
Use item=1A with the filing index URL.
curl -H "Authorization: Bearer $SECFEED_KEY" \ "https://secfeedapi.com/v1/extractor?url=https://www.sec.gov/Archives/edgar/data/789019/000119312526323660/0001193125-26-323660-index.htm&item=1A"
How do I get the business description?
Use item=1.
curl -H "Authorization: Bearer $SECFEED_KEY" \ "https://secfeedapi.com/v1/extractor?url=https://www.sec.gov/Archives/edgar/data/1045810/000104581026000021/0001045810-26-000021-index.htm&item=1"
How do I get 10-Q risk factor updates?
Use item=part2item1a. Many companies only point back to the 10-K here, so the section can be short.
curl -H "Authorization: Bearer $SECFEED_KEY" \ "https://secfeedapi.com/v1/extractor?url=https://www.sec.gov/Archives/edgar/data/1045810/000104581026000075/0001045810-26-000075-index.htm&item=part2item1a"
How do I extract an 8-K item?
Write the item number with a dash and no leading zero: 2.02 becomes 2-2.
curl -H "Authorization: Bearer $SECFEED_KEY" \ "https://secfeedapi.com/v1/extractor?url=https://www.sec.gov/Archives/edgar/data/32604/000003260426000047/0000032604-26-000047-index.htm&item=2-2"
How do I get HTML instead of text?
Add type=html.
curl -H "Authorization: Bearer $SECFEED_KEY" \ "https://secfeedapi.com/v1/extractor?url=https://www.sec.gov/Archives/edgar/data/1045810/000104581026000021/0001045810-26-000021-index.htm&item=1C&type=html"
Can I pass the main document URL instead of the index page?
Yes, either works.
curl -H "Authorization: Bearer $SECFEED_KEY" \ "https://secfeedapi.com/v1/extractor?url=https://www.sec.gov/Archives/edgar/data/1045810/000104581026000021/nvda-20260125.htm&item=1C"
How do I find the filing URL to pass?
Use linkToFilingDetails from the Filing Query API.
curl -H "Authorization: Bearer $SECFEED_KEY" \ "https://secfeedapi.com/v1/filings?query=ticker:MSFT%20AND%20formType:%2210-K%22&size=1"
How do I compare one section across years?
Query the company's 10-K filings, then call the extractor once per filing with the same item.
curl -H "Authorization: Bearer $SECFEED_KEY" \ "https://secfeedapi.com/v1/filings?query=ticker:NVDA%20AND%20formType:%2210-K%22&size=5"
What happens if the item is not in the filing?
You get a 400 with item ... not found in this 10-K. Smaller reporting companies often omit items such as 7A; this NVIDIA 10-K includes it.
curl -H "Authorization: Bearer $SECFEED_KEY" \ "https://secfeedapi.com/v1/extractor?url=https://www.sec.gov/Archives/edgar/data/1045810/000104581026000021/0001045810-26-000021-index.htm&item=7A"
Errors
- 400 pass url (primary document or filing index) and item, when either is missing.
- 400 item X not found in this 10-K (or 10-Q, 8-K) when the section cannot be located.
See also the error codes every endpoint shares.
Try it with your own key
500 free calls a month.