Corporate credit data for AI agents.
DebtStack.ai Python SDK
Corporate credit data for AI agents.
Why DebtStack?
Equity data is everywhere. Credit data isn't.
There's no "Yahoo Finance for bonds." Corporate debt structures, guarantor chains, and covenant details are buried in SEC filings—scattered across 10-Ks, 8-Ks, credit agreements, and indentures. An AI agent trying to answer "which telecom companies have leverage above 5x?" would need to read dozens of filings, extract the right numbers, and compute ratios manually.
DebtStack fixes this. We extract, normalize, and serve corporate credit data through an API built for AI agents.
Three Things You Can't Do Elsewhere
1. Cross-Company Credit Queries
# Find distressed telecom companies
GET /v1/companies?sector=Telecommunications&min_leverage=5&sort=-net_leverage_ratio
Screen ~300 companies by leverage, coverage ratios, or maturity risk in one call. No filing-by-filing analysis.
2. Pre-Built Entity Relationships
# Who guarantees this bond?
POST /v1/entities/traverse
{"start": {"type": "bond", "id": "893830AK8"}, "relationships": ["guarantees"]}
Guarantor chains, parent-subsidiary hierarchies, structural subordination—mapped and queryable. This data exists nowhere else in machine-readable form.
3. Agent-Ready Speed
< 100ms response time
AI agents chain multiple calls. If each took 30 seconds (reading a filing), a portfolio analysis would take hours. DebtStack returns in milliseconds.
Installation
pip install debtstack-ai
For LangChain integration:
pip install debtstack-ai[langchain]
Quick Start
from debtstack import DebtStackClient
import asyncio
async def main():
async with DebtStackClient(api_key="your-api-key") as client:
# Screen for high-leverage companies
risky = await client.search_companies(
sector="Telecommunications",
min_leverage=4.0,
fields="ticker,name,net_leverage_ratio,interest_coverage",
sort="-net_leverage_ratio"
)
# Drill into the riskiest one
ticker = risky["data"][0]["ticker"]
bonds = await client.search_bonds(ticker=ticker, has_pricing=True)
# Check guarantor coverage on their notes
for bond in bonds["data"]:
guarantors = await client.get_guarantors(bond["cusip"])
print(f"{bond['name']}: {len(guarantors)} guarantors")
asyncio.run(main())
Synchronous Usage
from debtstack import DebtStackSyncClient
client = DebtStackSyncClient(api_key="your-api-key")
result = client.search_companies(sector="Energy", min_leverage=3.0)
What's In The Data
| Coverage | Count |
|---|---|
| Companies | ~300 (S&P 100 + NASDAQ 100 + high-yield issuers) |
| Entities | ~39,000 (subsidiaries, holdcos, JVs, VIEs) |
| Debt Instruments | ~10,000 (bonds, loans, revolvers) with 96% document linkage |
| Bond Pricing | ~4,300 bonds with FINRA TRACE pricing (updated 3x daily) |
| SEC Filing Sections | ~25,000 (searchable full-text) |
| Covenants | ~1,800 structured covenant records |
Pre-computed metrics: Leverage ratios, interest coverage, maturity profiles, structural subordination scores.
Relationships: Guarantor chains, issuer-entity links, parent-subsidiary hierarchies.
API Methods
| Method | What It Does |
|---|---|
search_companies() |
Screen by leverage, sector, coverage, risk flags |
search_bonds() |
Filter by yield, spread, seniority, maturity |
resolve_bond() |
Look up CUSIP, ISIN, or "RIG 8% 2027" |
traverse_entities() |
Follow guarantor chains, map corporate structure |
search_pricing() |
FINRA TRACE bond prices, YTM, spreads |
search_documents() |
Full-text search across credit agreements, indentures |
batch() |
Run multiple queries in parallel |
get_changes() |
Track debt structure changes over time |
Examples
Which MAG7 company has the most debt?
result = await client.search_companies(
ticker="AAPL,MSFT,GOOGL,AMZN,NVDA,META,TSLA",
fields="ticker,name,total_debt,net_leverage_ratio",
sort="-total_debt",
limit=1
)
# Returns structured data in milliseconds, not minutes
Find high-yield bonds trading at a discount
result = await client.search_bonds(
seniority="senior_unsecured",
min_ytm=8.0,
has_pricing=True,
sort="-pricing.ytm"
)
Who guarantees a specific bond?
guarantors = await client.get_guarantors("893830AK8")
for g in guarantors:
print(f"{g['name']} ({g['entity_type']}) - {g['jurisdictio
Tools (6)
search_companiesScreen companies by leverage, sector, coverage, and risk flags.search_bondsFilter bonds by yield, spread, seniority, and maturity.resolve_bondLook up bond details by CUSIP, ISIN, or ticker/description.traverse_entitiesFollow guarantor chains and map corporate structures.search_pricingRetrieve FINRA TRACE bond prices, YTM, and spreads.search_documentsPerform full-text search across credit agreements and indentures.Environment Variables
DEBTSTACK_API_KEYrequiredAPI key for accessing DebtStack servicesConfiguration
{"mcpServers": {"debtstack": {"command": "python", "args": ["-m", "debtstack.mcp"], "env": {"DEBTSTACK_API_KEY": "your-api-key"}}}}