# CMS Home Health & Hospice Lookup (`sovereign_workspace/cms-home-health-hospice-lookup`) Actor

One event per home health agency or hospice: CMS Care Compare star ratings, patient-survey stars, quality measures with periods, services, ownership and contact details, filtered by state, ZIP, city, CCN, ownership, services or rating. Optional verified NPI match and change watch.

- **URL**: https://apify.com/sovereign\_workspace/cms-home-health-hospice-lookup.md
- **Developed by:** [Chase Mariano](https://apify.com/sovereign_workspace) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $10.00 / 1,000 agency-records

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 Home Health & Hospice Lookup (Care Compare + NPI)

One **event per agency**. Each record is one joined profile of a
Medicare-certified **home health agency** or **hospice** from CMS's
Care Compare data:

- contact details (CMS-listed address and phone) and ownership;
- services offered: the six home health services, or a hospice's levels
  of care;
- the **home health quality-of-patient-care star** (half stars);
- the **patient-survey summary star**: HHCAHPS for home health, CAHPS
  Hospice for hospices;
- on request, the survey topic results, the **quality measures** with
  their **CMS measure periods**, and the hospice profile (average daily
  census, patient mix, care settings).

Filter by state, city, ZIP, CCN, name, ownership, services or minimum
star. It's built for agency business-development and quality teams
benchmarking local competitors, and for referral networks (discharge
planners, placement firms, ACOs) that need a structured list of the
agencies serving an area.

It isn't a CSV dump. CMS splits this across six datasets, stores the
hospice measures one row per measure, and keeps every column as text.
This Actor joins them by CCN, pivots the hospice rows into named
measures, and types the values.

**Optional NPI match** (`enrich_npi`) adds the agency's organization NPI
from NPPES **only when the match is verifiable or unambiguous**: an NPPES
identifier that carries the CCN, or a single NPPES organization at the
agency's ZIP with the right taxonomy (251E00000X home health, 251G00000X
hospice). CMS data has no NPI, and CMS names often differ from NPPES
legal names. So expect an NPI on **about a third** of agencies; in a
Vermont test, 6 of 18 matched. Every record says how it matched in
`npi_match`, and nothing is guessed.

**Watch mode** (`changes_only`) reports only agencies whose star
ratings, ownership, phone or address changed since your last run, plus
agencies new to or gone from your watch. Each change lists the changed
fields and their previous values. CMS refreshes home health data
quarterly (next update announced for 2026-10-21) and hospice data on
its own cycle; each item carries `data_modified`. Schedule watch runs
monthly. The first watch run records a baseline and returns nothing.

**Pricing: pay per event.** `agency-record` is charged once per agency
record (or change) returned. A query or watch run with no results costs
you nothing.

### Input

```json
{"states": ["VT"], "provider_types": ["hospice"], "min_survey_star": 4}
```

Home health agencies in a set of ZIP codes that offer therapy, with NPIs:

```json
{"zips": ["05446", "05401", "05403"], "provider_types": ["home_health"],
 "services": ["physical_therapy", "occupational_therapy"], "enrich_npi": true}
```

A competitor set by CCN, watched for changes:

```json
{"ccns": ["477000", "471500", "477019"], "changes_only": true}
```

At least one filter is required: the Actor never returns the whole
country unfiltered.

- **Home health only:** `services` and `min_quality_star`, because
  hospices have no such CMS field. Set `provider_types` to
  `["home_health"]` to use them.
- **Star minimums:** an unrated agency never meets one. CMS has no
  survey star for about 63% of home health agencies.
- **Watch mode:** a watch can cover up to 10,000 agencies. Star
  minimums match an agency's old **or** new values, so one that drops
  out of your range shows up as a change.
- **Ordering:** lookups are sorted by state, city and name, and `limit`
  applies across both provider types.

### Example output (one dataset item per agency)

A real record, with the three lists shortened to their first entries:

