Guide · US SEC Filings & Financial Data API

Find a public company's EIN

For a company that files with the SEC, EDGAR's company data includes the EIN the company gave when filing. Find the company's CIK with GET /v1/sec/companies/search (by ticker or by name with q), then read ein from GET /v1/sec/companies/{cik}; Apple Inc. (CIK 0000320193), for example, returns 942404110. To go the other way, GET /v1/resolve?scheme=US-EIN&value=94-2404110 returns the company. Private companies generally have no public source for their EIN: the IRS keeps tax information confidential and gives a business its EIN only after verifying that the caller is authorised.

By New Odyssey · Published · Markdown

What an EIN is

The IRS describes it this way: "An EIN is a federal tax ID number for businesses, tax-exempt organizations and other entities." It has nine digits and is usually written XX-XXXXXXX. An EIN identifies a taxpayer, not a security: a company's ticker and its SEC Central Index Key (CIK) are separate identifiers, and a corporate group can have many EINs, one for each legal entity.

Look up an EIN by ticker, name or CIK

  1. Find the CIK. ?ticker=AAPL is an exact, case-insensitive match and returns a list, because a ticker can briefly be shared during a reorganisation. ?q=apple is a fuzzy name search that returns ranked candidates, so check the name and CIK before you use one.
  2. Read the company profile. ein holds the nine digits as EDGAR publishes them, or null when the filer gave none or the value is not a valid EIN.
By ticker
curl -s "https://api.olympus.new-odyssey.com/v1/sec/companies/search?ticker=AAPL" \
  -H "X-API-Key: $OLYMPUS_API_KEY"
By name
curl -s "https://api.olympus.new-odyssey.com/v1/sec/companies/search?q=apple&limit=5" \
  -H "X-API-Key: $OLYMPUS_API_KEY"
Company profile by CIK
curl -s "https://api.olympus.new-odyssey.com/v1/sec/companies/320193" \
  -H "X-API-Key: $OLYMPUS_API_KEY"
200 OK (abridged)
{
  "data": {
    "cik": "0000320193",
    "name": "Apple Inc.",
    "primary_ticker": "AAPL",
    "state_of_incorporation": "CA",
    "ein": "942404110",
    "entity_id": "org_…",
    "identifiers": [
      { "scheme": "OLY-US-SEC-CIK", "value": "0000320193", "method": "published", "confidence": 1, "source": { … } },
      { "scheme": "US-EIN", "value": "942404110", "method": "published", "confidence": 1, "source": { … } }
    ],
    "links": { "sec": "https://www.sec.gov/cgi-bin/browse-edgar?action=getcompany&CIK=0000320193", … },
    "provenance": { "source_url": "https://data.sec.gov/submissions/CIK0000320193.json", … }
  },
  "meta": { "datasets": [ … ] }
}

provenance.source_url is the SEC's own submissions record for the company, so you can check the value at the source. The identifiers list appears once the company's identifiers are registered; until then entity_id is null and the list is empty, but ein is still returned.

ein_lookup.py
import os
import requests

API = "https://api.olympus.new-odyssey.com"
HEADERS = {"X-API-Key": os.environ["OLYMPUS_API_KEY"]}

def ein_for(*, ticker: str | None = None, name: str | None = None) -> list[dict]:
    """EINs EDGAR publishes for the companies matching a ticker or a name."""
    params = {"ticker": ticker} if ticker else {"q": name, "limit": 5}
    r = requests.get(f"{API}/v1/sec/companies/search", params=params, headers=HEADERS, timeout=30)
    r.raise_for_status()
    out = []
    for match in r.json()["data"]:
        c = requests.get(f"{API}/v1/sec/companies/{match['cik']}", headers=HEADERS, timeout=30)
        c.raise_for_status()
        company = c.json()["data"]
        out.append({"cik": company["cik"], "name": company["name"], "ein": company["ein"]})  # ein may be None
    return out

print(ein_for(ticker="AAPL"))
print(ein_for(name="apple"))  # name search returns candidates; check the CIK and name

From an EIN to the company

The shared identifier registry resolves an EIN, in any common format, to the entity it is published for, with its CIK and the records other Olympus APIs serve for it:

Resolve an EIN
curl -s "https://api.olympus.new-odyssey.com/v1/resolve?scheme=US-EIN&value=94-2404110" \
  -H "X-API-Key: $OLYMPUS_API_KEY"

No match answers 404 ENTITY_NOT_FOUND. Only identifiers a source publishes are registered; nothing is matched on name. See Identifiers and entities.

What this does and doesn't cover

  • SEC registrants only. Companies, funds and other entities that file with the SEC, as listed in EDGAR's submissions data. The EIN is the one the filer supplied to EDGAR; we check that it has nine digits and a prefix the IRS assigns, but don't otherwise verify it.
  • Not every filer has one in EDGAR. When EDGAR has no EIN for a filer, or one that is not a valid EIN, ein is null.
  • One EIN per registrant. The EIN belongs to the filing entity. Subsidiaries that don't file with the SEC are not covered.
  • From an AI agent: the MCP tools don't return the EIN today. Agents can call the REST endpoints above with the same API key.

Why private companies' EINs are generally not public

EINs are issued by the IRS, and the IRS treats tax information as confidential: "IRC Section 6103 generally prohibits the release of tax information by an IRS employee." Nothing requires a private company to publish its EIN, so for most private companies no public dataset contains it.

  • Your own business: the IRS suggests looking at the EIN notice it issued, past tax returns, your bank or the agencies that issued your licences, and otherwise calling its Business and Specialty Tax Line, where it will "verify your identity and provide the number over the phone if you're authorized to receive it."
  • A supplier or customer: ask them for it.
  • Tax-exempt organisations: the IRS publishes the Exempt Organizations Business Master File Extract, whose records are sorted by EIN, and its Tax Exempt Organization Search tool.

Data from SEC EDGAR. Olympus is not affiliated with or endorsed by the U.S. Securities and Exchange Commission or the IRS.

Sources