Home / Guides / Identifiers & company lists
Identifiers & company lists

List companies by exchange

Get every company and ticker listed on NYSE, Nasdaq, Cboe or OTC with SEC CIKs, using the SecFeed exchange mapping endpoint built on the SEC's daily ticker file.

A universe of listed companies is the starting point for screens, backfills and coverage reports. /v1/mapping/exchange returns every ticker the SEC associates with an exchange, each with its CIK and company name, in one call. The data comes from the SEC's company_tickers_exchange.json, which the SEC refreshes daily.

Setup

import os
import requests
from collections import Counter

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()

Count every exchange

for ex in ["NYSE", "Nasdaq", "CBOE", "OTC"]:
    rows = get("/v1/mapping/exchange", exchange=ex)
    print(f"{ex:7} {len(rows):6,} tickers  {len({r['cik'] for r in rows}):6,} companies")

Output:

NYSE     3,289 tickers   2,600 companies
Nasdaq   4,376 tickers   3,452 companies
CBOE        44 tickers      22 companies
OTC      2,542 tickers   2,033 companies

Each call returns the whole list at once (the NYSE response is about 300 KB), so there is no paging. There are more tickers than companies because preferred shares, warrants, units and second share classes get their own tickers under the same CIK.

The first rows

The SEC's ticker file puts large companies first, so the top of the NYSE list is a recognizable set of large caps:

nyse = get("/v1/mapping/exchange", exchange="NYSE")
for r in nyse[:8]:
    print(f"  {r['ticker']:6} {r['cik']:>8}  {r['name']}")
  BRK-B   1067983  BERKSHIRE HATHAWAY INC
  LLY       59478  ELI LILLY & Co
  JPM       19617  JPMORGAN CHASE & CO
  V       1403161  VISA INC.
  XOM     2115436  ExxonMobil Holdings Corp
  JNJ      200406  JOHNSON & JOHNSON
  MA      1141391  Mastercard Inc
  ABBV    1551152  AbbVie Inc.

Do not rely on that order for ranking. It is the SEC's file order, not a market cap you can sort by.

One row per company

312 NYSE companies have more than one ticker:

multi = Counter(r["cik"] for r in nyse)
print("NYSE companies with more than one listed ticker:", sum(1 for n in multi.values() if n > 1))
NYSE companies with more than one listed ticker: 312

To get one row per company, keep the first ticker per CIK. Because the SEC lists the main class first, this usually picks the common stock:

companies = {}
for r in nyse:
    companies.setdefault(r["cik"], r)
print(len(companies))  # 2600

Putting it to work

A listed universe plus the Filing Query API answers questions like "which of the largest NYSE companies filed an 8-K this month":

ciks = ",".join(str(c) for c in list(companies)[:50])
hits = get("/v1/filings", query=f'cik:({ciks}) AND formType:"8-K" AND filedAt:[2026-10-01 TO 2026-10-13]', size=50)
print(hits["total"])
for f in hits["filings"][:6]:
    print(f"  {f['filedAt']}  {f['ticker']:6} {f['companyName']}")
{'value': 15, 'relation': 'eq'}
  2026-10-13  JPM    JPMORGAN CHASE & CO
  2026-10-13  JPM    JPMORGAN CHASE & CO
  2026-10-13  C      CITIGROUP INC
  2026-10-13  GS     GOLDMAN SACHS GROUP INC
  2026-10-13  UNH    UNITEDHEALTH GROUP INC
  2026-10-13  JNJ    JOHNSON & JOHNSON

Bank earnings season starts mid October, which is why the big banks lead the list. Keep CIK lists to a few hundred values per call; for the whole exchange, loop over chunks.

Other uses:

What "OTC" means here

The OTC list covers companies quoted over the counter that the SEC can match to a filer. It is not a full list of OTC Markets securities: many quoted companies do not file with the SEC at all and do not appear.

Next steps

More identifiers & company lists guides

Run this guide with your own key

500 free API calls a month. Every example on this page works on the free plan.

Get free API key →