SEC Daily API — Python SDK
Official Python SDK for the SEC Daily API — real-time SEC EDGAR filings, company data, and news.
Using Claude, Cursor, ChatGPT, or another AI assistant? Use the sec-daily-mcp package instead — it connects your AI tool directly to the SEC Daily API with no code required.
Installation
pip install sec-daily-api
Requires Python 3.8+. No runtime dependencies.
Quick Start
import os
from sec_daily_api import SecDailyAPI
client = SecDailyAPI(api_key=os.environ["SEC_DAILY_API_KEY"])
# Get Apple's latest 10-K filings
result = client.get_filings(ticker="AAPL", form_types="10-K", limit=5)
for filing in result["filings"]:
print(filing["filingDateInEst"], filing["formType"], filing.get("summary", ""))
Get your API key at secdailyapi.com.
API Reference
For the full reference including all parameters, response schemas, and plan limits, see secdailyapi.com/docs.
SecDailyAPI(api_key=None, *, timeout=30.0)
| Argument | Type | Description |
|---|---|---|
api_key |
str |
Your API key. Defaults to SEC_DAILY_API_KEY env var |
timeout |
float |
Per-request socket timeout in seconds (default 30) |
get_filings(**params)
Search and filter SEC EDGAR filings.
result = client.get_filings(
ticker="AAPL",
form_types=["10-K", "10-Q"],
filing_date_start="2025-01-01",
filing_date_end="2025-12-31",
limit=50,
)
for filing in result["filings"]:
print(filing["formType"], filing["filingDateInEst"])
| Parameter | Type | Description |
|---|---|---|
ticker |
str |
Company ticker, e.g. "AAPL" |
cik |
str |
Company CIK (numeric) |
accession_number |
str |
Exact SEC accession number |
form_types |
str | list[str] |
e.g. "10-K", ["10-K","10-Q"], "8-K", "4" |
filing_date |
str |
Exact filing date YYYY-MM-DD |
filing_date_start |
str |
Date range start YYYY-MM-DD |
filing_date_end |
str |
Date range end YYYY-MM-DD |
fieldset |
"minimal" | "standard" | "full" |
Response size control |
limit |
int |
Results per page, default 200, max 1000 |
cursor |
str |
Pagination cursor from a previous response |
Response: dict with filings (list), count (int), pagination (dict with hasMore and optional nextCursor).
iter_filings(**params)
Auto-paginating generator that yields individual filings across all pages.
# Walk all of Apple's 10-K filings without managing cursors yourself
for filing in client.iter_filings(ticker="AAPL", form_types="10-K", limit=1000):
print(filing["id"], filing["filingDateInEst"])
Accepts the same filters as get_filings. Each page counts against your quota — use a larger limit to minimize requests.
get_filing(id)
Fetch a single filing by its internal ID. Returns None if not found.
filing = client.get_filing("abc123...")
get_filing_by_accession(accession_number)
Fetch a single filing by its SEC accession number. Returns None if not found.
filing = client.get_filing_by_accession("0001193125-24-012345")
get_entity(*, ticker=None, cik=None)
Look up a company's SEC profile. Provide either ticker or cik.
entity = client.get_entity(ticker="AAPL")
print(entity["name"], entity["cik"], entity["sicDescription"])
Returns a dict with: cik, name, ticker, exchange, sicCode, sicDescription, stateOfIncorporation, fiscalYearEnd, businessAddress, website, formerNames, and more. Returns None if not found.
get_news(**params)
Retrieve SEC press releases and market news.
result = client.get_news(
news_type="PressReleases",
start_date="2026-01-01",
end_date="2026-01-31",
limit=40,
)
for item in result["news"]:
print(item["date"], item["newsType"])
| Parameter | Type | Description |
|---|---|---|
news_type |
str |
News category (default: "PressReleases") |
start_date |
str |
Date range start YYYY-MM-DD |
end_date |
str |
Date range end YYYY-MM-DD |
limit |
int |
Results, default 40, max 100 |
get_news_item(id)
Fetch a single news item by ID. Returns None if not found.
TypeScript / type checking
Full type stubs are included. All response shapes are described as TypedDict classes.
from sec_daily_api import Filing, Entity, NewsItem, FilingsResponse
Error handling
from sec_daily_api import SecDailyAPI, SecDailyAPIError
try:
result = client.get_filings(ticker="AAPL")
except SecDailyAPIError as err:
print(err.status, err) # e.g. 403, "SecDaily API error 403: Forbidden"
| Status | Meaning |
|---|---|
| 400 | Invalid parameters |
| 403 | Invalid or missing API key |
| 429 | Rate limit exceeded — retried automatically up to 3 times |
| 504 | Request timed out — retried automatically up to 3 times |
| 500 | Server error |
Resources
- Docs: secdailyapi.com/docs
- Pricing: secdailyapi.com/pricing
- Dashboard: secdailyapi.com/dashboard
- Node.js SDK: sec-daily-api on npm
- MCP Server: sec-daily-mcp on npm
Legal disclaimer
The data provided through this SDK is for informational purposes only and does not constitute investment advice, financial advice, trading advice, or any other type of advice. GoodTech LLC makes no representations as to the accuracy, completeness, or timeliness of the data. You are solely responsible for your use of the data. Always consult a qualified financial professional before making investment decisions.
Licensed under the Apache 2.0 License. Copyright 2026 GoodTech LLC.
Metadata
Release files for sec-daily-api 0.4.2
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| sec_daily_api-0.4.2.tar.gz | 11.0 kB | Without provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| sec_daily_api-0.4.2-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 23.8 kB
Release files / sec_daily_api-0.4.2.tar.gz
| Download URL | sec_daily_api-0.4.2.tar.gz |
|---|---|
| Size | 11.0 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
73c99e892618ece87279c0b7cc26334ebfa23a3ee55c3666cee109e6438c59cc
|
|
BLAKE2b-256 checksum How to use checksums |
bf2523586b782da1e16fbebefb117a8a4f133e9993aac40bbd11995b0e35a23c
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.14.4
|
Release files / sec_daily_api-0.4.2-py3-none-any.whl
| Download URL | sec_daily_api-0.4.2-py3-none-any.whl |
|---|---|
| Size | 12.8 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
672b7dbb1177e42e3b3918437a652df6bfd5d011ea1e16515e751e46fa7b2708
|
|
BLAKE2b-256 checksum How to use checksums |
ed1d741eb125a0a884635c877a05ba51466d95359e3cb18a7264f2af871a0f47
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.14.4
|
Security for sec-daily-api 0.4.2
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.