Medicare Advantage Enrollment
Description
Every month CMS publishes enrollment in every Medicare Advantage and Part D contract, by plan, state and county (the "CPSC" files). This product rolls that file up to the level an investor uses: parent organization × program × county × month, with the parent's stock ticker where it is a listed company, and a national monthly table per parent with month-over-month and year-over-year change.
The CPSC package is not Medicare Advantage only. It carries stand-alone Part D
prescription drug plans (about 25M enrollees), cost and PACE contracts, and
Medicare Advantage proper (about 35.5M in August 2026). A program column
separates them: MA (local and regional coordinated care, PFFS, MSA), PDP,
COST, PACE, OTHER. Filter to MA for Medicare Advantage share; PDP for
the stand-alone drug plan market.
Suppression. CMS blanks any contract-plan-county cell with fewer than 11 enrollees. About 95% of raw cells are suppressed but they hold under 1% of enrollment. The rollup sums the unsuppressed cells and counts the suppressed plans per parent-county, so a parent's county total is a floor, not an estimate. National totals are unaffected in practice: 35,530,809 MA enrollees in August 2026 against CMS's own published total.
- Source: CMS Monthly Enrollment by Contract/Plan/State/County
(CPSC_Enrollment_Info and CPSC_Contract_Info), cms.gov. Parent → ticker map
curated by Healthparse (
data/reference/ma-parent-tickers.json), every parent string verified against the file. - Refresh cadence: monthly. CMS posts a month's file around the 10th to 14th of that same month (January slips to mid-February); we load on the 2nd of the following month.
- Row count: about 288,000 parent-county-program rows per month; six months loaded (March to August 2026) at the 2026-09-08 export, about 1.73M rows. The national table has about 180 parents per program per month. August 2025 to February 2026 load on the next off-peak run, which also fills the year-over-year columns.
- Coverage: 67% of MA enrollment and 81% of PDP enrollment map to a
ticker; a further 18% of MA enrollment is explicitly classified as not
investable (Kaiser, Blue Cross plans and HCSC, SCAN, Devoted, joint
ventures) so a null ticker on those is a decision, not a gap. Cigna no
longer appears as a parent after selling its Medicare business to HCSC in
- Vintage: derived at export from the latest report month loaded.
Table: ma_enrollment_parent_county_monthly
Snowflake: HEALTHPARSE_DATA.MEDICARE_ADVANTAGE_ENROLLMENT.MA_ENROLLMENT_PARENT_COUNTY_MONTHLY
| Column | Type | Description | Notes |
|---|---|---|---|
report_month |
DATE | First day of the CMS report month. | Key. |
program |
VARCHAR | MA, PDP, COST, PACE, OTHER. |
Key. Filter to MA for Medicare Advantage. |
parent_organization |
VARCHAR | CMS "Parent Organization" string, exactly as filed. | Key. Joins to the ticker map. |
ticker / exchange |
VARCHAR | Listed parent's ticker and exchange, where one exists. | Null for non-profits, mutuals, private and JV parents. |
fips_state_county |
VARCHAR | 5-digit FIPS county code. | Key. Null for out-of-area enrollment (about 4,800 enrollees). |
state / county |
VARCHAR | As published by CMS. | — |
enrollment |
INTEGER | Sum of unsuppressed plan enrollment for this parent, program and county. | A floor: suppressed plans (under 11 each) are excluded. |
suppressed_plan_count |
INTEGER | Plans of this parent in this county whose enrollment CMS suppressed. | Each holds at most 10 enrollees. |
plan_count / contract_count |
INTEGER | Plans and contracts of this parent active in the county that month. | — |
_dataset / _vintage / _exported_at |
VARCHAR | See README. | — |
Table: ma_enrollment_parent_monthly
Snowflake: HEALTHPARSE_DATA.MEDICARE_ADVANTAGE_ENROLLMENT.MA_ENROLLMENT_PARENT_MONTHLY
| Column | Type | Description | Notes |
|---|---|---|---|
report_month / program / parent_organization / ticker / exchange |
As above. | Key is the first three. | |
enrollment |
INTEGER | National enrollment for the parent and program. | — |
enrollment_prior_month / change_mom / pct_change_mom |
INTEGER / NUMERIC | Prior calendar month and the change. | Null when the prior month is not loaded. |
enrollment_prior_year / change_yoy / pct_change_yoy |
INTEGER / NUMERIC | Same month a year earlier and the change. | Null until the 2025 months load. |
plan_count / contract_count / county_count |
INTEGER | Footprint that month. | — |
suppressed_plan_county_rows |
INTEGER | Count of suppressed plan-county cells for the parent. | — |
Example queries (Snowflake)
-- 1. National MA share by listed parent, latest month, with monthly change.
SELECT "parent_organization", "ticker", "enrollment", "pct_change_mom"
FROM HEALTHPARSE_DATA.MEDICARE_ADVANTAGE_ENROLLMENT.MA_ENROLLMENT_PARENT_MONTHLY
WHERE "program" = 'MA' AND "report_month" = (SELECT max("report_month") FROM HEALTHPARSE_DATA.MEDICARE_ADVANTAGE_ENROLLMENT.MA_ENROLLMENT_PARENT_MONTHLY)
ORDER BY "enrollment" DESC LIMIT 20;
-- 2. County share shift: UNH vs HUM in Maricopa County, AZ, by month.
SELECT "report_month", "ticker", "enrollment", "plan_count"
FROM HEALTHPARSE_DATA.MEDICARE_ADVANTAGE_ENROLLMENT.MA_ENROLLMENT_PARENT_COUNTY_MONTHLY
WHERE "program" = 'MA' AND "fips_state_county" = '04013' AND "ticker" IN ('UNH', 'HUM')
ORDER BY "report_month", "ticker";
-- 3. Where a parent is growing fastest: counties with the largest 6-month gain.
WITH first_last AS (
SELECT "fips_state_county", "state", "county",
min_by("enrollment", "report_month") AS first_enr,
max_by("enrollment", "report_month") AS last_enr
FROM HEALTHPARSE_DATA.MEDICARE_ADVANTAGE_ENROLLMENT.MA_ENROLLMENT_PARENT_COUNTY_MONTHLY
WHERE "program" = 'MA' AND "ticker" = 'HUM' AND "fips_state_county" IS NOT NULL
GROUP BY 1, 2, 3)
SELECT *, last_enr - first_enr AS gain FROM first_last ORDER BY gain DESC LIMIT 25;
Known limits
- Suppression makes county totals floors. Under-11 cells are excluded; the count of suppressed plans is provided so a buyer can bound the gap.
- Parent strings are CMS's. Mergers show up when CMS changes the parent string, not on the deal date. The ticker map is maintained by hand.
- Six months of history at launch. August 2025 to February 2026 load on the next off-peak run; year-over-year is null until then.
- Program mix. Stand-alone PDP is in the file; filter
programor the totals will overstate Medicare Advantage.