Options Data for US Stocks: End-of-Day and Historical Learn more

Delisted Stock Companies Data

When a company is acquired, goes bankrupt, or otherwise leaves an exchange, its ticker is delisted, but its historical data does not disappear from EODHD. You can still list delisted symbols and pull their end-of-day prices, fundamentals, dividends, and splits. This is essential for survivorship-bias-free backtesting and long-horizon research.

Getting delisted data is a two-step workflow: first find the delisted ticker in the exchange symbol list, then query the regular data endpoints with that ticker.

Scope at a glance. Delisted symbols are retrieved per exchange with the delisted=1 flag; the US list alone returns tens of thousands of symbols across stocks, ETFs, and funds. Once you have a delisted ticker, the standard EOD, Fundamentals, Dividends, and Splits endpoints work exactly as they do for active tickers. Symbol Change History helps when a ticker was renamed rather than delisted (US only).

Data Availability

Which data types are available depends on when the company was delisted:

DelistedAvailable data
After 2018EOD, Fundamentals, Dividends and Splits
After 2021All of the above, plus Intraday
Before 2018EOD only

If you need to confirm coverage for a specific ticker, contact our support team.

Step 1 — Find Delisted Tickers

Use the Exchange Symbol List endpoint with delisted=1. This returns only the delisted (inactive) symbols for the exchange, not the active ones. The exchange code is part of the path, for example US for the combined US exchanges.

GET https://eodhd.com/api/exchange-symbol-list/US?delisted=1

Parameters

api_token string required
Your EODHD API token
delisted enum optional
Set to 1 to return only delisted (inactive) symbols. Allowed values: 0, 1 (Default: 0)
type enum optional
Filter by instrument type. Allowed values: common_stock, preferred_stock, stock, etf, fund
fmt enum optional
Response format. Allowed values: json, csv (Default: json)

Request Example

https://eodhd.com/api/exchange-symbol-list/US?delisted=1&type=common_stock&api_token=your_api_token&fmt=json
(Sign up for free to get an API token)
curl --location "https://eodhd.com/api/exchange-symbol-list/US?delisted=1&type=common_stock&api_token=your_api_token&fmt=json"
(Sign up for free to get an API token)
$curl = curl_init();

curl_setopt_array($curl, array(
    CURLOPT_URL => 'https://eodhd.com/api/exchange-symbol-list/US?delisted=1&type=common_stock&api_token=your_api_token&fmt=json',
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_ENCODING => '',
    CURLOPT_MAXREDIRS => 10,
    CURLOPT_TIMEOUT => 0,
    CURLOPT_FOLLOWLOCATION => true,
    CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
    CURLOPT_CUSTOMREQUEST => 'GET',
));

$data = curl_exec($curl);
curl_close($curl);

try {
    $data = json_decode($data, true, 512, JSON_THROW_ON_ERROR);
    var_dump($data);
} catch (Exception $e) {
    echo 'Error. '.$e->getMessage();
}
(Sign up for free to get an API token)
import requests

url = f'https://eodhd.com/api/exchange-symbol-list/US?delisted=1&type=common_stock&api_token=your_api_token&fmt=json'
data = requests.get(url).json()

print(data)
(Sign up for free to get an API token)
library(httr)
library(jsonlite)

url <- 'https://eodhd.com/api/exchange-symbol-list/US?delisted=1&type=common_stock&api_token=your_api_token&fmt=json'
response <- GET(url)

if (http_type(response) == "application/json") {
    content <- content(response, "text", encoding = "UTF-8")
    cat(content)
} else {
    cat("Error while receiving data\n")
}
(Sign up for free to get an API token)
New to coding? Our ChatGPT assistant can generate code in any language tailored to our API. Simply describe how you want to use our data, and get a working piece of code. Don’t forget to replace the API token with your own.

