6
$\begingroup$

I have seen this post : Central Index Key (CIK) of all traded stocks

But I would like to download the CIKs only for NASDAQ stocks, NYSE stocks etc. I searched online but only managed to find CIKs for Dow Jones and S&P 500.

Any ideas where to get these CIKs ?

Thanks

$\endgroup$
1
  • 1
    $\begingroup$ Beware of most of the solutions below don't handle complex corporate actions. and are based upon stale information. For example, Alcoa demerged its upstream Aluminum operations into a new entity. The original Alcoa then changed its name to Arconic and the upstream operations became Alcoa. Most of the answers below either don't have Arconic or have mixed up the newly minted Alcoa with the old one. $\endgroup$ Commented Sep 17, 2018 at 0:34

8 Answers 8

8
$\begingroup$

NASDAQ provides a list of traded stocks. It is available on their FTP server: ftp.nasdaqtrader.com. There you will find two files of interest: nasdaqlisted.txt and otherlisted.txt. nasdaqlisted.txt lists the NASDAQ stocks. otherlisted.txt contains a field that identifies the exchange, which includes NYSE.

None of these will give you the CIK, but the data on the NASDAQ site will give you the stock symbol and the exchange.

Now you can go to the SEC's site and download either quarterly 10-Q filings, or annual 10-K filings. There are multiple ways of getting this data. The simplest way is to download flat, tab delimited SEC filings from the quarterly prepared zip archives maintained by the SEC. These are located here: http://www.sec.gov/dera/data/financial-statement-data-sets.html.

