How to get a list of every US stock ticker, delisted ones included

Every US-listed ticker, the dead ones included — which free files stop at today's names, which go back years, and why a ticker is the wrong key to store.

Nobody publishes one official master list. The SEC's free ticker files map today's symbols to CIKs and contain no delisted names at all. Alpha Vantage's free LISTING_STATUS call returns active and delisted US stocks and ETFs as CSV, for any date since 2010. Massive, EODHD and Norgate Data go deeper. Whichever you use, store a permanent identifier beside the ticker, because symbols are reused, renamed and spelled differently by every source.

The short way

Alpha Vantage answers the whole question in two requests on a free key. LISTING_STATUS returns active listings by default and delisted ones with state=delisted, and it returns CSV rather than JSON:

import csv
import io

import requests

URL = "https://www.alphavantage.co/query"

def listing(state, date=None):
    params = {"function": "LISTING_STATUS", "state": state, "apikey": "YOUR_API_KEY"}
    if date:
        params["date"] = date  # any YYYY-MM-DD after 2010-01-01
    return list(csv.DictReader(io.StringIO(requests.get(URL, params=params).text)))

universe = listing("active") + listing("delisted")
# columns: symbol, name, exchange, assetType, ipoDate, delistingDate, status

The date parameter is the part worth noticing. Without it you get the list as of the latest trading day; with it, the endpoint returns the listings as they stood on that date. That is not the same thing as today's list filtered by IPO date, and the difference is the whole of survivorship bias: a list rebuilt from today's names backwards contains nothing that died in between.

Two requests is two of the free key's 25 a day. What it does not give you is anything before 2010, an asset type finer than Stock and ETF, or — in the file served while this page was written — any over-the-counter venue.

What the options are

The regulator's mapping, current names only. SEC EDGAR publishes three JSON files, free and keyless with a User-Agent that names you: company_tickers.json (CIK, ticker, name), company_tickers_exchange.json (the same plus an exchange, with OTC names in it), and company_tickers_mf.json (fund CIK, series, class and ticker). The SEC says it updates them periodically for EDGAR's own search and does not guarantee accuracy or scope. They are the right way to attach a CIK to a live ticker. They are no help with the past: there is no delisted file.

A reference endpoint with the history kept. Massive, formerly Polygon.io, serves /v3/reference/tickers. active defaults to true; set it false for delisted names, each carrying a delisted_utc. A date parameter returns the tickers available on that day, and each record carries cik, composite_figi and share_class_figi where known. Pages hold at most 1,000 rows and chain through next_url, and the free Basic plan is five requests a minute, so a full pull is minutes rather than seconds. Stocks and OTC are separate market values: ask for market=stocks and the OTC tier is not in the answer. Renames live in a separate, experimental ticker events endpoint, which records ticker_change and nothing else, back to September 2003 on paid plans and two years on Basic.

The whole US composite in one call. EODHD serves /api/exchange-symbol-list/US, a composite code returning every US listing across venues — about 51,600 tickers by its own count, of which NASDAQ, NYSE, NYSE Arca and BATS are the exchange-traded part and the rest sit on the OTC tiers and in the mutual-fund listing. Add delisted=1 for the dead ones. Each request is one API call, and the lists are on every plan, including the free one at 20 calls a day. A separate symbol-change-history endpoint covers renames, US exchanges only.

Survivorship-free, delivered as software. Norgate Data is the deep end: its US listed-and-delisted dataset is, in its own words, essentially complete back to late 1992. It is not an API. The data sits in a local database kept by a Windows updater, read through a Python package or a charting plugin, and delisted securities start at the Platinum tier, $630 a year. The two cheaper tiers are current listings only.

Renames and mergers as data

Where a change is announced. A symbol change is a corporate action, and the listing exchange hears of it first. NYSE requires a listed company to give the exchange advance notice, and to announce publicly by press release or another Regulation FD-compliant method, at least ten calendar days before a change of name, symbol or CUSIP takes effect. The exchanges' own records of these events are sold, not posted: Nasdaq's Daily List carries new listings, delistings, name and symbol changes for Nasdaq securities, with history back to 1999, as a monthly subscription; NYSE sells Corporate Actions for NYSE Group Listings, covering name and symbol changes and mergers across NYSE, NYSE American, NYSE Arca and NYSE Texas. Both product pages were read on 9 October 2026. There is no free, complete public feed of symbol changes; every vendor below is reconstructing one.