Try it now (it's free)!

How to use it (YouTube)

Response Example

[
  {
    "Code": "AAAB",
    "Name": "Admiralty Bancorp Inc",
    "Country": "USA",
    "Exchange": "NASDAQ",
    "Currency": "USD",
    "Type": "Common Stock",
    "Isin": null
  },
  {
    "Code": "ATVI",
    "Name": "Activision Blizzard Inc",
    "Country": "USA",
    "Exchange": "NASDAQ",
    "Currency": "USD",
    "Type": "Common Stock",
    "Isin": "US00507V1098"
  }
]

Response Fields

FieldTypeDescription
CodestringTicker symbol code
NamestringCompany name associated with the ticker
CountrystringCountry of the exchange
ExchangestringExchange the ticker was listed on
CurrencystringTrading currency
TypestringInstrument type, for example Common Stock, ETF, or FUND
Isinstring or nullISIN code, if available

Sign up & Get Data

Step 2 — Get the Data for a Delisted Ticker

Once you have the code, query it with the regular data endpoints. Delisted tickers keep their full history up to the delisting date. The most common endpoints are:

DataEndpoint
End-of-day prices/api/eod/{TICKER}
Fundamentals/api/fundamentals/{TICKER}
Dividends/api/div/{TICKER}
Splits/api/splits/{TICKER}
Intraday/api/intraday/{TICKER}

Request Example

End-of-day prices for the delisted ticker ATVI.US (Activision Blizzard, delisted in October 2023 after its acquisition):

https://eodhd.com/api/eod/ATVI.US?api_token=your_api_token&fmt=json
(Sign up for free to get an API token)
curl --location "https://eodhd.com/api/eod/ATVI.US?api_token=your_api_token&fmt=json"
(Sign up for free to get an API token)
$curl = curl_init();

curl_setopt_array($curl, array(
    CURLOPT_URL => 'https://eodhd.com/api/eod/ATVI.US?api_token=your_api_token&fmt=json',
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_ENCODING => '',
    CURLOPT_MAXREDIRS => 10,
    CURLOPT_TIMEOUT => 0,
    CURLOPT_FOLLOWLOCATION => true,
    CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
    CURLOPT_CUSTOMREQUEST => 'GET',
));

$data = curl_exec($curl);
curl_close($curl);

try {
    $data = json_decode($data, true, 512, JSON_THROW_ON_ERROR);
    var_dump($data);
} catch (Exception $e) {
    echo 'Error. '.$e->getMessage();
}
(Sign up for free to get an API token)
import requests

url = f'https://eodhd.com/api/eod/ATVI.US?api_token=your_api_token&fmt=json'
data = requests.get(url).json()

print(data)
(Sign up for free to get an API token)
library(httr)
library(jsonlite)

url <- 'https://eodhd.com/api/eod/ATVI.US?api_token=your_api_token&fmt=json'
response <- GET(url)

if (http_type(response) == "application/json") {
    content <- content(response, "text", encoding = "UTF-8")
    cat(content)
} else {
    cat("Error while receiving data\n")
}
(Sign up for free to get an API token)
New to coding? Our ChatGPT assistant can generate code in any language tailored to our API. Simply describe how you want to use our data, and get a working piece of code. Don’t forget to replace the API token with your own.

Try it now (it's free)!

How to use it (YouTube)

Response Example

[
  {
    "date": "2023-10-13",
    "open": 94.42,
    "high": 94.42,
    "low": 94.42,
    "close": 94.42,
    "adjusted_close": 94.42,
    "volume": 0
  }
]

In Fundamentals, the General.IsDelisted field is true for a delisted company, and General.UpdatedAt reflects the last update around the delisting date. Use this to confirm a ticker is delisted rather than simply inactive today.

Renamed vs Delisted — Symbol Change History

A ticker you cannot find may have been renamed rather than delisted. For example, a company can change its symbol after a merger or rebranding while its data continues under the new code. The Symbol Change History endpoint maps old symbols to new ones over a date range. Only US exchanges are currently supported.

GET https://eodhd.com/api/symbol-change-history?from=2024-01-01&to=2024-03-31&ex=US

Parameters

api_token string required
Your EODHD API token
from date required
Start date in YYYY-MM-DD format, inclusive
to date required
End date in YYYY-MM-DD format, inclusive
ex string optional
Exchange filter, for example US. Only US exchanges are currently supported
fmt enum optional
Response format. Allowed values: json, csv (Default: json)

Response Example

[
  {
    "exchange": "US",
    "old_symbol": "BYN",
    "new_symbol": "PNST",
    "company_name": "Pinstripes Holdings, Inc. Class A Common Stock",
    "effective": "2024-01-02"
  }
]

Response Fields

FieldTypeDescription
exchangestringExchange code
old_symbolstringPrevious ticker symbol
new_symbolstringNew ticker symbol
company_namestringCompany name
effectivestringDate the change took effect, YYYY-MM-DD

Why Delisted Data Matters

Datasets that contain only currently active companies suffer from survivorship bias: failed, acquired, and delisted names are missing, which inflates historical returns and distorts backtests. Including delisted tickers gives a complete, point-in-time universe and more realistic results.

Compare plans and find your fit
Free and paid plans for individual and commercial use
Go to Pricing
Chat