```json
{"provider_type": "hospice", "ccn": "471500",
 "name": "UVMHN HOME HEALTH AND HOSPICE",
 "address": "1110 PRIM ROAD, SUITE 1", "city": "COLCHESTER", "state": "VT",
 "zip": "05446", "county": "CHITTENDEN", "phone": "(802) 658-1900",
 "ownership": "Non-Profit", "ownership_group": "non_profit",
 "certification_date": "1984-10-01",
 "services": {"home_care_and_other_levels": true,
              "routine_home_care_only": false},
 "quality_star_rating": null, "survey_summary_star_rating": 5,
 "survey": {"summary_star_rating": 5, "completed_surveys": null,
            "response_rate_pct": null, "period_start": "2023-10-01",
            "period_end": "2025-09-30",
            "measures": [{"measure_code": "EMO_REL_BBV",
                          "measure_name": "The hospice team did not provide the right amount of emotional and spiritual support",
                          "star_rating": null, "percent": 6}]},
 "quality_measures": [{"measure_code": "H_001_01",
                       "measure_name": "Hospice and Palliative Care Treatment Preferences",
                       "score": 100.0, "performance_category": null,
                       "denominator": 735, "percentile": null,
                       "period_start": "2024-10-01",
                       "period_end": "2025-09-30"}],
 "profile": [{"code": "Average_Daily_Census", "name": "Average Daily Census",
              "value": 88, "period_start": "2024-01-01",
              "period_end": "2024-12-31"}],
 "npi": "1922042712", "npi_match": "identifier_contains_ccn",
 "npi_candidates": 1, "data_modified": "2026-08-19",
 "care_compare_url": "https://www.medicare.gov/care-compare/details/hospice/471500",
 "change_type": null, "changed_fields": [], "previous": null}
```

### Output fields

One dataset item per agency; every field is always present (empty or
null when CMS has no value). Defined in `.actor/dataset_schema.json`.

| Field | Type | Description |
|---|---|---|
| `provider_type` | string | `home_health` or `hospice` |
| `ccn` | string | CMS Certification Number (CCN) |
| `name` | string | Agency name as CMS lists it |
| `address` | string | Street address (CMS-listed) |
| `city` | string | City |
| `state` | string | State |
| `zip` | string | 5-digit ZIP code |
| `county` | string | County (hospices only; CMS gives no county for home health) |
| `phone` | string | CMS-listed phone, formatted (XXX) XXX-XXXX |
| `ownership` | string | CMS ownership type, verbatim |
| `ownership_group` | string | `for_profit`, `non_profit`, `government`, `other` or `combination` |
| `certification_date` | string | Medicare certification date, YYYY-MM-DD |
| `services` | object | Home health: `nursing`, `physical_therapy`, `occupational_therapy`, `speech_pathology`, `medical_social`, `home_health_aide` (true/false). Hospice: `routine_home_care_only`, `home_care_and_other_levels` |
| `quality_star_rating` | number | Home health quality of patient care star (half stars); null for hospices, which CMS doesn't star |
| `survey_summary_star_rating` | integer | HHCAHPS or CAHPS Hospice summary star rating |
| `survey` | object | `summary_star_rating`, `completed_surveys`, `response_rate_pct` (home health), `period_start`, `period_end`, and `measures` (topic results: `measure_code`, `measure_name`, `star_rating`, `percent`; null when `include_measures` is off) |
| `quality_measures` | array | `measure_code`, `measure_name`, `score`, `performance_category` (home health DTC/PPR/PPH), `denominator` and `percentile` (hospice, where CMS gives them), `period_start`, `period_end`; null when `include_measures` is off |
| `profile` | array | Hospice only: average daily census, patient mix by condition, care settings, Medicare Advantage / dual-eligible patients (`code`, `name`, `value`, period); null for home health |
| `npi` | string | Organization NPI from NPPES, only when the match is verifiable or unambiguous |
| `npi_match` | string | `identifier_contains_ccn`, `single_candidate_zip_taxonomy`, `ambiguous`, `no_candidate`, `lookup_failed` or `not_requested` |
| `npi_candidates` | integer | NPPES organizations at the agency's ZIP with the provider type's taxonomy |
| `data_modified` | string | CMS dataset modified date for this provider type |
| `care_compare_url` | string | Medicare Care Compare page |
| `change_type` | string | Watch mode: `new`, `changed` or `removed`; null in lookup mode |
| `changed_fields` | array | Watch mode: the tracked fields that changed |
| `previous` | object | Watch mode: the previous values of the changed fields |

