The S&P 500 (ticker GSPC.INDX, also quoted as $SPX) tracks 500 of the largest companies listed on US exchanges and is the most-watched equity benchmark in the world. But the index you see today is not the index of five, ten or twenty years ago — constituents are added and removed continually. If you backtest a strategy against today’s members, the companies that were dropped along the way simply vanish from your dataset. That is survivorship bias, and it quietly inflates almost every naive historical study of the index.

EODHD’s S&P 500 historical constituents data fixes this. We track every membership change, so you can reconstruct the index exactly as it stood on any past date and run clean, survivorship-bias-free research — all from a single Fundamental Data API call, no extra add-on required.

What you get

Query the index ticker in the INDX exchange — for the S&P 500 that is GSPC.INDX — and the response returns up to three sections:

  • Components — the current constituents, each with sector, industry and index weight.
  • HistoricalTickerComponents — the full membership log: every ticker that has been in the index, with the dates it joined and left.
  • HistoricalComponents — point-in-time snapshots of the exact index membership on each historical change date (added with the historical=1 parameter).

Current constituents

Add the filter parameter to request a single section. The Components section returns the 503 current members with their live index weights:

https://eodhd.com/api/fundamentals/GSPC.INDX?api_token={YOUR_API_TOKEN}&fmt=json&filter=Components
{
  "0": {
    "Code": "NVDA",
    "Exchange": "US",
    "Name": "NVIDIA Corporation",
    "Sector": "Technology",
    "Industry": "Semiconductors",
    "Weight": 0.0793
  },
  "1": {
    "Code": "AAPL",
    "Exchange": "US",
    "Name": "Apple Inc.",
    "Sector": "Technology",
    "Industry": "Consumer Electronics",
    "Weight": 0.0674
  }
}

Full membership history

The HistoricalTickerComponents section is the heart of the dataset — every ticker that has ever appeared in the index, with the date it joined, the date it left, and whether it has since been delisted. Over 800 tickers are tracked for the S&P 500 alone.

https://eodhd.com/api/fundamentals/GSPC.INDX?api_token={YOUR_API_TOKEN}&fmt=json&filter=HistoricalTickerComponents
{
  "0": {
    "Code": "A",
    "Name": "Agilent Technologies Inc",
    "StartDate": "2000-06-05",
    "EndDate": null,
    "IsActiveNow": 1,
    "IsDelisted": 0
  },
  "1": {
    "Code": "AAL",
    "Name": "American Airlines Group",
    "StartDate": "2015-03-23",
    "EndDate": "2024-09-23",
    "IsActiveNow": 0,
    "IsDelisted": 0
  },
  "2": {
    "Code": "LEH",
    "Name": "Lehman Brothers Holdings Inc",
    "StartDate": null,
    "EndDate": "2008-09-16",
    "IsActiveNow": 0,
    "IsDelisted": 1
  }
}

Each entry carries these fields:

  • Code and Name — the ticker symbol and company name.
  • StartDate — the date the ticker joined the index.
  • EndDate — the date it was removed, or null if it is still a member.
  • IsActiveNow — 1 if it is a current member, 0 otherwise.
  • IsDelisted — 1 if the security has since been delisted, 0 otherwise.

The Lehman Brothers row above is exactly the kind of record survivorship-biased datasets throw away — and exactly the kind you need to model the 2008 financial crisis honestly.

Point-in-time snapshots

Need the full membership as it stood on a given day rather than a join/leave log? Add historical=1 with a from and to date range and the response includes a HistoricalComponents section — a snapshot of the index members on each date within the range on which the membership changed:

https://eodhd.com/api/fundamentals/GSPC.INDX?historical=1&from=2015-01-01&to=2015-12-31&api_token={YOUR_API_TOKEN}&fmt=json
{
  "2015-06-30": {
    "0": {
      "Date": "2015-06-30",
      "Code": "AIZ",
      "Exchange": "US",
      "Name": "Assurant, Inc.",
      "Sector": "Financial Services",
      "Industry": "Insurance - Property & Casualty"
    },
    "1": {
      "Date": "2015-06-30",
      "Code": "MNST",
      "Exchange": "US",
      "Name": "Monster Beverage Corp",
      "Sector": "Consumer Defensive",
      "Industry": "Beverages - Non-Alcoholic"
    }
  }
}

Coverage and history depth

For the S&P 500 we record every membership change since 2008, so point-in-time reconstruction from 2008 onward is complete and free of survivorship bias, while join dates for long-standing members reach further back into the index’s history. In total more than 800 tickers are tracked, against 503 members today.

The same membership history is also available for the wider S&P family — S&P MidCap 400 (MID.INDX), S&P SmallCap 600 (SML.INDX) and S&P 100 (OEX.INDX) — while current constituents are provided for all major indices worldwide.

Need historical index weights? The Indices API on Marketplace

The Fundamental Data API tells you who was in the index and when. If you also need how much each name weighed on every date, our premium Indices Historical Constituents Data API on the EODHD Marketplace delivers daily weighted snapshots — up to 12 years of history across the S&P 500, 400, 100 and 600, the Dow Jones and 20 key industry indices — ideal for accurate index replication, factor research and attribution.

Get started

S&P 500 historical constituents are included with any plan that has the Fundamental Data API. Grab your free API key, then head to the Fundamentals API documentation for the full field reference and more examples.

Comments

  1. Itay Ben Dan

    The data you have is outdated, The last constituents (Tickers) removed are (‘AVP’, ‘2020-01-03’),
    (‘WCG’, ‘2020-01-23’),
    (‘FII’, ‘2020-01-31’)

  2. Holly R

    I need a specific list of data from the S&P 500 2007 company list. Is it possible for you to provide me with this?