What each approach returns for a renamed company. Meta is the convenient case: it listed as FB on 18 May 2012 and became META on 9 June 2022, by the dates in Massive's own sample response.

  • Alpha Vantage folds the rename into the current symbol. The active file served on 9 October 2026 had one row for the company, under META, with an ipoDate of 2012-05-18 — the FB listing — and no column saying the symbol was ever different. FB in the same file was an unrelated ProShares buffer ETF listed in 2025, and CPAY still carried the name Fleetcor Technologies where the SEC's ticker file the same day said Corpay. Acquired companies do appear in the delisted file: the one for 10 July 2014 lists H.J. Heinz and NYSE Euronext with a delistingDate and no column for the reason or the acquirer.
  • Massive keeps the history as published, under both symbols, unstitched, and says why: rewriting a 2015 FB print as META would break reconciliation against a broker statement or a filing. The join is the experimental ticker events endpoint, /vX/reference/tickers/{id}/events, which takes a ticker, a CUSIP or a composite FIGI and returns dated ticker_change entries — the only event type it has. Asked with a ticker, it answers for the entity using that ticker now; for a previous holder, get its identifier from the ticker details endpoint first. An acquisition produces no event at all. In Massive's words, a company bought for cash does not become another symbol, it stops: Twitter's last bar was 27 October 2022 and its delisted_utc is 31 October.
  • Norgate Data does the opposite of Massive. On a symbol change the whole price history moves under the new symbol and the old one is removed, and Norgate does not supply prior tickers or company names at all. What survives is its assetid, which it says never changes through renames, exchange moves, delisting or other corporate actions. In a merger with an identifiable survivor, the survivor keeps its assetid and the other company is delisted; in a merger of equals, every original company is delisted and a new entity is created.
  • EODHD keeps renames in a separate symbol-change-history endpoint, US exchanges only, beside its lists rather than inside them.

Where this breaks

There is no neutral list. Every source above is somebody's answer to "what counts as listed", and they draw the line differently. Alpha Vantage's file is US stocks and ETFs on exchanges. The SEC's exchange file includes OTC names. EODHD's composite includes the OTC tiers and mutual funds. Two correct lists of "every US ticker" can differ by tens of thousands of rows before a single one of them is wrong. Decide what your universe is, then filter to it, rather than treating any one vendor's default as the definition.

One share class, three spellings. Berkshire Hathaway's class B is BRK-B in the SEC's file and in Alpha Vantage's CSV, and BRK.B in Massive, which writes class shares with a dot and preferreds with a lower-case p. Nasdaq's own convention table lists the class suffix as .B under CQS and in its integrated platform, and as a bare B after a space under CMS; warrants, units and rights diverge further. The dangerous part is not the difference but the failure mode: Massive's documentation says an unknown symbol returns an empty result rather than an error, so a dash sent where a dot was expected reads as "no data". Normalise punctuation on the way in, once, in one function. Symbology is the longer version of this.

A ticker is a lease. Symbols are reassigned after a delisting, and Massive says plainly that a ticker reused by a different company is possible and that you should check the details for the date range you care about. A table keyed on the bare ticker will concatenate two unrelated companies into one row and nothing will error. Keep a permanent identifier beside every symbol — a CIK for the issuer, a composite FIGI for the instrument — and store the ticker with the dates it was valid. Note the CIK is one level too coarse for share classes: both Berkshire tickers sit under a single CIK in the SEC's file.

A rename splits the history in two. This is the failure a renamed company produces most often. Ask an unstitched source for prices under today's symbol and the series starts on the rename date: ten years of FB vanish and META looks like a June 2022 listing. Ask it under the old symbol and you may get somebody else entirely, because FB has since been reassigned to an ETF. Neither request errors. A stitched source has the opposite gap — the full series under META, and no FB anywhere to match a broker statement or an old filing against. A list assembled from one vendor and prices fetched from another will disagree about whether the old symbol exists at all. Resolve every symbol to a permanent identifier and a date range before you fetch a single price.

A merger is not a rename. A cash acquisition ends a symbol; it does not turn into the buyer's. A stock-for-stock merger ends one symbol while the holder's position carries on in the acquirer at an exchange ratio, and none of the list files on this page has a column for the ratio — that is corporate-actions data, a separate purchase. A delisting date with no reason beside it reads the same for a takeover at a premium and a bankruptcy.

Delisted is not always the end. Norgate's own example is Enron: it traded on the NYSE as ENE until 10 January 2002, then over the counter as ENRNQ until November 2004. An exchange-only list records the first date; a list that includes OTC records the second. Norgate only appends its -YYYYMM suffix, ENRNQ-200411 here, once a security really stops trading, which is also how it keeps a reused symbol from colliding with its previous owner.

ETFs, warrants and units are mixed in, and the type field is coarse. Alpha Vantage has two asset types, so in the file served while this page was written a SPAC's warrants and units sat under Stock beside its class A shares. EODHD's type filter accepts fewer values than its Type field returns — warrants, units and notes cannot be filtered for and have to be selected after the download. The SEC's files split ETFs by legal structure: a standalone trust like SPY is in the exchange file, while an ETF that is one series of a larger trust, such as IVV or VTI, is in the fund file instead. Filter by asset type deliberately, and expect to clean what the filter misses.

Depth is the number that differs most. Alpha Vantage goes back to 2010. Massive's rename log starts in September 2003. EODHD's delisted names carry end-of-day prices only if they left before 2018, with fundamentals, dividends and splits after that and intraday after 2021, and the vendor asks you to contact support to confirm coverage for a specific ticker. Norgate reaches late 1992. Any universe older than your source's floor is survivorship-biased by construction, whatever the list looks like.

