# CMS September 2026 landscape snapshots

Public CMS data prepared for a county lookup for licensed insurance agents. Checked September 30, 2026, America/Los_Angeles. This directory is a static snapshot, not live enrollment availability or a renewal determination.

## Sources and timing

The source archives are linked from the [CMS prescription drug coverage page](https://www.cms.gov/medicare/coverage/prescription-drug-coverage):

| Contract year | Original archive | ReadMe data updated | Source rows | Unique source contract-plan-segments |
| --- | --- | --- | ---: | ---: |
| 2026 | [CY2026 Landscape (202609)](https://www.cms.gov/files/zip/cy2026-landscape-202609.zip) | September 2, 2026 | 138,260 | 5,962 |
| 2027 | [CY2027 Landscape (202609)](https://www.cms.gov/files/zip/cy2027-landscape-202609.zip) | September 22, 2026 | 130,307 | 5,884 |

These source controls include territories. `metadata.json` separately records `scopeRows` and `scopeSegments` for the generated 50-state-plus-DC scope. Its `sha256` hashes identify original ZIP bytes; `csvSha256` identifies the CSV bytes inside each ZIP.

CY2026 is the September 2026 current-year snapshot, not its September 2025 launch snapshot. CY2027 is the initial September 2026 next-year snapshot. The CMS [public announcement](https://www.cms.gov/newsroom/press-releases/medicare-advantage-medicare-prescription-drug-programs-expected-remain-stable-2027) is dated September 28, 2026. Archive internal dates do not establish first public availability. The files were independently retrieved for this analysis September 30.

The source excludes employer-sponsored plans with Plan ID >= 800, Part B-only plans and National PACE plans. It includes sanctioned listings. CMS says source data are subject to change.

## Reproduce

No credentials, network requests or third-party Python packages are used by the generator. Download the two public archives above into a local directory, then from the repository root run:

```sh
python3 scripts/generate-cms-landscape-data.py --source-dir /path/to/cms-archives
node --test scripts/cms-landscape-data.test.mjs
```

The generator requires the verified archive checksums; it rejects changed source bytes. A future CMS revision needs an explicitly reviewed new version, source controls and tests. `--output-dir /path/to/check` can generate a disposable comparison. Identical inputs produce identical JSON bytes. Raw archives are not committed.

## State document schema

`metadata.json` lists the source-derived county names for every state and the URL of its state file. Each `states/ST.json` contains:

```json
{
  "state": "CA",
  "plans": {"2026": [], "2027": []},
  "counties": {"Los Angeles": {"2026": [], "2027": []}},
  "statewide": {"2026": [], "2027": []}
}
```

Each county/year or statewide/year array holds integer indexes into that state's corresponding `plans[year]` array. Every year has a separate index space. Plans are deduplicated within a state and year by full contract-plan-segment identifier and sorted by that identifier. County names and state files are sorted. A plan can appear in multiple counties or states; do not sum state counts to compute national unique plans.

`All Counties` rows are placed only in `statewide`. All such rows in these snapshots are PDPs. County rows are not expanded into a Census county frame, and statewide PDPs are not duplicated into county arrays. The generator rejects unexpected non-PDP `All Counties` records so their interpretation must be reviewed explicitly. A future source could require a revised geographic model.

Alaska has zero county entries and nine statewide PDP listings in each year. DC's county label is `District of Columbia`. The county lists are the union of all source-listed county groups, including SNP and Cost where present. For ordinary MA count comparisons specifically, the observed union is 3,029 county units across 49 states plus DC. Counties that do not appear in the source are not invented. A present county with an empty year array has no listings in that snapshot; it is not a missing download.

## Plan fields

| Field | Meaning |
| --- | --- |
| `id` | Full `Contract Plan Segment ID`; 2026's equivalent header is `ContractPlanSegmentID`. Leading zero plan IDs are preserved. |
| `name` | Source Plan Name. |
| `organization` | Source Organization Marketing Name; not necessarily the legal entity. |
| `parent` | Source Parent Organization Name. |
| `category` | Raw Contract Category Type: `MA`, `MA-PD`, `SNP`, `PDP`, or `Cost`. |
| `planType` | Raw Plan Type. |
| `snpType` | Raw SNP Type, with source `Not Applicable` normalized to an empty string. |
| `premium` | Monthly USD. Consolidated Part C + D for MA-PD/SNP/Cost; Part C premium for MA-only; Part D total premium for PDP. Cost plans often have no applicable consolidated figure, preserved as null. |
| `drugDeductible` | Annual USD Part D deductible; may not apply to every drug tier. |
| `moop` | Annual USD in-network medical Part A/B maximum out-of-pocket. For PFFS the source describes this as combined in/out-of-network MOOP. Cost and MSA figures may be nonapplicable. |
| `hasPartD` | Boolean derived strictly from source Part D Coverage Indicator, not guessed from a name. |
| `sanctioned` | Boolean derived from the snapshot's Sanctioned Plan field; not a current enrollment decision. |

Source currency `Not Applicable` and blanks become JSON `null`, never zero. Dollar symbols, thousands separators and surrounding whitespace are removed; accounting parentheses are parsed as negative amounts. Unexpected nonnumeric tokens cause generation to fail. JSON contains finite numeric values only. Raw names and categorical labels are preserved except the documented non-SNP value. No crosswalk status, enrollment, member attributes, network assertions or drug coverage estimates are added.

## Interpretation

- All counts describe **listed offerings**, including sanctioned entries. Confirm current carrier availability and eligibility before an enrollment decision.
- Ordinary MA includes categories `MA` and `MA-PD` only. SNPs require separate eligibility interpretation. Standalone PDPs and Cost plans are separate categories.
- A county/year median uses one observation per selected listed offering. Exclude `null` from numeric denominators and show the valid count. Medians are unweighted by enrollment. A change in the median is not a matched-plan change or a member cost forecast.
- A $0 plan premium does not mean free Medicare. Medical MOOP is not total annual spending; do not combine it with a drug deductible as a total-cost estimate.
- Missing identifiers, fewer listings or a changed name do not establish nonrenewal, displacement or a required switch. Crosswalks, applicable notices and enrollment evidence are not included.
- Statewide PDPs may be shown beside county results as a separately labeled statewide category. They must not inflate county MA counts.

## Verification

Generation validates source archive hashes, actual contract years, original row and unique-segment controls, duplicate county/segment keys, expected states, and repeated segment attributes. Focused Node tests verify complete geographic references, exact national category totals after cross-state deduplication, Alaska/DC behavior, statewide PDP separation, null versus zero, and independently calculated Los Angeles/San Diego counts and medians. The 3,029 ordinary-MA county union reconciles to 2,236 with fewer listings, 324 unchanged and 469 with more listings.