The home health quality measures are timely initiation of care, flu
shot, improvement in walking, bed transfer, bathing, breathing and oral
medications, pressure ulcer/injury, timely medication actions, falls
with major injury, discharge function score, transfer of health
information (to provider and to patient), discharge to community,
potentially preventable readmission and hospitalization (risk-
standardized rates with CMS's performance category), and Medicare
spending per episode. The hospice quality measures are the HIS/HOPE
measures (H\_001–H\_011) and the Hospice Care Index (H\_012) with its
components.

Runs stop cleanly at your max-charge limit: nothing is pushed past what
you agreed to pay for, and the joins and NPI lookups are made only for
records within the limit and the budget. A failed CMS join fails the run
before anything is charged. A failed NPI lookup never fails a run; the
record says `lookup_failed`. In watch mode an agency is saved to your
snapshot only once it's pushed, so a change cut off by the limit or the
budget is reported exactly once, on a later run. If more than 20% of a
watch of 25+ agencies vanishes at once, the run treats it as a CMS feed
gap: it fails, charges nothing and keeps your snapshot.

Related: the **CMS Nursing Home Monitor** and **CMS Hospital Quality
Feed** for the rest of a post-acute or acute network, and **NPI Provider
Lookup** for affiliated clinicians.

### Source and attribution

Data: **Centers for Medicare & Medicaid Services (CMS)**, Provider Data
Catalog:

- **Home health:** Home Health Care Agencies
  (<https://data.cms.gov/provider-data/dataset/6jpm-sxkc>), Home Health
  Care - Patient Survey (HHCAHPS)
  (<https://data.cms.gov/provider-data/dataset/ccn4-8vby>; the Actor
  finds the current survey year by title), and Home Health Care -
  Measure Date Range (<https://data.cms.gov/provider-data/dataset/c886-nwpj>).
- **Hospice:** Hospice - General Information
  (<https://data.cms.gov/provider-data/dataset/yc9t-dgbk>), Hospice -
  Provider Data (<https://data.cms.gov/provider-data/dataset/252m-zfp9>)
  and Hospice care - Provider CAHPS Hospice Survey Data
  (<https://data.cms.gov/provider-data/dataset/gxki-hrr8>).
- **NPI:** the CMS NPPES NPI Registry API
  (<https://npiregistry.cms.hhs.gov/>).

CMS publishes these as works of the U.S. Government in the public
domain. This Actor isn't affiliated with or endorsed by CMS, HHS or
Medicare.

The data is CMS's as published. This Actor only:

- filters it;
- converts text columns to numbers, booleans, ISO dates and nulls;
- formats phone numbers;
- removes CMS's `|…|` emphasis marks from hospice survey labels;
- pivots the hospice measure rows by code;
- joins the datasets by CCN;
- adds an NPPES NPI when the match rules above are met;
- in watch mode, compares with your last run.

Check CMS's Care Compare before any decision about an agency's care.

# Actor input Schema

## `profile` (type: `string`):

Named config preset applied at start. Any field you set explicitly below overrides the preset.

## `provider_types` (type: `array`):

Which CMS provider types to return. Leave empty for both.

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

Two-letter state codes, e.g. VT, NY.

## `cities` (type: `array`):

City names as CMS spells them (matched in capitals, e.g. BURLINGTON).

## `zips` (type: `array`):

5-digit ZIP codes of the agency's listed address.

## `ccns` (type: `array`):

6-character CCNs, e.g. 477000 (home health) or 471500 (hospice).

## `name_contains` (type: `string`):

Part of the agency name as CMS lists it (not case-sensitive).

## `ownership` (type: `array`):

CMS ownership type, normalized across both provider types.

## `services` (type: `array`):

Only agencies that offer every listed service. Home health only: set Provider types to home health.

## `min_quality_star` (type: `string`):

Home health quality of patient care star rating, in half stars. Unrated agencies never match.

## `min_survey_star` (type: `integer`):

HHCAHPS (home health) or CAHPS Hospice summary star rating. Unrated agencies never match.

## `include_measures` (type: `boolean`):

Add the quality measures (with CMS measure periods), survey topic results and the hospice profile to each record.

## `enrich_npi` (type: `boolean`):

Look up the agency's organization NPI in NPPES. Filled only when the match is verifiable or unambiguous; each record says how it matched. About a third of agencies get an NPI.

## `changes_only` (type: `boolean`):

Report only agencies whose star ratings, ownership, phone or address changed since the last run for the same filters. The first run records a baseline and returns nothing.

## `state_key` (type: `string`):

Name for this watch's saved state. Leave empty to derive it from the filters.

## `allow_mass_removal` (type: `boolean`):

Watch mode stops, charging nothing, if more than 20% of 25+ watched agencies vanish at once (usually a CMS feed gap). Turn on to accept it.

## `limit` (type: `integer`):

Maximum number of agency records per run.

## Actor input object example

```json
{
  "states": [
    "VT"
  ],
  "include_measures": true,
  "enrich_npi": false,
  "changes_only": false,
  "allow_mass_removal": false,
  "limit": 100
}
```

# Actor output Schema

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

No description

## `errorCounters` (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": [
        "VT"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("sovereign_workspace/cms-home-health-hospice-lookup").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": ["VT"] }

# Run the Actor and wait for it to finish
run = client.actor("sovereign_workspace/cms-home-health-hospice-lookup").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": [
    "VT"
  ]
}' |
apify call sovereign_workspace/cms-home-health-hospice-lookup --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,sovereign_workspace/cms-home-health-hospice-lookup"
        }
    }
}
```

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/G3xDoIhDAmnQnnyfP/builds/G2dv3qfkGEtXLwdlo/openapi.json
