# Exchange Plan Profile v2: composed ACA marketplace plan brain, rebuilt from the CMS Rate PUF ZIPs

`medicare_silver.fact_exchange_plan_profile_v2` · Insurer negotiated rates · status live · 60,591 rows

The composed "plan brain" for the ACA marketplace, same 35 columns as fact_exchange_plan_profile: attributes (metal, type, on/off exchange, issuer, TIN) from Plan Attributes, premium benchmarks (age 21/40/60 min across rating areas, age-40 max) from the Rate PUF, network name, county footprint, covered-benefit counts and headline cost shares, CMS quality ratings and the issuer's individual-market MLR. Built reproducibly by tools/data_tracker/build_exchange_plan_profile.py (ops/sql/build_fact_exchange_plan_profile.sql, edition v2, #3579) with medicare_semantic.vw_rate_puf_current (the CMS ZIP history) as the Rate input in place of the truncated data.healthcare.gov mirror. Equal to v1 cell for cell in PY2014, 2016 and 2019-2025.

**Grain.** One row per (business_year, plan_id), unique: 60,591 plan-years PY2014-2026 (4,402 / 6,789 / 5,821 / 4,538 / 2,670 / 2,938 / 3,511 / 3,885 / 5,407 / 6,366 / 5,339 / 4,723 / 4,202; Athena 1c070757 and 72c4ad5e, 2026-10-13).

| column | type | meaning |
|---|---|---|
| plan_id | string |  |
| issuer_id | string |  |
| state_code | string |  |
| plan_marketing_name | string |  |
| metal_level | string |  |
| plan_type | string |  |
| market_coverage | string |  |
| on_off_exchange | string |  |
| issuer_tin | string |  |
| network_id | string |  |
| network_name | string |  |
| service_area_id | string |  |
| covers_entire_state | boolean |  |
| n_counties | bigint |  |
| premium_age21 | double |  |
| premium_age40 | double |  |
| premium_age60 | double |  |
| premium_age40_max | double |  |
| n_rating_areas | bigint |  |
| n_benefits_covered | bigint |  |
| n_ehb_benefits | bigint |  |
| pcp_copay | string |  |
| specialist_copay | string |  |
| er_copay | string |  |
| urgent_care_copay | string |  |
| generic_drug_copay | string |  |
| inpatient_coins | string |  |
| quality_overall | int |  |
| quality_medical | int |  |
| quality_member_exp | int |  |
| issuer_company_name | string |  |
| issuer_naic_group_code | string |  |
| issuer_ind_premium_earned | double |  |
| issuer_ind_mlr_ratio | double |  |
| business_year | int |  |

Tools that read it: get_exchange_plan_profile

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