# Hospital Price Transparency Enforcement Leads — CMS Radar (`lukehunter/hospital-price-transparency-enforcement-leads`) Actor

Find hospitals with recent CMS Hospital Price Transparency enforcement actions (Warning Notice, CAP Request, CMP Notice), filterable by state and lookback window, one research-ready lead per hospital for compliance vendors and consultants.

- **URL**: https://apify.com/lukehunter/hospital-price-transparency-enforcement-leads.md
- **Developed by:** [Luke Hunter](https://apify.com/lukehunter) (community)
- **Categories:** Lead generation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$750.00 / 1,000 leads

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Hospital Price Transparency Enforcement Leads — CMS Radar

**For price-transparency software vendors, MRF remediation providers, revenue-cycle consultants and compliance teams who need a timely reason to investigate a hospital account.** One run returns hospitals with recently disclosed CMS Hospital Price Transparency (HPT) enforcement actions, turned into one research-ready lead per hospital.
Pay-per-result: **$0.75 per delivered lead — 100 leads = $75.00.**
Try it free with Apify's monthly platform credit.

Choose states, a lookback window, and the CMS actions you care about. The Actor pulls the official public CMS enforcement dataset, groups action history by hospital, highlights the qualifying Warning Notice / CAP Request / CMP Notice, and surfaces any later CMS Closure Notice so you can avoid treating a corrected historical case as though it were still open.

**Important:** CMS explicitly says its historical enforcement data should not be taken to suggest an ongoing state of hospital compliance or noncompliance. This Actor preserves that distinction. It reports disclosed actions and dates; it does not invent a current compliance status.

### Quick start (2 minutes)

1. Open the **Input** tab (no CMS account or key needed — the source is public).
2. Use this prefill for Texas/Florida hospitals with a recent enforcement trigger:

```json
{
  "states": ["TX", "FL"],
  "lookbackDays": 180,
  "triggerActions": ["Warning Notice", "CAP Request", "CMP Notice"],
  "maxItems": 100
}
```

3. Click **Start**. Export the lead list to CSV/JSON, or pull it via API into your CRM.

### Use cases

- **HPT/MRF compliance vendors** identifying recent Warning Notice, CAP Request, or CMP Notice events as a reason to open account research.
- **MRF remediation firms** building a recurring list of hospitals where a disclosed CMS event may create a reason to review technical remediation needs.
- **Revenue-cycle consultants** monitoring selected states without repeatedly cleaning the raw CMS event table by hand.
- **Healthcare compliance advisers and market analysts** exporting normalized hospital-level HPT enforcement histories, with later closure context preserved.

### How it works

1. Reads the latest CMS **Hospital Price Transparency Enforcement Activities and Outcomes** feed through the public Data API.
2. Validates the expected source schema and action vocabulary.
3. Retries bounded transient HTTP failures and paginates in CMS's documented 5,000-row pages.
4. Deduplicates source events and groups disclosed history by hospital/location.
5. Selects hospitals with your chosen trigger action inside the lookback window.
6. Adds derived recency/count fields and detects a later source `Closure Notice` after the trigger.
7. Sorts newest triggers first, applies `maxItems`, pushes the results, then bills only delivered leads when pay-per-event pricing is configured.

### Input

| Field | Type | Default | Purpose |
|---|---|---:|---|
| `states` | array of strings | `[]` | Optional two-letter state/territory codes. Empty means nationwide. |
| `lookbackDays` | integer | `180` | Recent action window, 1–3,650 days. |
| `triggerActions` | array of strings | Warning Notice, CAP Request, CMP Notice | CMS actions that qualify a hospital as a lead. |
| `maxItems` | integer | `100` | Hard cap on delivered/billable leads, 1–5,000. |

Valid current CMS action values are `Met Requirements`, `Administrative Closure`, `Warning Notice`, `CAP Request`, `Closure Notice`, `CMP Notice`, and `Appealed`.

Example:

```json
{
  "states": ["TX", "FL"],
  "lookbackDays": 180,
  "triggerActions": ["Warning Notice", "CAP Request", "CMP Notice"],
  "maxItems": 100
}
```

### Output

Key fields:

| Field | Meaning |
|---|---|
| `leadKey` | Stable derived hash of normalized hospital/location identity. |
| `hospitalName`, `hospitalAddress`, `city`, `state` | CMS-published location fields. |
| `triggerCaseId` | CMS case ID for the action that qualified the lead. |
| `triggerAction`, `triggerActionDate` | CMS-published qualifying action and date. |
| `daysSinceTriggerAction` | Derived whole days since the qualifying action. |
| `recencyBucket` | Derived action-age band. |
| `latestDisclosedAction`, `latestDisclosedActionDate` | Latest CMS action disclosed for that hospital in the dataset. |
| `hasLaterClosureNotice` | Derived boolean: a source `Closure Notice` exists after the selected trigger. |
| `laterClosureDate` | Source date for the later closure when present. |
| `disclosedActionCount`, `disclosedCaseCount` | Derived counts across deduplicated hospital history. |
| `disclosedActionTypes`, `caseIds` | Aggregated source values. |
| `sourceUrl`, `sourceApiUrl` | Official CMS source links. |
| `statusCaution` | Reminder that historical actions do not establish current compliance/noncompliance. |

### Output example

The values below are **illustrative**, designed to show the output shape. They are not presented as a real current hospital enforcement record.

```json
{
  "leadKey": "9f4f4a7aa03f0b37a81c3a11",
  "hospitalName": "Example Regional Medical Center",
  "hospitalAddress": "100 Main Street",
  "city": "Austin",
  "state": "TX",
  "triggerCaseId": "12345",
  "triggerAction": "CAP Request",
  "triggerActionDate": "2026-08-15",
  "daysSinceTriggerAction": 38,
  "recencyBucket": "31-90 days",
  "latestCaseId": "12345",
  "latestDisclosedAction": "Closure Notice",
  "latestDisclosedActionDate": "2026-09-01",
  "daysSinceLatestDisclosedAction": 21,
  "hasLaterClosureNotice": true,
  "laterClosureDate": "2026-09-01",
  "disclosedActionCount": 3,
  "disclosedCaseCount": 1,
  "disclosedActionTypes": ["Warning Notice", "CAP Request", "Closure Notice"],
  "caseIds": ["12345"],
  "sourceDataset": "CMS Hospital Price Transparency Enforcement Activities and Outcomes",
  "sourceUrl": "https://data.cms.gov/provider-characteristics/hospitals-and-other-facilities/hospital-price-transparency-enforcement-activities-and-outcomes",
  "sourceApiUrl": "https://data.cms.gov/data-api/v1/dataset/6a3aa708-3c9d-411a-a1a4-e046d3ade7ef/data",
  "retrievedAt": "2026-09-22T00:00:00.000Z",
  "statusCaution": "CMS states these historical actions should not be taken to suggest an ongoing state of hospital compliance or noncompliance."
}
```

| Field | Value (illustrative) |
|---|---|
| `hospitalName` | `Example Regional Medical Center` |
| `city` / `state` | `Austin`, `TX` |
| `triggerAction` | `CAP Request` |
| `triggerActionDate` | `2026-08-15` |
| `recencyBucket` | `31-90 days` |
| `latestDisclosedAction` | `Closure Notice` |
| `hasLaterClosureNotice` | `true` |
| `disclosedActionCount` | `3` |

### How the data is transformed

CMS publishes event rows. This Actor turns them into hospital-level leads:

- exact duplicate events are removed;
- hospital history is grouped by normalized name + address + city + state;
- the newest selected trigger within your date window qualifies the hospital;
- the latest disclosed action is retained even when it is a closure or another non-trigger action;
- `hasLaterClosureNotice` is derived only when CMS publishes a Closure Notice dated after the selected trigger;
- recency buckets and counts are explicitly derived metrics, not CMS-published scores.

The Actor does **not** estimate hospital revenue, penalty amount, urgency, likelihood to buy, or current compliance status.

### API usage

Using the Apify Python client after deployment:

```python
from apify_client import ApifyClient

client = ApifyClient("<YOUR_APIFY_TOKEN>")

run_input = {
    "states": ["TX", "FL"],
    "lookbackDays": 180,
    "triggerActions": ["Warning Notice", "CAP Request", "CMP Notice"],
    "maxItems": 100,
}

run = client.actor("<ACTOR_ID>").call(run_input=run_input)
items = client.dataset(run["defaultDatasetId"]).list_items().items
print(items)
```

### Run it weekly

CMS describes the enforcement dataset as monthly, so a weekly or monthly schedule fits its real update cadence:

1. Set your `states`/`triggerActions` filters, then click **Schedule** on the run page (or create one under **Schedules** in the Apify Console).
2. Schedule monthly with a 45–90 day lookback to catch newly disclosed triggers, or use a 180–365 day lookback for quarterly territory planning.
3. Because the Actor always returns the current source history inside your chosen window, use `leadKey` + `triggerActionDate` in your CRM/sheet for cross-run "new since last run" suppression.

### Data source and trust

Official source: Centers for Medicare & Medicaid Services, **Hospital Price Transparency Enforcement Activities and Outcomes**.

CMS source page:
https://data.cms.gov/provider-characteristics/hospitals-and-other-facilities/hospital-price-transparency-enforcement-activities-and-outcomes

CMS methodology:
https://data.cms.gov/resources/hospital-price-transparency-enforcement-activities-and-outcomes-methodology

The API is public and does not require a login, browser session, CAPTCHA bypass, or proxy network.

### Reliability and data quality

Built-in quality checks detect malformed or degraded source responses and reject data that no longer resembles the expected records instead of quietly treating it as valid. The Actor validates the seven documented columns, known CMS action vocabulary, critical dates, page shape, and pagination bounds.

Transient 429/5xx responses are retried with bounded backoff. Non-transient 4xx responses fail without wasteful retries. An unexpectedly empty first CMS page is treated as a technical/source failure, while a valid run with no records matching your filters completes with zero results and zero charge.

Individual records can still have fields the source does not provide. Missing non-critical values are returned as `null` rather than guessed.

### Pricing and cost control

Pay-per-event: **$0.75 per delivered hospital-level `lead`**. `maxItems` caps both output and the number of billable events. Failed rows, filtered records, source requests, retries, duplicates, empty output, and internal aggregation are not billable.

### Important limitations

- CMS says this public dataset may not reflect every enforcement activity undertaken since 2021 because only information permissible for disclosure is included.
- A historical Warning Notice, CAP Request, CMP Notice, appeal, or closure is not proof of a hospital's current compliance status.
- A missing Closure Notice does not mean a matter remains open; it means only that this dataset did not provide a later Closure Notice in the grouped history.
- Hospital identity grouping relies on published name/location text. Renames or address changes can split one organization into multiple keys.
- The source contains enforcement events, not buyer contacts, emails, current compliance vendors, budgets, or guaranteed sales opportunities.

### FAQ

#### Is this a hospital price scraper?

No. It does not parse hospital MRF negotiated rates. It focuses on CMS-disclosed HPT enforcement actions and converts those event rows into hospital-level prospecting/monitoring records.

#### Does a lead mean the hospital is currently noncompliant?

No. CMS explicitly warns against that interpretation. Use the record as a dated historical enforcement signal and verify current circumstances independently.

#### What is a CAP Request?

In the CMS data dictionary, `CAP Request` means CMS reviewed the hospital, cited deficiencies, and requested a corrective action plan. This Actor preserves CMS's label rather than reclassifying it.

#### Can I monitor only CMP Notices?

Yes. Set `triggerActions` to `["CMP Notice"]`.

#### Is this Actor affiliated with CMS or HHS?

No. It is an independent tool that transforms an official public CMS dataset. CMS and HHS do not sponsor or endorse this Actor.

### Related Actors

Other data tools from the same developer, built to the same standard: official or public sources, hard cost caps, and honest documentation of limits.

- **[Hospital Ownership Change Radar](https://apify.com/lukehunter/hospital-chow-radar)**: hospitals that just changed owner, with buyer, seller and effective date from CMS filings.
- **[New Healthcare Organization NPI Radar](https://apify.com/lukehunter/new-healthcare-organization-npi-radar)**: newly registered healthcare organizations from CMS's weekly NPI file, by provider type.
- **[Federal Register Rule Effective-Date Radar](https://apify.com/lukehunter/federal-rule-effective-date-radar)**: final federal rules about to take effect, with citations, dockets and urgency.
- **[Chicago Contract Recompete & Extension Radar](https://apify.com/lukehunter/chicago-contract-expiration-radar)**: expiring City of Chicago contracts with extension history, for recompete prospecting.
- **[Bank Branch Closings & Merger Radar (FDIC)](https://apify.com/lukehunter/bank-branch-merger-radar)**: new US bank branch closings, openings and mergers from the FDIC.
- **[Chicago New Business License Radar](https://apify.com/lukehunter/chicago-new-business-license-radar)**: newly licensed Chicago businesses as opening leads, grouped by category.
- **[NYC FDNY Contractor Leads & Hearing Radar](https://apify.com/lukehunter/fdny-violation-radar)**: fresh NYC fire-code summonses routed by remediation trade, with hearing dates.
- **[RCRA Enforcement Response Leads](https://apify.com/lukehunter/rcra-enforcement-radar)**: new EPA hazardous-waste (RCRA) enforcement actions and penalties, by state.
- **[Emerging Federal Contractor Radar](https://apify.com/lukehunter/emerging-federal-contractor-radar)**: companies that just won their first federal contracts, from USAspending.gov.
- **[County Multifamily Building Permits Surge Radar](https://apify.com/lukehunter/county-multifamily-permit-surge-radar)**: U.S. counties where 5+ unit apartment permits are surging year over year.
- **[Zillow ZIP Code Property Search Scraper](https://apify.com/lukehunter/zillow-zip-scraper)**: for-sale listings by ZIP code with prices, price cuts and days on Zillow.
- **[Walmart Category Scraper](https://apify.com/lukehunter/walmart-category-scraper)**: product names, prices, was-prices and ratings from Walmart category pages.

# Actor input Schema

## `states` (type: `array`):

Optional two-letter state or territory codes. Leave empty for nationwide results.

## `lookbackDays` (type: `integer`):

Return hospitals with a selected CMS action within this many days, 1-3650, default 180.

## `triggerActions` (type: `array`):

CMS action values that qualify a hospital as a lead. Valid values: Met Requirements, Administrative Closure, Warning Notice, CAP Request, Closure Notice, CMP Notice, Appealed.

## `maxItems` (type: `integer`):

Hard cap on delivered leads and proposed billable events, 1-5000, default 100.

## Actor input object example

```json
{
  "states": [
    "TX",
    "FL"
  ],
  "lookbackDays": 180,
  "triggerActions": [
    "Warning Notice",
    "CAP Request",
    "CMP Notice"
  ],
  "maxItems": 100
}
```

# Actor output Schema

## `enforcementLeads` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "states": [
        "TX",
        "FL"
    ],
    "triggerActions": [
        "Warning Notice",
        "CAP Request",
        "CMP Notice"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("lukehunter/hospital-price-transparency-enforcement-leads").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "states": [
        "TX",
        "FL",
    ],
    "triggerActions": [
        "Warning Notice",
        "CAP Request",
        "CMP Notice",
    ],
}

# Run the Actor and wait for it to finish
run = client.actor("lukehunter/hospital-price-transparency-enforcement-leads").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "states": [
    "TX",
    "FL"
  ],
  "triggerActions": [
    "Warning Notice",
    "CAP Request",
    "CMP Notice"
  ]
}' |
apify call lukehunter/hospital-price-transparency-enforcement-leads --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,lukehunter/hospital-price-transparency-enforcement-leads"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/0YdqWJ6WgOzfrPupR/builds/gnqsCABJNdtBZQ0Cj/openapi.json
