# S&P 500 Membership & Turnover History, 2004–2025

Release `sp500-membership-turnover-2025-09-30-r1` · Persistfolio · one CSV · one-time purchase, no updates

Historical S&P 500 membership, including the companies that left: 994 continuous membership periods of 978 securities, from 2004-09-30 through 2025-09-30, with how certain each start and end date is, the turnover event behind it, and existing successor links. It is derived, without changing any value, from Persistfolio's certified Historical Cohort Release 1.1 (`historical-cohort-2025-09-30-r1.1`), an independent reconstruction.

## The file

`sp500_membership_turnover_2004_2025.csv` - one row per membership period (a security that left and later rejoined has two rows). Columns, in order:

| Column | Meaning |
| --- | --- |
| `security_id` | Persistfolio's own stable security identifier (`PFHC-` + 10 hex characters). Not a ticker, CUSIP, FIGI or CIK. |
| `security_name` | The latest legal issuer name evidenced during this membership period. A security with two periods can carry two different names. |
| `name_history` | Every distinct name the security carried during membership, oldest first, separated by semicolons. |
| `membership_start_date` | The date this membership period begins, as a reconstructed membership boundary. Not always the index provider’s published effective date - read `start_date_certainty`. |
| `membership_start_basis` | Why the start boundary has this date (same meaning as `start_date_certainty`, in the parent release’s basis vocabulary). |
| `start_date_certainty` | How certain the start boundary is (values below). |
| `index_effective_start_date` | The index-effective date the index provider published for this start, where one is evidenced. Blank otherwise - never filled from a corporate, announcement, SEC, roster or trading date. |
| `start_earliest_known_date` | For a start that is only bounded above by a later anchor: the earliest known date (the announcement date), i.e. the lower side of the window. |
| `membership_start_event_id` | The turnover event that began this period. Blank for securities already in the index when coverage opens on 2004-09-30. |
| `start_event_type` | The type of that event (values below). Blank when there is no start event. |
| `membership_end_date` | The date this membership period ends, as a reconstructed membership boundary. Blank if the security was still a member on 2025-09-30. |
| `membership_end_basis` | Why the end boundary has this date (same vocabulary as the start, plus `STILL_ACTIVE_AT_CUTOFF`). |
| `end_date_certainty` | How certain the end boundary is (values below). |
| `index_effective_end_date` | As `index_effective_start_date`, for the end of the period. |
| `end_earliest_known_date` | As `start_earliest_known_date`, for the end of the period. |
| `membership_end_event_id` | The turnover event that ended this period. Blank if still a member at the cutoff. |
| `end_event_type` | The type of that event (values below). Blank when there is no end event. |
| `confidence` | HIGH / MEDIUM / REVIEW - Persistfolio’s classification of the evidence behind the events bounding this period (REVIEW: weak evidence or a bounded date). |
| `review_status` | CLEAR / REVIEW - REVIEW if an event bounding this period carries an open, disclosed review item. |
| `lineage_relationships` | Successor/lineage links from this security that take effect within this period, separated by ` | ` (values below). Blank if none. |
| `lineage_to_security_ids` | The linked (successor) security_id for each link, in the same positions. |
| `lineage_to_names` | The linked security’s name for each link, in the same positions. |
| `lineage_effective_dates` | The effective date of each link, in the same positions. |

## Read the dates correctly

A membership boundary date (`membership_start_date`, `membership_end_date`) is **not always** the index provider's published index-effective date. It is the date this reconstruction's roster starts or stops including the security. Use the certainty column with it; where a published effective date is evidenced it is in `index_effective_*_date`, and where it is not, that column is blank - it is never filled from a corporate, announcement, SEC, roster or trading date.

