# CMS Hospital Quality Data: Ratings and Measures | $1/1K (`one_dollar_store/cms-hospital-quality-data`) Actor

$1 per 1,000 results, platform usage included. US hospital star ratings and quality measures from the official CMS Provider Data Catalog: hospital details, complications and deaths, infections, readmissions, patient survey, timely care. No key.

- **URL**: https://apify.com/one_dollar_store/cms-hospital-quality-data.md
- **Developed by:** [One Dollar Store](https://apify.com/one_dollar_store) (community)
- **Categories:** Other, Business
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.00 / 1,000 results

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

## CMS Hospital Quality: US hospital star ratings and quality measures

**$1 per 1,000 rows. Platform usage included. No rental, no minimum.**

The four most used CMS hospital quality actors on Apify Store charge $2.00 to $10.00 per 1,000 results (Store prices checked 20 October 2026). This actor returns the same official CMS data for $1.

Read US hospital data from the official CMS Provider Data Catalog: the hospital list with the overall star rating (1 to 5), and the five quality measure tables behind it: timely and effective care, complications and deaths, healthcare associated infections, unplanned hospital visits (readmissions) and the patient survey (HCAHPS). Filter by state, city, hospital name, CMS ID or measure. Each row names the table it came from. No API key and no account with CMS.

[Open it in Apify Console](https://console.apify.com/actors/Myrzp3PQgEKCRNSzE/input)

### What it costs

| Rows | This actor | Most used CMS hospital quality actors on the Store |
|---|---|---|
| 1,000 | $1.00 | $2.00 to $10.00 |
| 10,000 | $10.00 | $20 to $100 |
| 100,000 | $100.00 | $200 to $1,000 |

Plus $0.001 per run. One row is one hospital in the hospital list, or one hospital and measure in a measure table. A run returns at most 10,000 rows. The full hospital list was 5,419 hospitals on 20 October 2026, about $5.42. All hospitals of one state with their star ratings is one row per hospital: California is 377 rows, about $0.38. All five measure tables for one hospital were 168 rows in our test, about $0.17.

### Why people switch

- **One flat price.** Compute is included, so the bill follows the number of rows and nothing else. A test run of 100 hospital rows measured about $0.007 of platform cost per 1,000 rows.
- **The whole catalog in one actor.** The hospital list and five measure tables in one input. Choose one table or several, and each row says which table it came from.
- **Filters that save money.** The measure tables hold tens of thousands of rows each. Narrow by state, city, name, CMS ID or measure code and pay only for the rows you need.
- **Numbers, not text.** Scores, counts and percentages are numbers. Dates are ISO dates. When CMS shows "Not Available" where a number belongs, the field is left out instead of holding text.
- **Straight from CMS.** It reads the Provider Data Catalog on data.cms.gov, with no key and no third party in between.

### Quick start

1. Open the actor, keep the example values, press **Start**.
2. Or paste this input, which returns 100 California hospitals with their star rating:

```json
{ "datasets": ["hospital-info"], "states": ["CA"], "maxItems": 100 }
```

3. Download the results as JSON, CSV or Excel, or read them through the API.

For the hip and knee replacement complication rates of Boston hospitals, use `{ "datasets": ["complications-deaths"], "states": ["MA"], "city": "Boston", "measureIds": ["COMP_HIP_KNEE"] }`.

### Use it from code

```bash
curl -X POST "https://api.apify.com/v2/acts/one_dollar_store~cms-hospital-quality-data/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"datasets": ["hospital-info"], "states": ["CA"], "minOverallRating": 4, "maxItems": 100}'
```

```python
from apify_client import ApifyClient

client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("one_dollar_store/cms-hospital-quality-data").call(
    run_input={"datasets": ["hospital-info"], "states": ["CA"], "minOverallRating": 4, "maxItems": 100}
)
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item["hospitalName"], item["city"], item["overallRating"])
```

### Use it from an AI assistant

Claude, ChatGPT, Cursor and other assistants can call this actor through Apify's MCP server. Add it with this server address:

```
https://mcp.apify.com?tools=one_dollar_store/cms-hospital-quality-data
```

Then ask, for example: "List the hospitals in Minnesota with at least 4 stars and show their star ratings." or "Get the patient survey results for the hospital with CMS ID 050002."

### Switching from another CMS hospital actor

The tables are chosen in `datasets`. Place filters are `states` (two letter codes), `city` and `hospitalName`. A single hospital is `facilityIds` (the six character CMS ID). Measures are `measureIds`. Star rating is `minOverallRating`. The core output fields are `dataset`, `facilityId`, `hospitalName`, `city`, `state`, `measureId`, `measureName`, `score` and `overallRating`. One row is one hospital in the hospital list, or one hospital and measure in a measure table.

### Input

| Field | Type | Default | What it does |
|---|---|---|---|
| `datasets` | list of choices | hospital-info | `hospital-info` (hospital list with the star rating), `timely-effective-care`, `complications-deaths`, `healthcare-infections`, `unplanned-visits` or `patient-survey`. Pick one or several. |
| `states` | list of text | all | Two letter state codes, for example `CA` or `NY`. Empty means all states and territories. |
| `city` | text | none | Only hospitals in this city or town, for example `Boston`. |
| `hospitalName` | text | none | Only hospitals whose name contains this text, without regard to case, for example `Mayo`. |
| `facilityIds` | list of text | none | Six character CMS Certification Numbers (CCN), for example `010001`. |
| `measureIds` | list of text | none | Only these measures, for example `MORT_30_AMI` or `HAI_1_SIR`. Applies to the measure tables, not to the hospital list. |
| `minOverallRating` | number | 0 | Only hospitals rated at least this many stars (1 to 5). Hospitals without a rating are left out. Applies to the hospital list only. |
| `maxItems` | number | 100 | Most rows in the run. Minimum 10, maximum 10,000. |

Filters combine: a state plus a city plus a name narrows the list. Several states, CMS IDs or measures are read one combination at a time, up to 300 combinations per run.

### Output fields

Every row has `dataset`, the hospital columns and `scrapedAt`. The other fields depend on the table. Fields CMS leaves empty are left out, and so is a "Not Available" in a number field. Text fields such as `comparedToNational` keep CMS's own words, including "Not Available".

| Field | Meaning |
|---|---|
| `dataset` | The CMS table the row comes from, for example Hospital General Information or Complications and Deaths. |
| `facilityId` | Six character CMS Certification Number of the hospital. |
| `hospitalName`, `address`, `city`, `state`, `zipCode`, `county`, `phone` | Where the hospital is and how to reach it, as CMS lists it. |
| `hospitalType`, `ownership` | Hospital list only. For example Acute Care Hospitals, and Proprietary. |
| `emergencyServices` | Hospital list only. True when the hospital provides emergency services. |
| `birthingFriendly` | Hospital list only. True when CMS lists the hospital as meeting the Birthing-Friendly criteria. |
| `overallRating`, `overallRatingNote` | Hospital list only. CMS overall star rating from 1 to 5, and the footnote code when it is missing. |
| `ratingGroups` | Hospital list only. How many measures sit behind the rating, by group (mortality, safety, readmission, patientExperience, timelyEffectiveCare), with better, noDifferent and worse counts where CMS gives them. |
| `measureId`, `measureName` | Measure tables. The CMS measure code and name, or the survey question for patient survey rows. |
| `condition` | Timely and effective care only. The condition group, for example Emergency Department. |
| `score`, `scoreText` | The score as a number. When CMS gives a category instead (for example medium or very high) it is in `scoreText`. |
| `comparedToNational` | How the hospital compares with the national rate, as CMS words it. |
| `denominator`, `lowerEstimate`, `higherEstimate` | Cases behind the score and the interval around it, when CMS gives them. |
| `sample`, `patients`, `patientsReturned` | Sample size, and the patient counts of the unplanned visits table. |
| `answer`, `answerPercent`, `starRating`, `linearMeanValue` | Patient survey only. The answer category, the share of patients who gave it, the survey star rating and the linear mean score. |
| `completedSurveys`, `responseRatePercent` | Patient survey only. Number of completed surveys and the response rate. |
| `startDate`, `endDate` | The reporting period of the measure, as ISO dates. |
| `footnote` | CMS footnote code or text for the row. |
| `scrapedAt` | When the actor read the data. |

### Sample results

Real rows from test runs on 20 October 2026: three California hospitals from the hospital list, then one row each from the timely and effective care table and the complications and deaths table.

```json
[
  {"dataset": "Hospital General Information", "facilityId": "050002", "hospitalName": "ST ROSE HOSPITAL", "address": "27200 CALAROGA AVE", "city": "HAYWARD", "state": "CA", "zipCode": "94545", "county": "ALAMEDA", "phone": "(510) 782-6200", "hospitalType": "Acute Care Hospitals", "ownership": "Voluntary non-profit - Church", "emergencyServices": false, "overallRating": 1, "ratingGroups": {"mortality": {"measuresReported": 6, "better": 0, "noDifferent": 6, "worse": 0}, "safety": {"measuresReported": 5, "better": 0, "noDifferent": 5, "worse": 0}, "readmission": {"measuresReported": 5, "better": 0, "noDifferent": 3, "worse": 2}, "patientExperience": {"measuresReported": 15}, "timelyEffectiveCare": {"measuresReported": 6}}, "scrapedAt": "2026-10-20T08:43:24.379Z"},
  {"dataset": "Hospital General Information", "facilityId": "050006", "hospitalName": "PROVIDENCE ST JOSEPH HOSPITAL", "address": "2700 DOLBEER ST", "city": "EUREKA", "state": "CA", "zipCode": "95501", "county": "HUMBOLDT", "phone": "(707) 445-8121", "hospitalType": "Acute Care Hospitals", "ownership": "Voluntary non-profit - Private", "emergencyServices": true, "birthingFriendly": true, "overallRating": 4, "ratingGroups": {"mortality": {"measuresReported": 8, "better": 0, "noDifferent": 8, "worse": 0}, "safety": {"measuresReported": 7, "better": 1, "noDifferent": 6, "worse": 0}, "readmission": {"measuresReported": 11, "better": 3, "noDifferent": 8, "worse": 0}, "patientExperience": {"measuresReported": 15}, "timelyEffectiveCare": {"measuresReported": 10}}, "scrapedAt": "2026-10-20T08:43:24.379Z"},
  {"dataset": "Hospital General Information", "facilityId": "050008", "hospitalName": "CALIFORNIA PACIFIC MEDICAL CTR-DAVIES CAMPUS HOSP", "address": "601 DUBOCE AVENUE", "city": "SAN FRANCISCO", "state": "CA", "zipCode": "94117", "county": "SAN FRANCISCO", "phone": "(415) 600-6000", "hospitalType": "Acute Care Hospitals", "ownership": "Voluntary non-profit - Other", "emergencyServices": false, "overallRating": 3, "ratingGroups": {"mortality": {"measuresReported": 4, "better": 0, "noDifferent": 4, "worse": 0}, "safety": {"measuresReported": 6, "better": 1, "noDifferent": 5, "worse": 0}, "readmission": {"measuresReported": 5, "better": 0, "noDifferent": 4, "worse": 1}, "patientExperience": {"measuresReported": 15}, "timelyEffectiveCare": {"measuresReported": 6}}, "scrapedAt": "2026-10-20T08:43:24.379Z"},
  {"dataset": "Timely and Effective Care", "facilityId": "050002", "hospitalName": "ST ROSE HOSPITAL", "address": "27200 CALAROGA AVE", "city": "HAYWARD", "state": "CA", "zipCode": "94545", "county": "ALAMEDA", "phone": "(510) 782-6200", "measureId": "EDV", "measureName": "Emergency department volume", "condition": "Emergency Department", "startDate": "2024-01-01", "endDate": "2024-12-31", "scoreText": "medium", "scrapedAt": "2026-10-20T06:12:28.388Z"},
  {"dataset": "Complications and Deaths", "facilityId": "050002", "hospitalName": "ST ROSE HOSPITAL", "address": "27200 CALAROGA AVE", "city": "HAYWARD", "state": "CA", "zipCode": "94545", "county": "ALAMEDA", "phone": "(510) 782-6200", "measureId": "COMP_HIP_KNEE", "measureName": "Rate of complications for hip/knee replacement patients", "startDate": "2023-04-01", "endDate": "2025-03-31", "comparedToNational": "Not Available", "score": 4.6, "denominator": 97, "scrapedAt": "2026-10-20T06:12:28.388Z"}
]
```

### Limits

- **10,000 rows per run.** The measure tables are large (on 20 October 2026: timely and effective care 138,084 rows, complications and deaths 95,800, healthcare associated infections 172,440, unplanned hospital visits 67,060, patient survey 325,720). Filter by state, hospital ID or measure, or run once per state.
- **CMS can be slow.** On the day we built this, the CMS service sometimes answered with a "Technical Difficulties" page or took 15 to 30 seconds for one request. The actor waits up to 40 seconds for each try and keeps trying one request for up to about 2.5 minutes (at most six tries, with growing pauses), so a run with many pages can take minutes on a bad day. If CMS does not answer at all, the run ends with an error that says so, and no rows are charged.
- **Rate limit.** We found no published request limit for this service. The actor reads 500 rows per request, one request at a time, at most five per second, with a User-Agent that names the actor.
- **Reporting periods differ.** Every measure has its own period. `startDate` and `endDate` give it. A hospital may be missing a measure because it had too few cases, and then CMS gives a footnote code instead of a score.
- **Star ratings are CMS's.** Some hospitals have no overall rating. The rating is read as published and is not recalculated. `ratingGroups` shows the measure counts CMS publishes behind it.
- **Star rating filter.** `minOverallRating` is applied after the hospitals are read, so the run reads every hospital that matches your other filters and then drops the lower rated ones. Hospitals without a rating are dropped when you set it.
- **Name search.** `hospitalName` matches a piece of the name, without regard to case. Hospitals appear under the name CMS holds, which can be a legal or campus name.
- **Not medical or legal advice.** The rows are CMS statistics. They describe groups of patients over a period and do not rate any single doctor or treatment.

### FAQ

**What is the cheapest CMS hospital quality scraper on Apify?**
This actor costs $1 per 1,000 rows with platform usage included. The four most used CMS hospital quality actors on the Store charged $2.00 to $10.00 per 1,000 when we checked on 20 October 2026.

**How much does it cost to scrape 10,000 hospital quality rows?**
$10, plus $0.001 for each run.

**Do I pay for compute or proxy on top?**
No. Platform usage is included in the $1 per 1,000 price. No proxy is used.

**Do I need an API key or a CMS account?**
No. The actor reads the public CMS Provider Data Catalog.

**How do I find a hospital's CMS ID?**
Run the hospital list with a state, city or name filter. Each row has `facilityId`, the six character CMS Certification Number. Use it in `facilityIds` to read that hospital in the measure tables.

**How current is the data?**
The actor reads the CMS tables at the moment you run it. CMS refreshes each table on its own schedule, so the reporting period of a row (`startDate` and `endDate`) tells you how recent it is.

**Is it legal?**
The actor reads data that CMS publishes openly on its open data websites for anyone to use. It does not log in to anything. How you use the data is up to you: follow CMS's terms and the law where you live.

**Is this an official CMS product?**
No. It is an independent tool and is not affiliated with or endorsed by the Centers for Medicare and Medicaid Services.

**Do I need an Apify account?**
Yes. Actors run from an Apify account, and a free account is enough to start: it includes $5 of platform usage every month. You can [sign up here](https://www.apify.com?fpr=ymnoit). This is a referral link and it costs you nothing.

**Is there a limit on the free plan?**
Yes. A run started from a free plan account delivers the first 10 results, then ends with a message and a link to the plans. Any paid plan returns everything you ask for, up to your own limit. The price per result is the same on every plan.

### More from The One Dollar Store

Every actor here costs $1 per 1,000 results, platform usage included. See the whole store: https://apify.com/one_dollar_store

**Health and science**

- [NPI Provider Search](https://apify.com/one_dollar_store/npi-providers-search): US healthcare providers from the NPI registry.
- [PubMed Articles Scraper](https://apify.com/one_dollar_store/pubmed-articles-scraper): Biomedical articles with abstracts and authors.
- [ClinicalTrials.gov Scraper](https://apify.com/one_dollar_store/clinical-trials-search): Clinical studies by condition, drug or sponsor.
- [Product Recalls Scraper](https://apify.com/one_dollar_store/consumer-product-recalls-cpsc): US consumer product recalls from the CPSC.
- [Crossref Scraper](https://apify.com/one_dollar_store/crossref-doi-metadata): Scholarly works by DOI, title or author.
- [EPA ECHO Scraper](https://apify.com/one_dollar_store/epa-echo-facility-compliance): US facility inspections and violations.
- [NIH RePORTER Scraper](https://apify.com/one_dollar_store/nih-reporter-grants): US NIH research grants and awards.
- [USGS Earthquakes Scraper](https://apify.com/one_dollar_store/usgs-earthquakes-scraper): Earthquake events with magnitude and place.
- [FDA Recalls Scraper](https://apify.com/one_dollar_store/fda-recalls-scraper): US FDA enforcement reports and recalls.
- [FDA 510(k) Scraper](https://apify.com/one_dollar_store/fda-510k-device-clearances): Cleared medical devices with applicant and date.

### Changelog

- October 2026: first release.

# Actor input Schema

## `datasets` (type: `array`):

Hospital list with star ratings, or one or more quality measure tables. Measure tables have one row per hospital and measure, so they are much larger. Each row names its dataset.

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

Two letter state codes, one per line, for example CA or NY. Leave empty for all states and territories.

## `city` (type: `string`):

Only hospitals in this city or town, for example Boston.

## `hospitalName` (type: `string`):

Only hospitals whose name contains this text, for example Mayo or Children's.

## `facilityIds` (type: `array`):

Six character CMS Certification Numbers (CCN), one per line, for example 010001. Use them to read one or a few specific hospitals.

## `measureIds` (type: `array`):

Only these measures, one per line, for example MORT_30_AMI or HAI_1_SIR. Applies to the measure tables, not to the hospital list.

## `minOverallRating` (type: `integer`):

Only hospitals rated at least this many stars (1 to 5). Hospitals without a rating are left out. Applies to the hospital list. 0 means no filter.

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

Stop after this many rows. About 5,400 hospitals are listed; measure tables hold tens of thousands of rows. Minimum 10, maximum 10,000.

## Actor input object example

```json
{
  "datasets": [
    "hospital-info"
  ],
  "states": [
    "CA"
  ],
  "city": "Boston",
  "hospitalName": "Mayo",
  "minOverallRating": 0,
  "maxItems": 100
}
```

# Actor output Schema

## `results` (type: `string`):

No description

## `summary` (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 = {
    "datasets": [
        "hospital-info"
    ],
    "states": [
        "CA"
    ],
    "maxItems": 100
};

// Run the Actor and wait for it to finish
const run = await client.actor("one_dollar_store/cms-hospital-quality-data").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 = {
    "datasets": ["hospital-info"],
    "states": ["CA"],
    "maxItems": 100,
}

# Run the Actor and wait for it to finish
run = client.actor("one_dollar_store/cms-hospital-quality-data").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 '{
  "datasets": [
    "hospital-info"
  ],
  "states": [
    "CA"
  ],
  "maxItems": 100
}' |
apify call one_dollar_store/cms-hospital-quality-data --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,one_dollar_store/cms-hospital-quality-data"
        }
    }
}
```

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/Myrzp3PQgEKCRNSzE/builds/jK6VVSmXG1i6wgS94/openapi.json
