CMS Plan Data: A Freshness Analysis
I pulled 3 months of public CMS plan data (Dec 2025, Jan 2026, Feb 2026) and compared them. The goal being to understand how the upstream data that a plan matching engine depends on actually behaves. What changes, what stays stable, and where the risks are.
Executive Summary
Between December and January, when the new plan year starts
Net loss of 277 plans. The market contracted slightly.
That's 1 in 6 plans changing their display name overnight
CMS hides most enrollment counts in public data
Plan type, SNP status, Part D: nothing changed Jan to Feb
What happens at the plan year transition
Every January 1, Medicare Advantage plans reset. Some terminate, new ones launch, and carriers restructure their portfolios. This year was historically elevated. KFF found that 2.6 million enrollees (13%) had their plan terminated entering 2026, double the rate from 2024. Carriers are pulling back from unprofitable markets. The data shows it clearly: 1,428 plans removed in the Dec to Jan transition (18% of the entire plan universe). But between January and February? Only 5 plans removed. The plan year transition is where the risk is. Mid-year is calm.
December → January
January → February
Plan names change more than you'd expect
1,197 plans changed their display name between December and January. Some changes are small (adding "Plus" or "Sync" to the name). Others are full rebrands. The clearest example: every Cigna-branded plan under contract H0354 became HealthSpring. Same contract, same plan ID, completely different name. This happened because Health Care Service Corporation reorganized their portfolio. If an advisor's tool shows "Cigna Preferred Medicare (HMO)" but the plan is now called "HealthSpring Preferred (HMO)", that's a trust problem. And if any matching logic uses plan names as identifiers, it breaks silently. The only reliable way to track a plan across time is Contract ID + Plan ID. Names are not stable.
Top Organizations by Plan Renames (Dec → Jan)
What you can trust mid-year (and what you can't)
Between January and February, I checked every field for every plan that existed in both months (7,586 plans). The structural attributes (plan type, organization type, SNP status, Part D, EGHP) had zero changes. These are locked at the start of the plan year. But naming fields kept shifting: 40 organization name changes, 9 plan name changes, 4 parent organization changes, 8 contract effective date changes. This means structural data can be cached aggressively between January and December. Display names and org metadata need to be refreshed continuously, even mid-year.
Field-Level Changes (Jan → Feb)
Most enrollment data is hidden, but what's visible matters
CMS masks enrollment counts below a certain threshold for privacy. In the January file, 94.6% of rows show * instead of a number. Only 5.4% (184,687 rows) have real enrollment counts. But those visible rows reveal something important: enrollment is extremely concentrated. The top 10 plan-county combinations are almost all in Los Angeles County and Maricopa County (Phoenix). A single plan (H0524-3) has 178,107 enrollees in LA County alone. Getting a recommendation wrong in LA County affects 100x more people than getting it wrong in a rural county. Data freshness monitoring should be weighted by how many people are affected, not treated the same everywhere.
Enrollment Data Visibility
Top Plan-County Enrollments
Same coverage footprint, fewer plan options
All 56 states and territories maintained Medicare Advantage coverage across all three months. No state lost or gained counties. The geographic footprint is stable. But the number of plan options within those counties shifted. South Carolina lost 31 plans (down 7.4%), Montana lost 20 (down 7.5%), Illinois lost 30 (down 6.9%). Meanwhile Florida gained 8 and California gained 2. The pattern: carriers are retreating from lower-margin states in the midwest and southeast while protecting high-enrollment markets like Florida and California. For beneficiaries in states like South Carolina or Montana, the recommendation set just got smaller, and each remaining plan matters more.
Coverage Overview
Top States by County Coverage (Jan)
Biggest Plan Drops
Dec → Jan plan count decreases
Biggest Plan Gains
Dec → Jan plan count increases
What this means if you're building a plan matcher
Key takeaways for building a reliable, high-accuracy plan matching engine.
Refresh data immediately in January
The plan year transition causes 18% churn. Even a few days of lag means recommending plans that don't exist.
Don't use plan names as identifiers
1 in 6 changed in a single month. Use Contract ID + Plan ID.
Cache structural fields mid-year
Plan type, SNP status, and Part D coverage don't change between January and December.
Keep refreshing display names
Organization names and plan names change even between monthly releases.
Prioritize dense counties
LA County enrollment dwarfs most states. Weight your monitoring by impact.
Public data has limits
94.6% of enrollment is masked. Real enrollment analysis requires unmasked carrier feeds.
What I'd look at next
Future work to strengthen data freshness and matching accuracy.
Automated freshness scoring
A pipeline that ingests each CMS release, scores every plan on how recently its data changed, and flags anything that looks stale before it reaches the matching engine.
Provider directory validation
CMS is building a national provider directory with FHIR APIs for 2027. Cross-referencing plan networks against that directory would catch a second layer of staleness (plan data is fresh but the provider list is months old).
Formulary change tracking
CMS publishes quarterly drug formulary files. Diffing those the same way would catch medication coverage changes that directly affect what seniors pay.
Enrollment trend monitoring
With access to unmasked data, track which plans are gaining or losing members as an early warning signal for plan instability.
Plan year transition playbook
The December to January churn is predictable. A system could pre-stage expected changes and validate the actual CMS data against those expectations on January 1st.