If you outgrow this

When the list has to feed a price history, the next page is how to download historical prices in Python — and the same rename problem arrives there as a gap in a series.

When the question is "what was in the index", a list of every ticker is the wrong object. Constituent history is its own dataset, and historical index constituents explains who sells it and why it is licensed separately.

When the identifiers themselves are the problem, CUSIP, ISIN, FIGI and the rest sets out which registry covers what, and which of them costs money to use.

The rest of the field is in market data APIs.

The tools that do this

In the order this page recommends trying them. Paid placement does not affect this order.

  1. Alpha Vantage

    One free CSV call for active listings and one for delisted, as of any date after 2010. US stocks and ETFs, in two asset types only.

    The API most people's first script talks to — free key, wide coverage, hard rate limits.

    $49.99/moFree tier

  2. SEC EDGAR

    Free, keyless JSON mapping today's tickers to CIKs, OTC included. No delisted names, and ETFs split across two files by legal structure.

    Every US filing since 1994, free and keyless — the limit is ten requests a second.

    FreeFree tier

  3. Massive

    A paged tickers endpoint with active=false, a point-in-time date, FIGIs and a delisting timestamp. Free at five calls a minute.

    Full-tick US equities, options and futures from a direct exchange feed.

    $29/moFree tier

  4. EODHD

    One request returns the whole US composite, OTC and funds included, and a second with delisted=1 returns the dead. One call each.

    End-of-day and fundamentals for 60+ exchanges worldwide, at a hobbyist price.

    $19.99/moFree tier

  5. Norgate Data

    Delisted US securities essentially complete back to late 1992, renames stitched into one series. Windows only, from $630 a year.

    Survivorship-bias-free end-of-day history with delisted stocks and index constituents.

    $150/yr

FAQ

Is there an official list of every US ticker?

Not one that covers the dead. The SEC publishes ticker-to-CIK files for EDGAR's own search and says it does not guarantee their accuracy or scope, and they hold current associations only. Each exchange publishes its own listings. A list that includes delisted names is always a vendor's reconstruction, and the vendors disagree at the edges — which is why the depth of their delisted history is the number to compare.

Can I get delisted tickers for free?

Yes, within limits. Alpha Vantage's LISTING_STATUS call returns delisted US stocks and ETFs on the free key, for any date after 1 January 2010. Massive's free Basic plan serves the same tickers endpoint with active=false, at five requests a minute. EODHD's free package includes the exchange ticker lists at 20 calls a day. None of the three reaches the 1990s; that is what Norgate Data's paid tiers sell.

What should I use as the key instead of the ticker?

Something that survives a rename and is never reassigned. A CIK identifies the filer, so it is one value for both Berkshire Hathaway share classes. A composite FIGI identifies the instrument in a market, and a share-class FIGI the class across markets. Store the ticker as an attribute with the date range it was valid for, and join on the identifier.

Why does a ticker I know exists come back empty?

Usually punctuation. Massive writes share classes with a dot, BRK.A, where the SEC's file and Alpha Vantage's CSV write BRK-A, and Massive's documentation says an unknown symbol returns an empty result rather than an error. The other common cause is that the list was filtered to active listings by default and the name has since been delisted or renamed.

Sources

  1. Alpha Vantage API Documentation — Listing & Delisting Status — Alpha Vantage, read
  2. Accessing EDGAR Data — CIK, ticker, and exchange associations — U.S. Securities and Exchange Commission, read
  3. All Tickers — Stocks REST API — Massive, read
  4. Ticker Events — Stocks REST API — Massive, read
  5. What does Massive do with delisted tickers? — Massive, read
  6. How does Massive handle ticker changes and acquisitions? — Massive, read
  7. Why are ticker symbols with dashes not showing in Massive's system? — Massive, read
  8. Exchanges API — Supported Exchanges and Ticker Lists — EODHD, read
  9. Delisted Stock Companies Data — EODHD, read
  10. Norgate Data FAQ — Norgate Data, read
  11. CQS Symbol Convention — Nasdaq, Inc., read
  12. Daily List — Product Description — Nasdaq, Inc., read
  13. Corporate Actions for NYSE Group Listings — New York Stock Exchange, read
  14. Corporate Actions, Market Watch & Proxy Compliance — New York Stock Exchange, read

The catalogue next door

This page names a handful of cards. The rest of them are in Stock Market Data APIs, each filled in against the same schema, with the fields to narrow it yourself.

Last updated . Corrected in place: this is a reference page, not a dated post.

Report an error on this page

Quote the line and say what it should be.

The vendor’s page, filing or documentation that says otherwise.

Only if you want to hear back. Never published.

Read by a person. It fixes a fact and moves nothing else.

Anything else — a question this page leaves open, a tool it should be compared with? Write to feedback@stockmarketstack.com.