Accessing Delisted Stocks Historical Data in FinzData
Delisted stocks are critical for avoiding survivorship bias in backtests. FinzData includes every NYSE and Nasdaq stock since January 2000, with delisted names marked by the '-DELISTED' suffix. Accessing their full history requires a look-back bundle or institutional plan due to data beyond the free 12-month window.
Updated 2026-10-11. Code on this page was run against live FinzData data before publishing.
Why Delisted Stocks Matter in Backtesting
Excluding delisted stocks introduces survivorship bias, inflating strategy performance by only including companies that survived. This distorts risk and return metrics, especially for long-term studies. FinzData mitigates this by preserving full history for all securities, including those that were delisted, acquired, or went bankrupt.
The dataset covers approximately 16,000 stocks since January 2000, ensuring comprehensive coverage of market dynamics over time. This allows researchers to test strategies across full market cycles, including periods of high turnover like the dot-com bust or 2008 financial crisis.
Including delisted names ensures that your universe reflects the actual investable set at any point in history, which is essential for realistic position sizing, turnover modeling, and drawdown analysis.
How FinzData Marks Delisted Stocks
FinzData appends the suffix '-DELISTED' to the ticker symbol of any security that has been delisted from NYSE or Nasdaq. For example, Lehman Brothers appears as 'LEHMQ-DELISTED' in the dataset, preserving its original ticker while marking its status.
This naming convention allows users to easily identify delisted securities in data downloads or API responses without relying on external status flags. The suffix is consistent across all data types, including daily bars, splits, dividends, and fundamentals.
You can screen for delisted stocks by filtering symbols ending in '-DELISTED' when building universes or querying holdings data.
Retrieving Delisted Stock Data via Ticker.history()
To get historical data for a delisted stock, use the Ticker object with the '-DELISTED' suffix. For example, accessing Lehman Brothers' full history requires specifying the adjusted symbol and a sufficient look-back period.
The free plan only provides the last 12 months of daily data, so retrieving multi-year history for delisted names requires a look-back bundle or institutional plan. Attempting to access older data on the free tier results in an HTTP 403 error.
Once entitled, you can request the full history using period='max' to obtain all available daily bars from January 2000 onward.
import finzdata as yf
# Get full history for delisted Lehman Brothers (requires look-back bundle or institutional)
ticker = yf.Ticker("LEHMQ-DELISTED")
history = ticker.history(period="max")
print(history.head())
print(f"Total rows: {len(history)}")Using the Client for Bulk Delisted Data
For workflows requiring multiple delisted stocks or integration with other data types, the FinzData Client provides direct access to daily bars via the prices() method. This is useful when building custom universes or aligning data with macro or fundamentals.
Like the Ticker.history() method, accessing historical data beyond 12 months requires a look-back bundle or institutional plan. The adjust parameter controls whether prices are split- and dividend-adjusted, which is essential for accurate return calculations.
The returned DataFrame includes symbol, date, open, high, low, close, and volume columns, indexed by date, making it straightforward to merge with other time series data.
import finzdata as yf
c = yf.Client()
# Get split- and dividend-adjusted daily history for delisted stock (requires look-back bundle)
df = c.prices("LEHMQ-DELISTED", adjust="all")
print(df.head())
print(f"Date range: {df['date'].min()} to {df['date'].max()}")Including Delisted Stocks in a Backtest Universe
To avoid survivorship bias, your backtest universe should include all active and delisted stocks as of each rebalancing date. One approach is to maintain a master list of all securities ever in the dataset and filter by delisted status using the '-DELISTED' suffix.
At each rebalancing point, include only those symbols that had not yet been delisted. This ensures your simulation reflects the real-time investable set, preventing look-ahead bias from including companies that were already gone.
FinzData’s institutional_ownership() and holders() methods can also help identify when a stock was actively held by institutions, providing additional confirmation of its trading status during a given quarter.
Verifying Data Integrity for Delisted Names
After downloading data for a delisted stock, verify continuity by checking for unexpected gaps in the date index or sudden price jumps unrelated to splits or dividends. FinzData adjusts for corporate actions, so prices should reflect smooth transitions unless affected by delisting events.
Cross-reference the first and last available dates with known delisting timelines from external sources (e.g., SEC filings or exchange notices) to confirm the data aligns with the security’s actual trading history.
For volume, note that trading often declines sharply before delisting; unusually low volume in the final days may indicate impending removal from the exchange, which can be useful for risk modeling.
import finzdata as yf
import pandas as pd
# Needs a look-back bundle or the Institutional plan (free keys get HTTP 403)
ticker = yf.Ticker("LEHMQ-DELISTED")
data = ticker.history(period="max")
# Check for gaps in daily data (should be ~1 trading day gaps)
gaps = data.index.to_series().diff() > pd.Timedelta(days=3)
print(f"Number of gaps > 3 days: {gaps.sum()}")
# Check first and last date
print(f"First date: {data.index.min()}")
print(f"Last date: {data.index.max()}")Questions
Do I need a paid plan to access delisted stock data?
Yes, accessing historical data beyond the last 12 months requires a look-back bundle or institutional plan. The free tier only provides the last 12 months of daily bars, which is insufficient for most delisted stocks that traded for multiple years.
How can I identify delisted stocks in the FinzData dataset?
Delisted stocks are marked by the '-DELISTED' suffix appended to their ticker symbol (e.g., 'LEHMQ-DELISTED' for Lehman Brothers). This convention applies across all data types, including prices, splits, dividends, and fundamentals.
Can I get intraday data for delisted stocks?
Intraday data (1-minute, 5-minute, hourly) for delisted stocks is available with a look-back bundle of 25 years or more, or an institutional plan. Hourly data is included in all bundles, while higher-frequency intervals require longer look-back periods.
Keep going
- Every US stock, delisted included
- Lehman Brothers (delisted) price history
- 13F Holdings API Python Guide
- Accessing CFTC Commitments of Traders Data with FinzData Python
- Migrating from yfinance to FinzData
- Survivorship Bias Free Stock Data Download
- Point-in-Time Fundamentals and Macro Data for Bias-Free Backtesting
Get a free API key See pricing
Data for research, not investment advice.