The file names are YYYYqX.zip where YYYY is the year and X is a single digit indicating the quarter. Unzip the latest one and look for the file named sub.txt. This file contains all of the information relating to the filing of financial statements with the SEC except for the actual line items that make up the balance sheet and the income statements (those are in num.txt, but you don't need them to address the question you asked).

The data in sub.txt contains a field, CIK, which is the one you want. You need to match this against the stock symbol. This isn't as straight forward as one would hope. Within sub.txt is a field named instance that identifies the name of a file that the submitter uploaded to the SEC containing all the line items (it's an XML file, but again you don't need it). The file name is constructed by appending the stock symbol name with the date of submission (formatted as YYYYMMDD), separated by a dash (most of the time). Here's a sample file name for Apple, Inc.: aapl-20091226.xml.

Matching the previously acquired symbol against sub.txt gives you the CIK. You should probably do a case insensitive match.

Note that occasionally, instead of a dash, there may be an underscore character.

Also note the the relationship between stock symbol and CIK is not 1:1. There are often multiple CIKs for a given stock symbol.

$\endgroup$
4
  • $\begingroup$ I upvote your answer, although I think I found a better solution.. see my new answer.. Thanks for the information ! $\endgroup$
    – adrCoder
    Commented Apr 2, 2015 at 14:08
  • $\begingroup$ The data for NASDAQ in the FTP server are under the "SymbolDirectory" directory $\endgroup$ Commented Sep 30, 2019 at 14:41
  • $\begingroup$ This is a great answer @mbmast! While trying this out, I also discovered that the SEC Form 4 reports, as listed in the full index /Archives/edgar/full-index (rather than the quarterly one you mentioned) all seem to have an <issuer> XML tag. That tag contains the CIK, company name, and traded symbols as of that date. So another good option for getting historical mappings $\endgroup$
    – Azmisov
    Commented Aug 3, 2021 at 5:50
  • $\begingroup$ Unfortunately, after further testing, this method is not very reliable. The XML filename is not guaranteed to follow the symbol-date.xml format. Starting around mid-2019, many of the filenames start using a different format altogether, not including the ticker symbol. Lastly, even for those that do follow this format, there's no guarantee it will work. For example: "New Columbia Resources" and "New Concept Energy" will both be prefixed by newc- for the same quarterly filing date; so no guarantees it actually matches the CIK's ticker at all it seems. $\endgroup$
    – Azmisov
    Commented Aug 4, 2021 at 1:23
8
$\begingroup$

The solution to my question can be found at the following webpage :

http://rankandfiled.com/#/data/tickers

For every stock you have on which stock exchange it is being traded, and the CIK (Central index key) which is exactly what I was searching for.

I post it here since it will probably be very useful to many people.

$\endgroup$
2
  • 3
    $\begingroup$ There's some odd stuff in that sheet. Ticker Z is listed as being both Zillow and Z-ii Inc. While they have the correct CIK code for Z-ii inc they have the wrong code for Zillow (0001334814 vs. CIK on SEC 0001617640) $\endgroup$ Commented Oct 14, 2018 at 20:56
  • $\begingroup$ URL returns a 404 $\endgroup$
    – castis
    Commented Jan 22 at 11:30
4
$\begingroup$

I use the following approach to find CIKs for all (read:most) listed companies:

  1. Obtain a list of all stock symbols (tickers).

  2. To minimize unnecessary lookups exclude test symbols and ETFs from your symbol list. Reference the header in the Symbol Directory file(s) you are using.

  3. Take the list of symbols and query the following endpoint for each symbol: https://www.sec.gov/cgi-bin/browse-edgar?action=getcompany&output=xml&CIK=SYMBOL (Replace SYMBOL with a ticker symbol)

    • This endpoint returns XML that includes lots of company information including the CIK. For example when looking up SIRI the following is returned:

<?xml version="1.0" encoding="ISO-8859-1" ?> <?xml-stylesheet type="text/xsl" href="/include/design2.xsl" ?> <companyFilings> <companyInfo> <CIK>0000908937</CIK> <CIKHREF>http://www.sec.gov/cgi-bin/browse-edgar?action=getcompany&amp;CIK=0000908937&amp;owner=include&amp;count=40</CIKHREF> <Location>NY</Location> <SIC>4832</SIC> <SICDescription>RADIO BROADCASTING STATIONS</SICDescription> <SICHREF>http://www.sec.gov/cgi-bin/browse-edgar?action=getcompany&amp;SIC=4832&amp;owner=include&amp;count=40</SICHREF> <businessAddress> [...] </businessAddress> <fiscalYearEnd>1231</fiscalYearEnd> <formerNames> [...] </formerNames> [...] <name>SIRIUS XM HOLDINGS INC.</name> </companyInfo> [...]

  1. Parse the CIK in the returned XML.

  2. Repeat for all symbols in your list.

$\endgroup$
3
$\begingroup$

https://www.sec.gov/files/company_tickers.json is the most up-to-date listing

$\endgroup$
1
$\begingroup$

I developed a RESTful JSON API (https://mapping-api.herokuapp.com/) for this purpose.

You can provide the exchange name, and the API returns all companies listed at the exchange in JSON format. You can also send any CIK, company ticker, or company name, and the API returns the mapping.


Examples

List Companies by Exchange

Request: GET https://mapping-api.herokuapp.com/exchange/:exchange

Replace :exchange at the end of the URL with the exchange you are looking for, e.g. NASDAQ, or NYSE.

You can use regular expressions to retrieve companies listed on different exchanges. For example, if you want to list all companies listed on NASDAQ and NYSE, you can use https://mapping-api.herokuapp.com/exchange/NASDAQ|NYSE

Example: https://mapping-api.herokuapp.com/exchange/NASDAQ

Response:

[
    {
        "cik": "0001099290",
        "ticker": "AAC",
        "name": "Sinocoking Coal & Coke Chemical Industries Inc",
        "sic": "3312",
        "exchange": "NASDAQ",
        "irs": "593404233"
    },
    {
        "cik": "0000006201",
        "ticker": "AAL",
        "name": "American Airlines Group Inc",
        "sic": "4512",
        "exchange": "NASDAQ",
        "irs": "751825172"
    },
    {
        "cik": "0000008177",
        "ticker": "AAME",
        "name": "Atlantic American Corp",
        "sic": "6311",
        "exchange": "NASDAQ",
        "irs": "581027114"
    },
    // cut for brevity
]

Resolve by CIK

Request: GET https://mapping-api.herokuapp.com/cik/:cik

Replace :cik at the end of the URL with the CIK you want to resolve.

Example: https://mapping-api.herokuapp.com/cik/0001318605

Response:

[
    {
        "cik": "0001318605",
        "ticker": "TSLA",
        "name": "Tesla Motors Inc",
        "sic": "3711",
        "irs": "912197729"
    }
]

Removing trailing 0 from the CIK also works. Instead of using 0001318605, you can use 1318605. Same result.

Resolve by Ticker

Request: GET https://mapping-api.herokuapp.com/ticker/:ticker

Replace :ticker at the end of the URL with the ticker you want to resolve.

Example: https://mapping-api.herokuapp.com/ticker/tsla

Response:

[
  {
    "cik": "0001318605",
    "ticker": "TSLA",
    "exchange": "NASDAQ",
    "name": "Tesla Motors Inc",
    "sic": "3711",
    "irs": "912197729"
  },
  {
    "cik": "0000863456",
    "ticker": "WTSLA",
    "exchange": "",
    "name": "Wet Seal Inc",
    "sic": "5621",
    "irs": "330415940"
  }
]

Two companies are returned because WTSLA contains tsla. The API uses regular expressions under the hood allowing complex search queries. If you only want to retrieve exact matches, then use ^ as prefix, and $ as suffix. For example, ^tsla& (see below).

Example (exact match): GET https://mapping-api.herokuapp.com/ticker/^tsla$

Response:

[
  {
    "cik": "0001318605",
    "ticker": "TSLA",
    "exchange": "NASDAQ",
    "name": "Tesla Motors Inc",
    "sic": "3711",
    "irs": "912197729"
  }
]

Resolve by Name

Request: GET https://mapping-api.herokuapp.com/name/:name

Replace :name at the end of the URL with the company name you want to resolve.

Example: https://mapping-api.herokuapp.com/name/Tesla

Response:

[
  {
    "cik": "0001318605",
    "ticker": "TSLA",
    "exchange": "NASDAQ",
    "name": "Tesla Motors Inc",
    "sic": "3711",
    "irs": "912197729"
  }
]

Providing Tesla Motors as name returns the same result. You can use regular expressions here as well.

$\endgroup$
0
$\begingroup$

The site adrCoder cited is a great source of this consolidated "relationship" information. Alternatively, SEC Form 4 (Statement in Changes of Beneficial Ownership) has the issuer name, the CIK and ticker symbol, all in one document. To avail yourself of this, you must use doc4.xml, not doc4.html. The HTML file lacks information present in the XML file (like the CIK). Other SEC forms may also have this information. I think it's important to always look at the XML file and not the HTML file, as the XML file appears to be contain more information.

$\endgroup$
0
$\begingroup$

I had to solve this, too, and it took a while so I'm posting my results hoping that I can save others the time.

NYSE: https://dan.vonkohorn.com/2016/07/03/cik-ticker-mappings-for-nyse-listed-securities/

NASDAQ: https://dan.vonkohorn.com/2016/07/03/cik-ticker-mappings-for-nasdaq-listed-securities/

$\endgroup$
0
$\begingroup$

Edit: the link does no longer work.

CIKs for the NASDAQ and NYSE exchanges can be extracted from the Alpha10X company list, which is accessible via the free demo account in CSV or XML format. Each entity has the following properties:

Id,CIK,LastAcceptanceDateTime,Name,SIC,IndustryDivision,IndustryMajorGroup,IndustryGroup,Industry,FYE,Exchange,Symbol

The list identifies 2061 CIKs with Exchange = "NASDAQ" and 1605 CIKs with Exchange = "NYSE".

$\endgroup$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.