| Value | Meaning |
| --- | --- |
| `DATASET_COVERAGE_START_NOT_INDEX_ENTRY` | The company was already a member when coverage begins on 2004-09-30. The start date is the start of the dataset, not the date it entered the index. |
| `EXACT_EVIDENCED` | The boundary is directly evidenced. `index_effective_*` holds the published effective date, which can be one trading session earlier than the boundary (a change effective after the close shows up the next session). |
| `BOUNDED_ABOVE_BY_LATER_ANCHOR` | The exact date is unknown. The boundary is an observed/reconstructed upper bound (a later roster observation), not a claimed exact index-effective date. `*_earliest_known_date` gives the lower bound where known. |
| `ANCHOR_LEADS_PUBLISHED_EFFECTIVE_DATE` | A roster observation captured the change before the later published effective date, which is in `index_effective_*`. |
| `CORPORATE_DATE_NOT_INDEX_EVIDENCED` | The boundary is an evidenced corporate date (e.g. a merger completion); no index-effective date is evidenced. |
| `NOT_INDEX_EVIDENCED_ANCHOR_WINDOW_ONLY` | No source states an index date; the change is only known to fall between two roster observations. |
| `SESSION_NOT_EVIDENCED_TIMING_UNKNOWN` | The effective date is known, but not whether it applied before the open or after the close; the boundary is the earlier possible session. |
| `ANNOUNCEMENT_ONLY_EFFECTIVE_DATE_TBA` | The change was announced with the effective date "to be announced"; `*_earliest_known_date` holds the announcement date. |
| `STILL_ACTIVE_AT_CUTOFF` | No end occurred before the 2025-09-30 release cutoff (end fields blank). |

## Turnover event types

| Value | Meaning |
| --- | --- |
| `ADD_DELETE` | One security enters the index and another leaves it. |
| `ADD_ONLY` | A security is added with no removal in the same event. |
| `DELETE_ONLY` | A security is removed with no addition in the same event. |
| `MERGER_SUCCESSOR` | A merger successor takes the place of a removed constituent. |
| `CORPORATE_SEPARATION` | A spin-off or separation adds a new, distinct constituent. |
| `NAME_CHANGE` | The roster label changes for a continuing index slot (a rename). |
| `RE_ADDITION` | A previously removed company is added again. |

## Lineage links

Where the parent release records a successor or lineage link from a security that takes effect during a membership period, the four `lineage_*` columns list it, with several links in the same order in every column, separated by ` | ` (sorted by date, then relationship, then linked security). 78 of the parent's 93 links fall inside a membership period and appear here; 7 periods carry more than one. The other 15 links take effect after the security had already left the index (for example a successor that joined years later) and are not shown.

| Value | Meaning |
| --- | --- |
| `MERGER_SUCCESSOR` | A merger successor took this security’s place. |
| `CORPORATE_SEPARATION` | A spin-off or separation created the linked security. |
| `ACQUIRED_BY` | This security was acquired by the linked one. |
| `HOLDCO_SUCCESSOR` | A new holding company succeeded this security. |
| `BANKRUPTCY_SUCCESSOR` | The linked security is the successor through a bankruptcy reorganisation. |
| `NAME_REUSE_SUCCESSOR` | A different company later carried the same or a similar name. |
| `SLOT_CONTINUITY_DISTINCT_REGISTRANT` | The index slot continued under a distinct company. |

## What this file does not contain

- No price history, returns or delisting returns.
- No point-in-time ticker history (and no current tickers), FIGI or CUSIP history. Rows are keyed by Persistfolio's `security_id` and names; joining to price data means matching on name and dates yourself.
- No SEC CIK mapping, identity tables, adjudication evidence, reconciliation or certification package.

Need those? The full **Persistfolio Historical Cohort** research package adds dated SEC CIK periods, identity and crosswalk tables, the full lineage file, every identity adjudication, anchor reconciliation and the certification evidence: US$149 Individual / Academic or US$499 Business / Commercial - https://www.persistfolio.com/datasets/historical-cohort

## Release

Fixed, dated release with a 2025-09-30 cutoff; no lifetime updates. `SHA256SUMS` verifies the files (`sha256sum -c SHA256SUMS`). Use is governed by `LICENSE.txt` (one named purchaser; personal, academic or internal research).

Persistfolio is independent and is not affiliated with, sponsored by, endorsed by, or authorized by S&P Global or S&P Dow Jones Indices. S&P 500® is a trademark of S&P Dow Jones Indices LLC and/or its affiliates. This product is an independent research reconstruction and is not an official S&P dataset.
