Symbol Change History API
When a publicly traded company changes its ticker symbol — due to a rebrand, merger, SPAC transaction, or corporate restructuring — the old symbol stops working and a new one takes its place. The Symbol Change History API tracks these changes so you can keep your portfolios, watchlists, and historical data in sync.
https://eodhd.com/api/symbol-change-history?from=2026-01-01&api_token={YOUR_API_TOKEN}&fmt=json
(Sign up for free to get an API token)
curl --location "https://eodhd.com/api/symbol-change-history?from=2026-01-01&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/symbol-change-history?from=2026-01-01&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/symbol-change-history?from=2026-01-01&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/symbol-change-history?from=2026-01-01&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)
Try it now (it's free)!
How to use it (YouTube)
The data starts from 2022-07-22 and is updated daily. Only US exchanges are supported for the moment.
The API is available under the All World Extended and All-In-One packages.
Parameters
| Parameter | Required | Description |
|---|---|---|
| api_token | Yes | Your API key |
| from | No | Start date in YYYY-MM-DD format. Default: 12 months before current date |
| to | No | End date in YYYY-MM-DD format. Default: current date |
| fmt | No | Response format: json or csv. Default: csv |
Response Fields
| Field | Type | Description |
|---|---|---|
| exchange | string | Exchange code (currently always US) |
| old_symbol | string | The previous ticker symbol |
| new_symbol | string | The new ticker symbol |
| company_name | string | Full company name at the time of change |
| effective | string | Date when the change took effect (YYYY-MM-DD) |
Example Response
[
{
"exchange": "US",
"old_symbol": "BITF",
"new_symbol": "KEEL",
"company_name": "Keel Infrastructure Corp. Common Stock",
"effective": "2026-04-06"
},
{
"exchange": "US",
"old_symbol": "NBY",
"new_symbol": "SDEV",
"company_name": "Stablecoin Development Corporation Common Stock",
"effective": "2026-04-06"
},
{
"exchange": "US",
"old_symbol": "ACTD",
"new_symbol": "OPAL",
"company_name": "OPAL Fuels Inc. Class A Common Stock",
"effective": "2022-07-22"
}
]
Common Use Cases
- Portfolio reconciliation – detect when a held ticker was renamed and update your records automatically
- Historical data continuity – link old and new symbols to build unbroken price histories across renames
- SPAC tracking – monitor when blank-check companies complete mergers and start trading under new tickers
- Daily sync – poll with from=yesterday to catch any changes since your last update
Data Coverage
| Year | Symbol Changes |
|---|---|
| 2022 (from Jul 22) | 137 |
| 2023 | 261 |
| 2024 | 237 |
| 2025 | 291 |
| 2026 (YTD) | 93 |
On average, US exchanges see around 250 ticker changes per year.