Earnings Anatomy
BlogsAPIPricing

Privacy Policy & Terms of Service

Earnings Anatomy
BlogsAPIPricing

Developer API Documentation

AI-Ready

Programmatically query corporate SEC filers and unredacted structural financial datasets.

llms.txt (LLM Prompt Context)Subscribe for API Access

REST Developer Key Specifications

Base Endpoint URL:

https://earningsanatomy.com/api

Authentication Header:

X-API-Key: ea_live_xxxxxxxxxxxxxxxx

Global Rate Limits:

- Hobby Plan: 10 queries / day (for prototyping) | Pro Plan: 1,000 queries / day.

(Pro plan allows e.g., fetching latest statements for all S&P 500 companies in a single day).

- Burst limits: 10 requests / min (Hobby) or 60 requests / min (Pro).

OpenAPI Specification

Interactive sandboxing lets you discover, inspect, and draft live database JSON queries direct from your active browser session.

Interactive Swagger UI is reserved for active subscribers.
Subscribe for Swagger UI

Quickstart Integration Code

Select your language to copy quickstart code into your workspace or AI prompt.

const axios = require('axios');

const api = axios.create({
  baseURL: "https://earningsanatomy.com/api/v1",
  headers: { 'X-API-Key': "ea_live_your_secret_key_here", 'Accept': 'application/json' }
});

async function main() {
  try {
    // 1. Resolve a ticker to its SEC CIK
    const { data: ticker } = (await api.get("/tickers/GOOG")).data;
    console.log(`${ticker.name} -> CIK ${ticker.cik}`);

    // 2. Fetch company filings index
    const { data: filings } = (await api.get(`/companies/${ticker.cik}/filings`)).data;
    console.log(`Found ${filings.length} filings`);

    // 3. Fetch income statement by accession number
    if (filings.length > 0) {
      const acc = filings[0].accession_number;
      const { data: statement } = (await api.get(`/income-statements/${acc}`)).data;
      console.log(`${statement.form_type} ${statement.end_date.slice(0, 10)}: Net Income $${statement.net_income.toLocaleString()}`);
    }
  } catch (error) {
    console.error('Request failed:', error.response ? error.response.data : error.message);
  }
}

main();

REST API Endpoints

GET
/v1/tickers/{ticker}

Resolve a ticker symbol (case-insensitive) to its SEC CIK identifier. Because corporate filers can list multiple tickers, the company endpoints below are keyed by CIK — call this first to look up a company by ticker.

import httpx

headers = {"X-API-Key": "ea_live_your_secret_key_here", "Accept": "application/json"}
response = httpx.get("https://earningsanatomy.com/api/v1/tickers/GOOG", headers=headers)
data = response.json()["data"]
print(f"{data['name']} -> CIK {data['cik']}")

JSON Response Layout (200 OK)

{
  "status": "success",
  "data": {
    "ticker": "GOOG",
    "cik": "0001652044",
    "name": "Alphabet Inc."
  }
}
GET
/v1/companies/{cik}

Retrieve administrative details of a corporate SEC filer by its CIK. Accepts either zero-padded (0001652044) or bare (1652044) CIK. To look up by ticker, use /v1/tickers/{ticker} first.

import httpx

headers = {"X-API-Key": "ea_live_your_secret_key_here", "Accept": "application/json"}
response = httpx.get("https://earningsanatomy.com/api/v1/companies/0001652044", headers=headers)
company = response.json()["data"]
print(f"Company: {company['name']} | SIC: {company['sic_description']}")

JSON Response Layout (200 OK)

{
  "status": "success",
  "data": {
    "cik": "0001652044",
    "name": "Alphabet Inc.",
    "tickers": ["GOOGL", "GOOG", "GOOGM", "GOOGN"],
    "exchanges": ["Nasdaq", "Nasdaq", "Nasdaq", "Nasdaq"],
    "sic": "7370",
    "sic_description": "Services-Computer Programming, Data Processing, Etc.",
    "currency_code": "USD",
    "fiscal_year_start": "2026-01-01",
    "created_at": "2024-12-26T07:49:17Z"
  }
}
GET
/v1/companies/{cik}/filings

Retrieve a lightweight index of available SEC filings and accession numbers for a company by CIK.

import httpx

headers = {"X-API-Key": "ea_live_your_secret_key_here", "Accept": "application/json"}
response = httpx.get("https://earningsanatomy.com/api/v1/companies/0001652044/filings", headers=headers)
filings = response.json()["data"]
for f in filings[:5]:
    print(f"{f['form_type']} ({f['accession_number']}): {f['start_date'][:10]} to {f['end_date'][:10]}")

JSON Response Layout (200 OK)

{
  "status": "success",
  "data": [
    {
      "accession_number": "000165204426000018",
      "form_type": "10-K",
      "filing_date": "2026-02-05T00:00:00Z",
      "start_date": "2025-01-01T00:00:00Z",
      "end_date": "2025-12-31T00:00:00Z",
      "period_in_months": 12
    }
  ]
}
GET
/v1/income-statements/{accession_number}

Fetch a single income statement directly by its SEC filing accession number (e.g. 000165204426000018) — no company lookup required.

import httpx

headers = {"X-API-Key": "ea_live_your_secret_key_here", "Accept": "application/json"}
response = httpx.get("https://earningsanatomy.com/api/v1/income-statements/000165204426000018", headers=headers)
stmt = response.json()["data"]
print(f"Revenue: ${stmt['total_revenue']:,.0f} {stmt['revenue_units']} | Net Income: ${stmt['net_income']:,.0f}")

JSON Response Layout (200 OK)

{
  "status": "success",
  "data": {
    "accession_number": "000165204426000018",
    "form_type": "10-K",
    "filing_date": "2026-02-05T00:00:00Z",
    "start_date": "2025-01-01T00:00:00Z",
    "end_date": "2025-12-31T00:00:00Z",
    "period_in_months": 12,
    "currency": "$",
    "currency_code": "USD",
    "usd_conversion_rate": 1.0,
    "revenue_units": "millions",
    "total_revenue": 402836.0,
    "cost_of_revenue": 162535.0,
    "gross_profit": 240301.0,
    "total_operating_expenses": 111262.0,
    "operating_income": 129039.0,
    "income_before_taxes": 158826.0,
    "income_tax_expense": 26656.0,
    "net_income": 132170.0,
    "basic_eps": 10.91,
    "diluted_eps": 10.81
  }
}

Privacy Policy & Terms of Service