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:
| Delisted | Available data |
|---|---|
| After 2018 | EOD, Fundamentals, Dividends and Splits |
| After 2021 | All of the above, plus Intraday |
| Before 2018 | EOD 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
delisted
enum
optional
type
enum
optional
fmt
enum
optional
Request Example
https://eodhd.com/api/exchange-symbol-list/US?delisted=1&type=common_stock&api_token=your_api_token&fmt=json
curl --location "https://eodhd.com/api/exchange-symbol-list/US?delisted=1&type=common_stock&api_token=your_api_token&fmt=json"
$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();
}
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)
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")
}
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
| Field | Type | Description |
|---|---|---|
| Code | string | Ticker symbol code |
| Name | string | Company name associated with the ticker |
| Country | string | Country of the exchange |
| Exchange | string | Exchange the ticker was listed on |
| Currency | string | Trading currency |
| Type | string | Instrument type, for example Common Stock, ETF, or FUND |
| Isin | string or null | ISIN code, if available |
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:
| Data | Endpoint |
|---|---|
| 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
curl --location "https://eodhd.com/api/eod/ATVI.US?api_token=your_api_token&fmt=json"
$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();
}
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)
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")
}
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
from
date
required
to
date
required
ex
string
optional
fmt
enum
optional
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
| Field | Type | Description |
|---|---|---|
| exchange | string | Exchange code |
| old_symbol | string | Previous ticker symbol |
| new_symbol | string | New ticker symbol |
| company_name | string | Company name |
| effective | string | Date 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.