Map a CIK to ticker, exchange and company profile
Turn SEC CIK numbers into tickers, exchanges, legal names, SIC industry codes, state of incorporation and fiscal year end with the SecFeed mapping and entities APIs.
EDGAR identifies every filer by a CIK (Central Index Key), and every SEC dataset is keyed by it: insider trades, 13F filers, 8-K events, full-text search hits. Before you can show the result to a person, or join it to market data, you usually need the ticker and a clean company profile. Two endpoints cover that:
/v1/mapping/cikreturns every ticker the SEC lists for a CIK, with the exchange./v1/entitiesreturns the EDGAR entity profile: legal name, SIC code and description, state of incorporation, fiscal year end, filer category, addresses and former names.
Setup
import os
import requests
BASE = "https://secfeedapi.com"
HEADERS = {"Authorization": f"Bearer {os.environ['SECFEED_KEY']}"}
def get(path, **params):
r = requests.get(f"{BASE}{path}", params=params, headers=HEADERS, timeout=60)
r.raise_for_status()
return r.json()
One CIK
print(get("/v1/mapping/cik", cik=1045810))
Output:
[{'cik': 1045810, 'name': 'NVIDIA CORP', 'ticker': 'NVDA', 'exchange': 'Nasdaq'}]
The result is a list because one company can have several listed securities.
A batch of CIKs with profiles
for cik in [320193, 1045810, 1067983, 1318605, 2488]:
m = get("/v1/mapping/cik", cik=cik)
e = get("/v1/entities", cik=cik)
print(cik, [x["ticker"] for x in m], m[0]["exchange"] if m else "", "|", e["name"], "|",
e["sic"], e["sicDescription"], "|", e["stateOfIncorporation"], e["fiscalYearEnd"])
Output:
320193 ['AAPL'] Nasdaq | Apple Inc. | 3571 Electronic Computers | CA 0926
1045810 ['NVDA'] Nasdaq | NVIDIA CORP | 3674 Semiconductors & Related Devices | DE 0131
1067983 ['BRK-B', 'BRK-A'] NYSE | BERKSHIRE HATHAWAY INC | 6331 Fire, Marine & Casualty Insurance | DE 1231
1318605 ['TSLA'] Nasdaq | Tesla, Inc. | 3711 Motor Vehicles & Passenger Car Bodies | TX 1231
2488 ['AMD'] Nasdaq | ADVANCED MICRO DEVICES INC | 3674 Semiconductors & Related Devices | DE 1226
Ten calls, about two seconds. A few things worth noticing:
- Berkshire Hathaway has two tickers under one CIK, the A and B share classes. Keep the CIK as your join key and treat tickers as labels.
- Tesla reports Texas as its state of incorporation after reincorporating from Delaware in 2024. The profile reflects the current record.
- SIC codes put NVIDIA and AMD in the same industry, 3674. To list everyone in it, see List companies by sector and industry.
CIKs without a ticker
Most CIKs on EDGAR have no ticker: private companies filing Form D, funds, trusts, individuals who file Form 4 as insiders, and companies that delisted. For those, /v1/mapping/cik returns an empty list while /v1/entities still returns the profile. Fall back to the entity name when you need a label:
def label(cik):
m = get("/v1/mapping/cik", cik=cik)
return m[0]["ticker"] if m else get("/v1/entities", cik=cik)["name"]
What about CUSIP?
The SEC's ticker files do not include CUSIPs. SecFeed learns CUSIPs from 13F information tables, where every holding is reported by CUSIP, and maps them back to issuers. That mapping works from CUSIP to company, so start from a CUSIP. A 13F holding, a 13D cover page or a bond document all give you one. See Map a CUSIP to ticker and CIK.
Caching
Mappings change slowly: tickers change on renames, mergers and listings. The SEC refreshes its ticker file daily and SecFeed follows. For a batch job, cache the results for a day in a dict or a small SQLite table instead of calling for the same CIK twice.