SEC EDGAR API alternative for AI agents
SEC EDGAR is the canonical source for US public-company filings. The SEC publishes a full-text filings index, XBRL company-facts datasets, Form 13F holdings, and Exhibit 21 subsidiary lists — all free, all under a "fair access" rate limit (10 req/sec per IP), all in formats designed for Cold-War-era humans rather than LLMs.
Jintel re-publishes the same EDGAR data through a typed GraphQL schema and an MCP tool catalog. Same authoritative source, agent-friendly interface.
What's covered
| EDGAR surface | Jintel field |
|---|---|
| Full-text filings index (10-K, 10-Q, 8-K, Form 4, S-1, …) | Entity.regulatory.filings, Entity.periodicFilings, Entity.earningsPressReleases |
| Form 13F institutional holdings | institutionalHoldings(cik), Entity.topHolders |
| Form 4 insider trades | Entity.insiderTrades |
| Exhibit 21 consolidated subsidiaries | Entity.subsidiaries |
| XBRL companyfacts (10+ years of historical financials) | Entity.financials (yfinance primary, EDGAR XBRL fallback) |
| Segment / product / geography revenue (XBRL) | Entity.segmentedRevenue, Entity.concentration |
Why agents use Jintel instead of EDGAR direct
- Typed, not XML. EDGAR ships filings as
.htm/.xml/.xbrl. Jintel parses them server-side and returns typed records (type: "10-K",filedAt: "2024-11-08",accessionNumber, …) ready for an LLM to reason over. - Single-query fan-out. "Latest 10-K + most recent 13F holders + Exhibit 21 subsidiaries + last 5 8-K filings" is one GraphQL query. EDGAR direct: ~6 separate REST calls + custom XBRL parsing for the financials.
- Rate limit handled centrally. Jintel respects the 10 req/sec EDGAR limit globally; you don't burn it. Stale-cache fallback returns last-known-good data on transient EDGAR outages.
- Cross-source joins. Pair
Entity.regulatory.filingswith market data, news, sanctions, or government contracts — all in one schema. - MCP-ready. Filings surfaces are MCP tools on the Jintel MCP server. Claude Desktop, Cursor, Continue can call them natively.
Example: counterparty due-diligence in one query
query Counterparty($ticker: String!) {
entityByTicker(ticker: $ticker) {
name
regulatory {
filings(filter: { types: [TEN_K, TEN_Q, EIGHT_K], limit: 5 }) {
type
filedAt
accessionNumber
url
}
}
topHolders(filter: { limit: 10 }) {
filerName
sharesHeld
valueUsd
}
subsidiaries {
name
jurisdiction
}
insiderTrades(filter: { limit: 10 }) {
insiderName
role
transactionCode
sharesAfter
tradedAt
}
financials {
income(filter: { periodTypes: ["annual"], limit: 3 }) {
period
revenue
netIncome
}
}
}
}
One round trip. EDGAR-direct equivalent: roughly 15+ HTTP calls plus client-side XBRL parsing for the financials.