Quick jump:
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
curl --location "https://eodhd.com/api/symbol-change-history?from=2026-01-01&api_token={YOUR_API_TOKEN}&fmt=json"
$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();
}
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)
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") }
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.