REST API + Python SDK that transforms raw SEC EDGAR filings into structured financial data. 8,000+ companies. 15+ years of history.
curl -H "X-API-Key: sk_live_..." \
https://api.secql.dev/companies/AAPL/financials
{
"ticker": "AAPL",
"period": "2024-Q3",
"revenue": 94930000000,
"net_income": 21448000000,
"total_assets": 364980000000,
"eps_basic": 1.40,
"currency": "USD"
}Stop parsing XBRL. Start building.
We parse the SEC's XML taxonomy so you don't have to. Get clean JSON with the metrics you actually need.
Up to 80 periods of financial data per company. Revenue, net income, assets, liabilities, EPS, and more.
Every public company that files with the SEC. Look up by ticker symbol, get data instantly.
Official SDK with sync and async clients, Pandas DataFrame export, and typed exception handling.
Generous free tier for prototyping. Pro at $19/mo for production. No surprises.
Every error response includes a message, hint, and documentation link. No guessing what went wrong.
Enter any ticker. Get real SEC data back instantly.
Four endpoints. That's it. Everything you need, nothing you don't.
/companies/{ticker}Company profile — name, CIK, sector, exchange
/companies/{ticker}/financialsLatest quarterly or annual financials
/companies/{ticker}/financials/history?periods=40Up to 40 periods of historical financial data
/companies/{ticker}/filings?limit=10Recent SEC filings with direct document URLs
{
"cik": "0000320193",
"ticker": "AAPL",
"period": "2024-Q3",
"period_type": "quarterly",
"revenue": 94930000000,
"net_income": 21448000000,
"total_assets": 364980000000,
"total_liabilities": 308030000000,
"cash_and_equivalents": 29965000000,
"shares_outstanding": 15287521000,
"eps_basic": 1.40,
"currency": "USD"
}Sync, async, and Pandas — all in one package.
from secql import SecQL
client = SecQL() # reads SECQL_API_KEY from env
company = client.company("AAPL")
print(company.name) # Apple Inc.
financials = client.financials("AAPL")
print(financials.revenue) # 94930000000# Get 40 quarters as a DataFrame
df = client.financials(
"AAPL",
periods=40,
as_dataframe=True,
)
df["margin"] = df["net_income"] / df["revenue"]
df.plot(x="period", y="margin")from secql import AsyncSecQL
import asyncio
async def fetch():
async with AsyncSecQL() as client:
aapl, msft = await asyncio.gather(
client.financials("AAPL"),
client.financials("MSFT"),
)
return aapl, msftfrom secql.exceptions import (
CompanyNotFound,
RateLimited,
)
try:
data = client.financials("INVALID")
except CompanyNotFound:
print("Ticker not found")
except RateLimited as e:
print(f"Retry after {e.retry_after}s")Clean data, better DX, lower price.
| SecQL | SEC API | FMP | Raw EDGAR | |
|---|---|---|---|---|
| Price | Free / $19 | $49/mo | $22/mo | Free |
| Python SDK | ✓ | ✓ | Community | ✕ |
| Pandas support | ✓ | ✕ | ✕ | ✕ |
| Structured JSON | ✓ | ✓ | ✓ | ✕ |
| Rate limit | 60/min | 20/sec | 300/min | 10/sec |
| Historical depth | 15+ years | 30+ years | 5 years | All |
| Setup time | 60 seconds | Minutes | Minutes | Hours |
Start free. Scale when you're ready.
For production apps
For teams at scale
Three steps. No credit card required.
Get your API key
curl -X POST https://api.secql.dev/keys \
-H "Content-Type: application/json" \
-d '{"name": "my-app", "email": "you@example.com"}'Install the SDK
pip install secqlFetch your first data
from secql import SecQL
client = SecQL(api_key="sk_live_...")
print(client.financials("AAPL"))