Provider Change Events
Description
One row per healthcare-provider change event, unified across 7 federal archive-and-diff sources into a single
append-only table with an event_type discriminator. Where the other
Healthparse products describe who a provider is, this one tells you what
just changed — a new physician enumerated in your territory, a provider
newly billing Medicare, an address change, a deactivation, a hospital
ownership change, a new lab certificate, a mammography-facility
certification change, or a hospital equipment-purchase jump. Every event is
observational — a dated record that a specific fact changed between two
published federal file versions — never an inference about why.
Events are derived by diffing successive releases of each source file
(every release is retained, so diffs are exact and repeatable), and
each event carries its source file family, the source_vintage (which
file release produced it), and a dedupe_key that is stable across
re-ingests.
- Source: CMS (data.cms.gov, download.cms.gov, downloads.cms.gov) and FDA (fda.gov) — 7 file families, per-type table below.
- Refresh cadence: by source — twice-weekly (Tue/Fri), weekly (Wed), and quarterly ingest groups.
- Row count: 297,204 (2026-08-29 export). Weekly volume since launch has run between 35,000 and 85,000 events in normal weeks, depending on which source files were released; the per-type table below is from the same 2026-08-29 export.
- Vintage: 2026-08-28 (most recent ingest in the 2026-08-29 export).
- Event-date range: 2005-06-13 → 2026-08-27, plus one ownership-change row dated 2026-10-31: the CMS CHOW file publishes effective dates, and a change can be filed ahead of its effective date. Registry events carry the enumeration and deactivation dates NPPES itself records (back to 2005); ownership changes run back to 2016; the diff-derived types begin at the 2026-07 baseline.
The 11 event types
event_type |
What it means | Source agency & file | Cadence | Rows (this export) |
|---|---|---|---|---|
new_enumeration |
An NPI newly appeared in the NPPES registry — a brand-new provider or organization. | CMS NPPES weekly incremental V2 (download.cms.gov) | Weekly | 121,209 |
address_change |
An active NPI's practice address changed. details carries the full old/new address pair. |
CMS NPPES weekly incremental V2 | Weekly | 65,553 |
deactivation |
An NPI was deactivated (retirement, death, merger, revocation — NPPES does not publish the reason). | CMS NPPES weekly incremental V2 | Weekly | 19,755 |
ownership_change |
A Medicare-certified facility changed owners. Hospital/SNF rows come from the CMS CHOW file (buyer + seller CCN/NPI/org in details); HHA/hospice rows are an All-Owners-file proxy diff. |
CMS Change of Ownership (CHOW) + All-Owners files (data.cms.gov) | Quarterly | 14,471 |
capex_jump |
A hospital's cost report shows major movable-equipment purchases ≥ $1M and ≥ 2× the prior fiscal year, which must itself be positive (rule tightened 2026-09-08). Purchase dollars by asset class in details. See the companion Hospital Capex Signals product for the enriched slice. |
CMS HCRIS Worksheet A-7 Part I (downloads.cms.gov) | Quarterly | 4,277 |
newly_billing |
An NPI newly appeared in (or added a capability to) the CMS Order & Referring file — it can now order/refer for Part B, DME, HHA, PMD, or hospice. The earliest "actively in the Medicare game" signal. | CMS Order and Referring file (data.cms.gov) | Twice-weekly (Tue/Fri) | 23,965 |
enrollment_pending |
An NPI appeared on CMS's Pending Initial Logging & Tracking list (physician or non-physician) — a Medicare enrollment application is in process. The earliest pre-enrollment signal. | CMS PILT files, physician + non-physician (data.cms.gov) | Weekly | 16,641 |
new_lab_certificate |
A new CLIA laboratory certificate appeared in the Provider of Services file. Certificate type (waiver → compliance/accreditation) in details. |
CMS POS Clinical Laboratories / CLIA (data.cms.gov) | Quarterly | 27,827 |
lab_cert_upgrade |
An existing lab's CLIA certificate type moved up-rank (e.g. waiver → accreditation) — the lab can now run more complex tests. Old/new certificate types in details. |
CMS POS Clinical Laboratories / CLIA | Quarterly | 2,969 |
new_mammo_facility |
A facility newly appeared on the FDA MQSA certified mammography facility list. | FDA MQSA facility list (fda.gov, replaced weekly) | Weekly | 114 |
mammo_decert |
A facility disappeared from the FDA MQSA certified list (decertified or closed). | FDA MQSA facility list | Weekly | 104 |
All eleven types are emitting. The five NPPES/CHOW/HCRIS-derived types carry dates the source itself publishes (enumeration and deactivation dates back to 2005, ownership effective dates back to 2016, fiscal years back to 2019); the other six began at the July 2026 baseline, when their first two file versions were compared, and build forward from there.
Table: provider_change_events
Snowflake: HEALTHPARSE_DATA.PROVIDER_CHANGE_EVENTS.PROVIDER_CHANGE_EVENTS
| Column | Type | Description | Notes |
|---|---|---|---|
event_id |
BIGINT | Stable per-event id (the source table's monotonic primary key). | Use with dedupe_key for incremental loads — the marketplace table is replaced wholesale each refresh, so WHERE event_id > (max already loaded) is the cheap delta pattern. |
event_date |
DATE | When the change happened, as best the source expresses it: the deactivation/certification/CHOW/fiscal-year-end date where the source publishes one, else the file vintage the change first appeared in. | Ownership changes carry true historical dates (back to 2005). Diff-derived types cluster from 2026-07 onward. |
event_type |
VARCHAR | One of the 11 types above. | Exported as plain text. |
npi |
VARCHAR | National Provider Identifier, for NPI-keyed sources (NPPES, Order & Referring, PILT). | Null for CCN/CLIA/facility-keyed types. |
ccn |
VARCHAR | CMS Certification Number, for facility-keyed sources (CHOW, HCRIS A-7). | Joins to the HCRIS Hospital Financials and Facility Quality products. |
clia_number |
VARCHAR | CLIA certificate number, for lab-certificate events. | Null for every other type. |
facility_key |
VARCHAR | MQSA facility key — an md5 over normalized name+address, because the public FDA file has no facility id. | Only populated for MQSA types; stable across weeks for the same facility. |
entity_name |
VARCHAR | Provider/organization/facility name as published by the source. | Not normalized across sources. |
address / city / state / zip |
VARCHAR | Location as published by the source. | state is null for ~18% of rows — every deactivation event (the NPPES weekly file publishes no address for deactivated NPIs) and the ownership_change rows derived from the All-Owners proxy, which carry no facility address. For address_change, these columns hold the new address; the old one is in details. |
details |
VARCHAR (JSON) | Source-specific event payload as JSON text — old/new values for changes, buyer/seller for CHOW, capex dollars by asset class, certificate types, capabilities added. | Parse with PARSE_JSON() in Snowflake. Shape varies by event_type (examples below); null for mammo_decert. |
source |
VARCHAR | Source file family: nppes_weekly_v2, cms_order_referring, cms_pending_enrollment, cms_pos_clia, cms_chow, cms_all_owners_hha, cms_all_owners_hospice, fda_mqsa, hcris_a7. |
— |
source_vintage |
VARCHAR | The specific file release the event was derived from (a date, quarter, or fiscal year depending on source). | — |
dedupe_key |
VARCHAR | The ingest pipeline's idempotence key, e.g. capex_jump|280077|2025. Unique across the table. |
The stable natural key — safe to use for merge/upsert on the buyer side. |
ingested_at |
TIMESTAMP | When the event row was written. | — |
_dataset / _vintage / _exported_at |
VARCHAR | See README. | — |
details payload by event type (populated types)
// new_enumeration
{ "entity_type": "individual", "taxonomy_code": "390200000X", "parent_org_name": null }
// address_change (old + new full address pair)
{ "old": { "address": "2323 N CENTRAL EXPY # 1000", "city": "RICHARDSON", "state": "TX", "zip": "75080" },
"new": { "address": "210 S PRESTON RD STE 30", "city": "PROSPER", "state": "TX", "zip": "75078" } }
// deactivation
{ "deactivation_date": "2026-07-07" }
// ownership_change (CHOW)
{ "chow_type": "ACQUISITION/MERGER", "chow_type_code": "AM", "provider_kind": "hospital",
"buyer": { "ccn": "150056", "npi": "1144266024", "org": "INDIANA UNIVERSITY HEALTH INC" },
"seller": { "ccn": "150161", "npi": "1568492916", "org": "INDIANA UNIVERSITY HEALTH NORTH HOSPITAL INC" } }
// capex_jump (dollars by asset class + trigger thresholds)
{ "fy_end_year": 2025, "movable_equipment_purchases": 4286370,
"prior_year_movable_equipment_purchases": -10000, "total_purchases": 5638633,
"fixed_equipment_purchases": 383411, "building_purchases": 968852,
"hit_asset_purchases": null, "threshold_dollars": 1000000, "threshold_multiple": 2 }
The remaining types carry: newly_billing —
capabilities/capabilities_added (partb, dme, hha, pmd, hospice);
enrollment_pending — provider_kind, nppes_matched;
new_lab_certificate / lab_cert_upgrade — old/new certificate type and
code; new_mammo_facility — phone, recertified.
Example queries (Snowflake)
-- 1. "New physician in territory": new enumerations + address changes
-- into Texas in the last 30 days.
SELECT "event_date", "event_type", "npi", "entity_name", "city", "state"
FROM HEALTHPARSE_DATA.PROVIDER_CHANGE_EVENTS.PROVIDER_CHANGE_EVENTS
WHERE "state" = 'TX'
AND "event_type" IN ('new_enumeration', 'address_change')
AND "event_date" >= dateadd(day, -30, current_date)
ORDER BY "event_date" DESC;
-- 2. Compliance: deactivated NPIs, most recent first (feed this into a
-- credentialing re-check).
SELECT "event_date", "npi", "entity_name",
PARSE_JSON("details"):"deactivation_date"::date AS deactivated_on
FROM HEALTHPARSE_DATA.PROVIDER_CHANGE_EVENTS.PROVIDER_CHANGE_EVENTS
WHERE "event_type" = 'deactivation'
ORDER BY "event_date" DESC
LIMIT 100;
-- 3. Roll-up velocity: hospital & SNF acquisitions by buyer org, 2024+.
SELECT PARSE_JSON("details"):"buyer":"org"::string AS buyer_org,
count(*) AS facilities_acquired
FROM HEALTHPARSE_DATA.PROVIDER_CHANGE_EVENTS.PROVIDER_CHANGE_EVENTS
WHERE "event_type" = 'ownership_change'
AND "event_date" >= '2024-01-01'
GROUP BY 1
ORDER BY facilities_acquired DESC
LIMIT 25;