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 to ticker mapping from a curated Healthparse map, with 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: 13,236,785 rows in the county rollup and 15,197 in the national table. Months loaded run 2023-01 to 2026-02 and 2026-03 to 2026-08. March 2025 is absent: CMS publishes no CPSC package for that month (see Known limits).
  • 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 for the first 12 months of the series, and for March 2025 and March 2026, whose comparison month is the missing March 2025 file.
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.
  • March 2025 is missing. CMS publishes no CPSC package for that month at any URL; the link CMS documents for it redirects to an unrelated contract-summary file. Year-over-year breaks for both March 2025 and March 2026, and for any 12-month rolling window that touches March 2025. Treat that month as absent rather than zero.
  • Program mix. Stand-alone PDP is in the file; filter program or the totals will overstate Medicare Advantage.