Skip to main content

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 surfaceJintel 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 holdingsinstitutionalHoldings(cik), Entity.topHolders
Form 4 insider tradesEntity.insiderTrades
Exhibit 21 consolidated subsidiariesEntity.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.filings with 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.