# MA/Part D enrollment — plan grain

`medicare_silver.enrollment_monthly_plan` · Medicare Advantage, Part D, Medicaid · status live

CMS monthly MA and Part D enrollment at contract-plan-month grain. Direct guarded queries support plan-level population filters and as-reported parent rollups; SNP status comes from a separate membership source.

**Grain.** One row per (contract_id, plan_id, month) plan-level enrollment count.

| column | type | meaning |
|---|---|---|
| contract_id | string |  |
| plan_id | string |  |
| report_month | date |  |
| organization_type | string |  |
| plan_type | string |  |
| offers_part_d | boolean |  |
| organization_name_raw | string |  |
| organization_marketing_name_raw | string |  |
| plan_name_raw | string |  |
| parent_org_raw | string |  |
| contract_effective_date | date |  |
| enrollment_count | int |  |
| enrollment_lower_bound | int |  |
| enrollment_upper_bound | int |  |
| enrollment_suppression_reason | string |  |
| observed_period | date |  |
| asserted_at | date |  |
| effective_period_start | date |  |
| effective_period_end | date |  |
| cms_vintage_sequence | int |  |
| parse_revision | int |  |
| parser_artifact_hash | string |  |
| source_url | string |  |
| sha256_content_hash | string |  |

Tools that read it: get_enrollment, get_stars_rollup, prove_ma_enrollment_trend

Query it: `query_substrate` with `SELECT ... FROM medicare_silver.enrollment_monthly_plan WHERE ... LIMIT 100`; read `describe_data_source("medicare_silver.enrollment_monthly_plan")` first.
