# CMS Home Health Hospice Dialysis Facility Leads (`infocomp/cms-facility-leads`) Actor

CMS home health, hospice and dialysis facility leads from the official Provider Data Catalog API. Filter by state, city, ZIP, ownership. Facility-level only: name, CCN, address, facility phone, ownership, services. $2/1,000. Not affiliated with CMS.

- **URL**: https://apify.com/infocomp/cms-facility-leads.md
- **Developed by:** [InfoComp Data](https://apify.com/infocomp) (community)
- **Categories:** Lead generation, Business, Developer tools
- **Security:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$2.00 / 1,000 facility 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

## CMS Home Health, Hospice & Dialysis Leads | Business Leads

**Build lead lists of Medicare-certified home health agencies, hospices and dialysis facilities from CMS's official open data.** Filter by facility type, US state, city, ZIP code or prefix, ownership type and facility name. You get one clean row per facility (per CMS Certification Number, CCN), with its name as CMS lists it, registered address, county, facility phone, ownership, chain, services offered, certification date, star rating and a link to its Medicare Care Compare page.

- 🏥 **Three facility types in one tool:** about 12,400 home health agencies, 6,700 hospices and 7,500 dialysis facilities across the US.
- 🎯 **Filters:** facility types, states, cities, ZIP codes or 3-4 digit ZIP prefixes, ownership (for-profit, non-profit, government), facility name.
- 🔒 **Facility-level data only:** no administrator, owner or contact person names, and no patient data. The phone number is the facility's main number as CMS lists it.
- 💲 **$2.00 per 1,000 facilities** ($0.002 per row). No start fee. Empty and failed runs are free.

> **Data source:** Centers for Medicare & Medicaid Services (CMS), Provider Data Catalog (https://data.cms.gov/provider-data): datasets "Home Health Care Agencies" (6jpm-sxkc), "Hospice - Provider Data" (252m-zfp9) and "Dialysis Facility - Listing by Facility" (23ew-n7w9). These are the same data Medicare Care Compare uses. Works of the U.S. Government are in the public domain. Every row has a `source` credit and a `sourceUrl` link to the CMS API record.
>
> **Disclaimer:** Not affiliated with, endorsed by or sponsored by CMS, Medicare or HHS. Medicare certification is not an endorsement. Confirm details on Medicare Care Compare (each row's `careCompareUrl`) before you rely on them.

### What does it do?

1. It turns your filters into filtered, paged queries to the **official CMS Provider Data Catalog API** (no API key needed), 500 facilities per request, sorted by CCN. It asks only for facility-level columns, never quality measures or patient counts.
2. **Hospices are de-duplicated.** The hospice dataset has one row per hospice per quality measure (about 453,000 rows). The Actor groups them on the CMS side and keeps one row per CCN.
3. It stops as soon as it has **Max results** facilities, or when it reaches the maximum cost you set for the run.

In local tests on 2026-11-02, the default input (all three types in New Hampshire, up to 100 facilities) saved **70 facilities in 1.3 to 1.4 seconds** of Actor time (6 CMS requests, about 4 seconds wall time including startup) and peaked at **70 MB** of memory. All 26,549 US facilities of all three types took 153 seconds (57 requests) and peaked at 76 MB.

### Who is it for?

- **Home care and dialysis staffing firms and recruiters:** map agencies and clinics by state, city or ZIP.
- **Medical supply, DME, pharmacy and software vendors:** build territory lists of home health agencies, hospices and dialysis centers.
- **Consultants, investors and market researchers:** size a market by ownership, chain or services.

### Input

| Field | Default | What it does |
|---|---|---|
| `facilityTypes` | all three | Any of `homeHealth`, `hospice`, `dialysis`. Rows are filled in this order. |
| `states` | `["NH"]` | US states: `TX`, `ca`, `New Hampshire`... Empty = all states. |
| `cities` | all | City names as CMS lists them (case doesn't matter), e.g. `Houston`. |
| `zipCodes` | all | 5-digit ZIP codes (`78701`) or 3-4 digit prefixes (`787` = Austin area). |
| `ownershipTypes` | all | `forProfit`, `nonProfit`, `government` (government exists for home health only). CMS's hospice provider dataset has no ownership column, so hospices are skipped when this filter is set. |
| `companyName` | empty | A word or phrase matched against the facility name, e.g. `davita`. |
| `maxResults` | 100 | Stop after this many facilities in total (up to 50,000). |
| `maxApiCalls` | 200 | Safety cap on CMS API requests per run (each reads up to 500 facilities). |

```json
{
  "facilityTypes": ["homeHealth", "dialysis"],
  "states": ["TX"],
  "cities": ["Houston", "Dallas"],
  "ownershipTypes": ["forProfit"],
  "maxResults": 1000
}
```

All filters are combined with AND. Values inside one filter are combined with OR.

### What's in each row?

| Area | Fields |
|---|---|
| Facility | `companyName` (facility name as CMS lists it), `facilityType`, `facilityTypeKey`, `ccn` (CMS Certification Number) |
| Address and phone | `street`, `city`, `state`, `zipCode`, `county` (hospice and dialysis), `country`, `address` (one line), `phone` (facility phone as CMS lists it) |
| Ownership | `ownershipType` (For-profit / Non-profit / Government), `ownershipTypeAsListed`, `chainOwned`, `chainOrganization` (dialysis) |
| Services and quality | `servicesOffered` (home health and dialysis), `dialysisStations`, `certificationDate`, `starRating`, `starRatingType`, `cmsRegion` (hospice), `esrdNetwork` (dialysis) |
| Links and credit | `careCompareUrl` (Medicare Care Compare page), `cmsDatasetId`, `sourceUrl` (the CMS API record), `source`, `disclaimer`, `dataLastUpdated` (dataset's last CMS update), `retrievedAt` |

There are **no person names, personal emails or patient data** in the output. The Actor requests only a fixed list of facility-level columns from CMS. A run summary (filters, counts per facility type, CMS requests) is saved as `RUN_SUMMARY` in the run's key-value store.

### Output example

Real rows from a local run of the default input on 2026-11-02, unedited. A dialysis facility:

```json
{
  "companyName": "FMC New Hampshire Kidney Center (FMC)",
  "facilityType": "Dialysis facility",
  "facilityTypeKey": "dialysis",
  "ccn": "302500",
  "street": "248 Pleasant Street, Pillsbury Bldg., G400",
  "city": "CONCORD",
  "state": "NH",
  "zipCode": "03301",
  "county": "Merrimack",
  "country": "US",
  "address": "248 Pleasant Street, Pillsbury Bldg., G400, CONCORD, NH 03301",
  "phone": "(603) 224-9996",
  "ownershipType": "For-profit",
  "ownershipTypeAsListed": "Profit",
  "chainOwned": true,
  "chainOrganization": "Fresenius Medical Care",
  "servicesOffered": [
    "In-center hemodialysis",
    "Peritoneal dialysis",
    "Home hemodialysis training"
  ],
  "dialysisStations": 16,
  "certificationDate": "1977-08-31",
  "starRating": 1,
  "starRatingType": "Dialysis facility five-star rating",
  "cmsRegion": null,
  "esrdNetwork": "1",
  "careCompareUrl": "https://www.medicare.gov/care-compare/details/dialysis-facility/302500",
  "cmsDatasetId": "23ew-n7w9",
  "sourceUrl": "https://data.cms.gov/provider-data/api/1/datastore/query/23ew-n7w9/0?conditions%5B0%5D%5Bproperty%5D=cms_certification_number_ccn&conditions%5B0%5D%5Bvalue%5D=302500&conditions%5B0%5D%5Boperator%5D=%3D&limit=10",
  "source": "Centers for Medicare & Medicaid Services (CMS), Provider Data Catalog (https://data.cms.gov/provider-data), public U.S. government data.",
  "disclaimer": "Not affiliated with, endorsed by or sponsored by CMS, Medicare or HHS. Facility-level data as listed by CMS; Medicare certification is not an endorsement. Confirm details on Medicare Care Compare (careCompareUrl) before you rely on them.",
  "dataLastUpdated": "2026-10-22",
  "retrievedAt": "2026-11-02T18:24:53Z"
}
```

A hospice (one row per CCN, de-duplicated from its quality-measure rows):

```json
{
  "companyName": "GRANITE VNA, INC.",
  "facilityType": "Hospice",
  "facilityTypeKey": "hospice",
  "ccn": "301500",
  "street": "30 PILLSBURY STREET",
  "city": "CONCORD",
  "state": "NH",
  "zipCode": "03301",
  "county": "MERRIMACK",
  "country": "US",
  "address": "30 PILLSBURY STREET, CONCORD, NH 03301",
  "phone": "(603) 224-4093",
  "ownershipType": null,
  "ownershipTypeAsListed": null,
  "chainOwned": null,
  "chainOrganization": null,
  "servicesOffered": null,
  "dialysisStations": null,
  "certificationDate": null,
  "starRating": null,
  "starRatingType": null,
  "cmsRegion": "1",
  "esrdNetwork": null,
  "careCompareUrl": "https://www.medicare.gov/care-compare/details/hospice/301500",
  "cmsDatasetId": "252m-zfp9",
  "sourceUrl": "https://data.cms.gov/provider-data/api/1/datastore/query/252m-zfp9/0?conditions%5B0%5D%5Bproperty%5D=cms_certification_number_ccn&conditions%5B0%5D%5Bvalue%5D=301500&conditions%5B0%5D%5Boperator%5D=%3D&limit=10",
  "source": "Centers for Medicare & Medicaid Services (CMS), Provider Data Catalog (https://data.cms.gov/provider-data), public U.S. government data.",
  "disclaimer": "Not affiliated with, endorsed by or sponsored by CMS, Medicare or HHS. Facility-level data as listed by CMS; Medicare certification is not an endorsement. Confirm details on Medicare Care Compare (careCompareUrl) before you rely on them.",
  "dataLastUpdated": "2026-08-07",
  "retrievedAt": "2026-11-02T18:24:53Z"
}
```

### Pricing

**$2.00 per 1,000 facilities.** One `facility` event ($0.002) per saved row. There's no start fee and no run fee. Runs that find nothing, and runs that fail because the CMS API can't be reached, are free. If you set a maximum cost per run, the Actor stops cleanly before it goes over.

### Good to know

- **Freshness:** `dataLastUpdated` shows when CMS last updated each dataset (on 2026-11-02: home health 2026-09-21, hospice 2026-08-07, dialysis 2026-10-22). CMS refreshes these datasets on its own schedule, usually quarterly or monthly.
- **Hospice rows have fewer fields.** CMS's hospice provider dataset has no ownership type, services, certification date or star rating, so those fields are `null` for hospices.
- **Names are as listed.** Facility names, addresses and phones are exactly as CMS lists them. A few facilities may be named after a person; that's the business name on file with CMS.
- **Care Compare links** use Medicare's public page pattern for each CCN. The Actor never fetches medicare.gov.
- Use the data in line with your own legal and marketing obligations, such as CAN-SPAM, the TCPA and state privacy laws.

### Related InfoComp tools

- [Form D Funding Leads: New Startup & Private Raise Filings](https://apify.com/infocomp/form-d-funding-leads): companies that just raised private capital, from public SEC EDGAR Form D filings.
- [New Business Filings Leads: Colorado | Business Leads](https://apify.com/infocomp/new-business-filings-colorado): newly registered Colorado LLCs, corporations and nonprofits from the State's public open data.
- [FMCSA New Carrier Leads: New MC Authorities | Business Leads](https://apify.com/infocomp/fmcsa-new-carrier-leads): trucking companies, freight brokers and forwarders whose FMCSA operating authority was just granted.
- [FMCSA Carrier Vetting & Watchlist: Authority, Insurance, Flags](https://apify.com/infocomp/fmcsa-carrier-vetting): bulk-check USDOT numbers: operating authority, insurance on file, safety flags and change alerts from FMCSA public data.
- [FDA Medical Device Establishment Leads | Business Leads](https://apify.com/infocomp/fda-device-establishment-leads): medical device makers, contract manufacturers and sterilizers from FDA registration data via openFDA.
- [OIG Exclusion Check & Medicare Opt-Out Screen - Bulk NPI LEIE](https://apify.com/infocomp/oig-exclusion-optout-screen): bulk-check NPIs against the HHS-OIG LEIE file and the CMS Medicare opt-out list.
- [SAM.gov Contract Opportunities Scraper: Federal RFPs & Bids](https://apify.com/infocomp/sam-gov-opportunities): US federal contract opportunities (RFPs, solicitations, awards) from the official SAM.gov API.
- [Tender Feed API: EU TED, UK Find a Tender & Contracts Finder](https://apify.com/infocomp/eu-uk-tenders): EU and UK public tenders in one feed, from official TED, Find a Tender and Contracts Finder APIs.
- [Greenhouse, Lever, Ashby & SmartRecruiters Jobs Scraper API](https://apify.com/infocomp/ats-jobs-feed): live job postings from Greenhouse, Lever, Ashby and SmartRecruiters via their public job-board APIs.
- [US Address Geocoder & FEMA Flood Zone Risk API](https://apify.com/infocomp/us-address-risk-enricher): batch-geocode US addresses with the Census Bureau and add FEMA flood zone and National Risk Index ratings.
- [VIN Decoder Bulk: Specs, Recalls, MPG & Fuel Cost per Mile](https://apify.com/infocomp/bulk-vin-decoder-recalls-mpg): decode VINs in bulk with NHTSA vPIC, plus recall campaigns and EPA fuel economy.
- [Academic Paper Scraper: arXiv, PubMed, Crossref & OpenAlex API](https://apify.com/infocomp/scholarly-paper-search): search arXiv, PubMed, Crossref and OpenAlex in one run, de-duplicated by DOI.
- [HUD Multifamily Owner/Manager Leads | Business Leads](https://apify.com/infocomp/hud-multifamily-leads): HUD-assisted apartment properties with management company, firm phone, Section 8 contract expiry and REAC score.
- [Company Name to Website Finder & Enrichment | Business Leads](https://apify.com/infocomp/wikidata-company-finder): turn company names into official websites, HQ, employees, industry, ticker, LEI and SEC CIK from Wikidata.
- [FDA 510(k) New Clearance Leads | Business Leads](https://apify.com/infocomp/fda-510k-clearance-leads): companies that just got a medical device cleared by FDA: new 510(k) decisions from openFDA.

### FAQ

**Is this an official CMS list?** No. It's an independent tool built on CMS's public Provider Data Catalog. It is not affiliated with or endorsed by CMS, Medicare or HHS.

**Does it include contact people or administrators?** No, by design. You get the facility, its address, its main phone number as CMS lists it, ownership and services, and links to CMS's own records.

**Do I need an API key?** No. The CMS Provider Data Catalog API is keyless.

**Is it legal to use this data?** CMS publishes these datasets as public U.S. government data. Works of the U.S. Government are in the public domain. Use the results in line with your own legal and compliance obligations.

# Actor input Schema

## `facilityTypes` (type: `array`):

Which Medicare-certified facility types to include. Rows are filled in this order: home health, hospice, dialysis. Empty = all three.

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

Two-letter codes or US state names, e.g. TX, CA, New Hampshire. Empty = all states.

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

Optional. City names exactly as CMS lists them (case doesn't matter), e.g. Houston, Saint Louis. Empty = all cities.

## `zipCodes` (type: `array`):

Optional. 5-digit ZIP codes (78701) or 3-4 digit prefixes (787 = Austin area). Empty = all ZIPs.

## `ownershipTypes` (type: `array`):

Optional. Home health and dialysis only: CMS's hospice provider dataset has no ownership column, so hospices are skipped when this filter is set. Empty = all.

## `companyName` (type: `string`):

Optional. Word or phrase matched against the facility name as CMS lists it, e.g. davita or "visiting nurse".

## `maxResults` (type: `integer`):

Stop after this many facility rows in total. Each saved row is one $0.002 facility event.

## `maxApiCalls` (type: `integer`):

Safety cap. Each call reads up to 500 facilities. All ~26,500 US facilities of all three types take about 60 calls.

## Actor input object example

```json
{
  "facilityTypes": [
    "homeHealth",
    "hospice",
    "dialysis"
  ],
  "states": [
    "NH"
  ],
  "cities": [],
  "zipCodes": [],
  "ownershipTypes": [],
  "maxResults": 100,
  "maxApiCalls": 200
}
```

# 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 = {
    "facilityTypes": [
        "homeHealth",
        "hospice",
        "dialysis"
    ],
    "states": [
        "NH"
    ],
    "maxResults": 100
};

// Run the Actor and wait for it to finish
const run = await client.actor("infocomp/cms-facility-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 = {
    "facilityTypes": [
        "homeHealth",
        "hospice",
        "dialysis",
    ],
    "states": ["NH"],
    "maxResults": 100,
}

# Run the Actor and wait for it to finish
run = client.actor("infocomp/cms-facility-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 '{
  "facilityTypes": [
    "homeHealth",
    "hospice",
    "dialysis"
  ],
  "states": [
    "NH"
  ],
  "maxResults": 100
}' |
apify call infocomp/cms-facility-leads --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,infocomp/cms-facility-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/t1RgWZddrwcIelV6p/builds/ZXg9njmWxXn8j8K4q/openapi.json
