Provider-to-Operator Crosswalk
Description
The entity dimension for the catalogue. Every other product here is keyed on a CMS Certification Number (CCN) or an NPI — a facility. This one resolves a facility to the company that owns it, and where that company is publicly traded, to a ticker. It is what turns facility-level rows into company-level analysis.
Two files:
operator_crosswalk— the current mapping. One row per (CCN, operator).operator_crosswalk_history— point-in-time observations, one row per (CCN, operator, monthly CMS snapshot), so a facility can be attributed to the operator that held it in a given month rather than to its present owner.
A facility can legitimately appear more than once. A hospital leased from a REIT
and run by an operator maps to both; filter on entity_class to pick a lens.
Provenance — read this before using ticker
The mapping is built in two links, and they do not have the same standing:
| Link | Who asserts it |
|---|---|
| CCN → owner organisation name | CMS. Published in Hospital All Owners (joined to Hospital Enrollments for the CCN) and the SNF/HHA/hospice All Owners files. |
| owner name → operator, ticker | Healthparse. A curated registry of name patterns. This is our assertion, not a published fact. |
match_method and match_confidence are exported so a buyer can separate them.
matched_owner_name carries the exact CMS string a pattern hit, so any mapping
can be audited back to source.
- Source: CMS Hospital All Owners + Hospital Enrollments (data.cms.gov, monthly); existing SNF/HHA/hospice All Owners rows; CMS HCRIS cost report provider names as a fallback.
- Refresh cadence: monthly, on the CMS ownership file release.
- Row count: 4,412 crosswalk rows covering 4,299 distinct CCNs (2026-08-29 export, rebuilt the same day; the history file holds 113,074 rows).
- Ticker coverage: 2,240 CCNs mapped to a ticker, across 28 tickers (rebuilt and measured 2026-08-29; Amedisys is no longer a separate listed company after UnitedHealth's acquisition closed, and its facilities carry UNH).
- History: monthly snapshots from 2022-11 onward (42 published pairs);
2,997 rows carry
first_seen/last_seen.
Coverage by entity class:
entity_class |
CCNs | Operators |
|---|---|---|
public |
2,081 | 22 |
nonprofit_system |
1,678 | 24 |
private |
238 | 3 |
pe_backed |
198 | 1 |
reit |
160 | 7 |
Rows by resolution method:
match_method |
Rows |
|---|---|
cms_ownership_name |
4,024 |
cms_enrollment_parent |
254 |
hcris_provider_name |
134 |
Per-product ticker coverage, since this is what buyers ask:
| Product | Facilities | Mapped to a ticker | Tickers |
|---|---|---|---|
| HCRIS Hospital Financials | 10,138 | 846 | 14 |
| Hospital Capex Signals | 3,299 | 312 | 10 |
| PriceTransparency Negotiated Rates | 2,421 | 267 | 9 |
The price-transparency row is a moving figure — a crawl targeting hospitals owned
by listed operators is in progress, so re-measure before quoting it. See
docs/neudata/backfill-plan.md.
Table: operator_crosswalk
Snowflake: HEALTHPARSE_DATA.OPERATOR_CROSSWALK.OPERATOR_CROSSWALK
| Column | Type | Description | Notes |
|---|---|---|---|
ccn |
VARCHAR | CMS Certification Number of the facility. | Joins to HCRIS Hospital Financials, Facility Quality, Capex Signals, Negotiated Rates, and the CCN-keyed rows of Provider Change Events. |
operator_key |
VARCHAR | Stable slug for the parent entity. | Primary key with ccn. Stable across refreshes. |
operator_legal_name |
VARCHAR | The entity the mapping resolves to. | — |
entity_class |
VARCHAR | public, reit, pe_backed, nonprofit_system, or private. |
REIT rows are landlords, not operators — a facility can map to both a REIT and its operator. |
ticker |
VARCHAR | Trading symbol. | Null unless entity_class is public or reit. Verified as of 2026-07-28 and not continuously maintained — re-verify before relying on it. Amedisys was retired as a separate symbol on that date; its facilities carry UNH. |
exchange |
VARCHAR | NYSE, NASDAQ, or NYSE American. | Null where ticker is null. |
segment |
VARCHAR | What kind of facilities the operator runs (e.g. acute_care_hospitals, skilled_nursing, hospital_real_estate). |
Describes the operator, not the individual facility. |
match_method |
VARCHAR | cms_ownership_name — matched against a CMS-filed ownership record. cms_enrollment_parent — matched against the top organisational owner resolved through the CMS enrollment bridge. hcris_provider_name — matched against the facility's own name on its cost report. |
The first two rest on a CMS ownership filing; the third does not. |
match_confidence |
VARCHAR | high for the two CMS-filing methods, medium for hcris_provider_name. |
A facility brand name is not an ownership filing; co-branded and legacy names are the known failure mode for medium. |
matched_owner_name |
VARCHAR | The exact CMS string the registry pattern matched. | The audit column. Any mapping can be checked against it. |
ownership_pct |
NUMERIC | Percentage ownership stated on the CMS filing, where present. | Frequently null — CMS does not require a percentage for every owner role. Where a pair matched several owner rows, the highest percentage is kept. |
owner_associate_id |
VARCHAR | CMS associate ID of the owning entity. | Useful for grouping owners CMS treats as one entity regardless of name spelling. |
facility_type |
VARCHAR | hospital, snf, hha, or hospice. |
The CMS ownership file family the row came from. |
first_seen |
DATE | Earliest monthly snapshot in which this (CCN, operator) pair appears. | Null until the history backfill has run. Not a transaction date — it is the first month CMS's file showed the relationship. |
last_seen |
DATE | Most recent snapshot in which the pair appears. | A pair whose last_seen is older than the newest snapshot has dropped out of the CMS file, which usually but not always means a divestiture. |
Table: operator_crosswalk_history
Snowflake: HEALTHPARSE_DATA.OPERATOR_CROSSWALK.OPERATOR_CROSSWALK_HISTORY
| Column | Type | Description | Notes |
|---|---|---|---|
ccn |
VARCHAR | Facility CCN. | — |
operator_key |
VARCHAR | Operator slug. | — |
snapshot_date |
DATE | The CMS monthly file release this observation came from. | Monthly from 2022-11. Gaps exist where CMS did not publish both halves of the pair in a month. |
operator_legal_name / entity_class / ticker |
VARCHAR | Denormalised from the current mapping for convenience. | These reflect the operator's current classification, not its classification as of snapshot_date. A company that has since IPO'd or gone private carries its present values on every historical row. |
Example queries (Snowflake)
-- 1. Hospital financials for one listed operator, current mapping.
SELECT f."ccn", f."provider_name", f."fy_end_year", f."total_revenues", f."net_income"
FROM HEALTHPARSE_DATA.HCRIS_HOSPITAL_FINANCIALS.HCRIS_HOSPITAL_FINANCIALS f
JOIN HEALTHPARSE_DATA.OPERATOR_CROSSWALK.OPERATOR_CROSSWALK x
ON x."ccn" = f."ccn"
WHERE x."ticker" = 'HCA'
AND x."entity_class" = 'public' -- exclude a REIT landlord row for the same CCN
AND f."fy_end_year" >= 2020;
-- 2. Point-in-time: which hospitals did Tenet hold as of June 2024?
SELECT DISTINCT h."ccn"
FROM HEALTHPARSE_DATA.OPERATOR_CROSSWALK.OPERATOR_CROSSWALK_HISTORY h
WHERE h."operator_key" = 'tenet_healthcare'
AND h."snapshot_date" = '2024-06-03';
-- 3. Facilities that left an operator's file. A screening query, not a
-- transaction feed — see the caveat on dropouts below.
SELECT "ccn", "operator_key", "first_seen", "last_seen"
FROM HEALTHPARSE_DATA.OPERATOR_CROSSWALK.OPERATOR_CROSSWALK
WHERE "last_seen" < (SELECT max("snapshot_date")
FROM HEALTHPARSE_DATA.OPERATOR_CROSSWALK.OPERATOR_CROSSWALK_HISTORY)
AND "ticker" IS NOT NULL
ORDER BY "last_seen" DESC;
-- 4. Only mappings backed by a CMS ownership filing.
SELECT * FROM HEALTHPARSE_DATA.OPERATOR_CROSSWALK.OPERATOR_CROSSWALK
WHERE "match_method" = 'cms_ownership_name';
Data-quality caveats worth knowing before the call
Verified against the built table, not assumed.
- Tickers are point-in-time as of 2026-07-28 and are not maintained
continuously. The registry flags entries whose corporate status was known to
be in flux at authoring — the Concentra/Select Medical separation, PACS Group's
listing status, and Amedisys's acquisition status. Treat
tickeras a convenience key, not a security master. - Denormalised ticker on history rows is the current one. A row for
snapshot_date2023-01 carries the operator's 2026 classification. For an operator that IPO'd, went private, or was acquired during the window, this is a look-ahead artefact. Join onoperator_keyand apply your own security master if that matters. - Name patterns are a judgement layer and were wrong before they were right.
Two false positives were found and corrected during the build: the bare token
UHSalso matches UHS-PRUITT (PruittHealth, an unrelated nursing-home operator, 94 CCNs), and a bareMERCY HEALTHpattern collided with at least three distinct systems. Both are now separated. Others of the same kind may remain —matched_owner_nameexists so a buyer can check. - Bon Secours Mercy is understated, deliberately. It is matched on
BON SECOURSand its Cincinnati entities only, because the broader pattern was unsafe. Its true facility count is higher than the 75 CCNs shown. - The history file covers hospitals only. All 42 walked snapshots are the
Hospital All Owners family, so
first_seen/last_seenare populated on 2,997 of 4,412 crosswalk rows. SNF, HHA and hospice rows have a current mapping but no point-in-time history — CMS publishes equivalent monthly snapshots for those families and they have not been walked yet. - A facility dropping out of an operator's file is a weak divestiture signal.
Only 23 ticker-mapped rows have a
last_seenearlier than the newest snapshot, and individual CCNs do drop out and reappear across months as enrolments are re-filed. Verify any single case against Provider Change Events (ownership_change, sourced from the CMS CHOW file) before treating it as a transaction. - Coverage grows over the history window for reasons that are not all real consolidation. Matched pairs rise from ~2,384 in the earliest 2022 snapshot to ~4,000 in the latest. Some is genuine M&A; some is CMS ownership reporting becoming more complete. Do not read the series as a clean consolidation measure.
- Absence is not evidence of independence. ~6,000 hospital CCNs map to no operator. Most are genuinely independent or small local systems, but some are chain-owned through entity names the registry does not yet cover.
hcris_provider_namematches are the weakest tier — 134 of 4,412 rows. They exist to catch facilities whose brand carries the operator name where no ownership filing was matched.