SEC EDGAR API for CIK lookup: map any ticker to its CIK (2026)
You have a ticker. AAPL, MSFT, whatever. You go to pull its filings from SEC EDGAR, and EDGAR has no idea what a ticker is.
EDGAR files everything under a CIK, a number it assigns to every filer. Before you read a single data point, you have to turn your ticker into that number.
That step is small and dull, and it's a surprisingly common place to break. Here is what a CIK is, why it matters more than the ticker, and how to look one up in a single call.
A CIK, or Central Index Key, is the SEC's permanent 10-digit identifier for a filer, and EDGAR indexes everything by CIK rather than ticker. To map a ticker to its CIK you call /v1/company/{ticker} on the SEC EDGAR API, and you get the CIK plus the company profile back as JSON, with the ten-digit padding handled for you.
GET /v1/company/{ticker} on the SEC EDGAR API and you get the CIK plus the profile as clean JSON. The CIK never changes when a ticker changes, so it is the key you want to store and join on.What is a CIK?
A CIK is the number the SEC uses to identify every entity that files with EDGAR. Companies, funds, and individual insiders all get one. It is assigned the first time they file and it is reused forever after.
The format trips people up. In the SEC's data URLs the CIK is zero-padded to ten digits, so Apple's CIK of 320193 becomes 0000320193. Miss the padding and the request 404s.
And a CIK is not a ticker. EDGAR does not index by ticker at all, which is why every EDGAR workflow starts with the same quiet chore: turn the symbol you have into the CIK the system wants.
Why is ticker-to-CIK lookup such a pain?
Because the SEC makes you build the map yourself. There is no "give me a ticker, get a CIK" endpoint on data.sec.gov. Instead the SEC publishes one big JSON file of every ticker and its CIK, and you download it, search it, and format the result.
Here is the raw version in Python:
import requests
# 1. download the SEC's ticker to CIK map (once, then refresh now and then)
tickers = requests.get(
"https://www.sec.gov/files/company_tickers.json",
headers={"User-Agent": "you@example.com"},
).json()
# 2. find the ticker, then zero-pad the CIK to 10 digits for data.sec.gov
cik = next(r["cik_str"] for r in tickers.values() if r["ticker"] == "AAPL")
cik_padded = str(cik).zfill(10) # "0000320193"
None of that is hard. It is just a file you now own: you host it, you refresh it when new tickers appear, and you remember the padding rule every time. Multiply that by every project and it adds up.
Why developers need the CIK
You need the CIK because it is the only stable handle on a company. Tickers move; CIKs do not.
The clearest example is Facebook. In 2022 it rebranded to Meta and its ticker changed from FB to META. Anyone who had stored "FB" as their key woke up to broken joins. The CIK, 1326801, never moved.
It happens more than you would think. Companies rebrand, tickers get reused by different companies over the years, and one company can trade under two tickers at once, the way Alphabet uses GOOG and GOOGL under the single CIK 1652044.
So the CIK is the right thing to store in your database and to join your datasets on. Resolve the ticker to a CIK once, key everything on the CIK, and your data survives the next rebrand. From there you can pull the annual 10-K financials or the quarterly 10-Q numbers for that CIK without a second thought.
How do you look up a CIK via the SEC EDGAR API?
You call the company endpoint with the ticker and read the CIK off the response. With Edgrapi the company profile lives at /v1/company/{ticker}, and it returns the CIK already, no file to download and no padding to apply.
import requests
r = requests.get(
"https://api.edgrapi.com/v1/company/AAPL",
headers={"X-API-Key": "edgr_your_key"},
)
data = r.json()
print(data["cik"], data["name"]) # 320193 Apple Inc.
That is the whole lookup. Swap AAPL for any ticker, and the same key works across the rest of the API, so once you have the company you can go straight to its fundamentals, ratios, or filings.
The full SEC EDGAR API guide covers the other endpoints, but company resolution is the one you will call first, because everything else keys off the CIK it hands you.
CIK vs ticker: which should you store?
Store the CIK. Show the ticker.
The ticker is what a human recognizes, so keep it around for display. But the CIK is what your joins, caches, and foreign keys should be built on, because it is the value that will not change under you. A row keyed on a ticker is a row waiting to break at the next rebrand.
| Ticker | CIK | |
|---|---|---|
| Assigned by | The exchange | The SEC |
| Changes over time | Yes (rebrands, relisting) | No, permanent |
| Reused for other companies | Yes, over the years | Never |
| What EDGAR indexes on | Not used | Yes |
| Best for | Display | Storing and joining |
Can an AI agent resolve a CIK?
Yes, through MCP, the Model Context Protocol. Edgrapi runs a hosted MCP server at https://api.edgrapi.com/mcp with a get_company tool, so an AI client can turn a ticker into a CIK and then pull that company's data in the same conversation.
Ask an assistant wired to the API "what is Meta's CIK, and how did revenue move last year?" and it resolves the ticker to CIK 1326801 and reads the financials off it, without you writing a lookup step by hand.
Start with one lookup
The fastest way to see this is to resolve a ticker you know. Grab a free key, call the company endpoint on it, and read the CIK that comes back.
The free tier is 100 requests, no card, enough to map your whole watchlist to CIKs and wire up the rest. Point it at https://api.edgrapi.com and look up your first one.
Frequently asked questions
What is a CIK?
A CIK, or Central Index Key, is the SEC's permanent identifier for a company or person that files with EDGAR. It is a number, up to 10 digits, assigned once and reused across every filing that filer ever makes. EDGAR indexes everything by CIK, not by ticker, so the CIK is the key you actually need to pull a company's data. Edgrapi returns it from GET /v1/company/{ticker} so you never look it up by hand.
How do I look up a company's CIK?
You map the ticker to the CIK. The raw way is to download the SEC's company_tickers.json file, find your ticker in it, and zero-pad the CIK to 10 digits for data.sec.gov calls. The one-call way is Edgrapi: GET /v1/company/AAPL with your API key returns Apple's CIK and profile as clean JSON, with no file to download and no padding to remember.
What is the difference between a CIK and a ticker?
A ticker is a short trading symbol that can change or be reused; a CIK is the SEC's permanent id that never changes. When Facebook became Meta its ticker went from FB to META, but its CIK stayed 1326801. That is why the CIK is the safer key to store and join datasets on. Edgrapi gives you both from one company call.
Does a CIK change when a company changes its ticker?
No. The CIK is permanent. A company can rebrand, change its ticker, or relist under a new symbol, and its CIK stays the same across every filing. Facebook to Meta kept CIK 1326801, and Google's GOOG and GOOGL share Alphabet's CIK 1652044. Storing the CIK instead of the ticker means your data does not break when a ticker changes.
How do I get a CIK from the SEC EDGAR API?
Call the company endpoint with the ticker. With Edgrapi, GET https://api.edgrapi.com/v1/company/AAPL and the X-API-Key header returns the CIK plus the company profile as JSON. The SEC's own endpoints need the CIK first and want it zero-padded to 10 digits, so an API that takes a ticker and hands back the CIK saves you the lookup and the formatting.
Is CIK lookup free, and can AI agents do it?
The raw ticker-to-CIK mapping is free from the SEC's company_tickers.json, though you host and refresh it yourself. Edgrapi wraps it in a hosted call with a free tier of 100 requests and no credit card. For AI, Edgrapi runs a hosted MCP server, so an agent can resolve a ticker to its CIK and pull the company's data in one conversation.