CMS Provider Data - hospitals, nursing homes, ratings (API)
Pricing
from $5.00 / 1,000 records
CMS Provider Data - hospitals, nursing homes, ratings (API)
Pull CMS Provider Data Catalog datasets - Hospital General Information, Nursing Home Provider Information, Home Health Care Agencies, Dialysis Facilities - filtered by state, city or name. One row per facility with the dataset's own columns (id, name, address, phone, type, ownership, star ratings).
Pricing
from $5.00 / 1,000 records
Rating
0.0
(0)
Developer
RetrainMap Team
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
a day ago
Last modified
Categories
Share
CMS Provider Data — hospitals, nursing homes, ratings (API)
One row per facility from the CMS Provider Data Catalog (https://data.cms.gov/provider-data) — the data behind Medicare Care Compare. Pick a dataset (Hospital General Information, Nursing Home Provider Information, Home Health Care Agencies, Dialysis Facility listing), filter by state, city or name, and get the dataset's own columns — facility id, name, address, city, state, zip, phone, type, ownership, star ratings and measure counts — one flat row per facility, ready for CSV or JSON.
The default input (Hospital General Information, state NC, 500 rows) succeeds within 5 minutes and returns rows (North Carolina has ~120 hospitals) — Apify auto-tests it daily.
Data source and status
| Publisher | Centers for Medicare & Medicaid Services (CMS) — Provider Data Catalog |
| API | https://data.cms.gov/provider-data/api/1/ — public, no key (documentation: https://data.cms.gov/provider-data/docs) |
| What this Actor reads | The catalog (metastore/schemas/dataset/items) once per run to resolve the dataset id by title, then the datastore query endpoint (datastore/query/{id}/0) with limit=500, offset, count=true and conditions[] for state (=), city and name (like, case-insensitive); at most two requests per second |
| Refresh cadence | CMS refreshes each dataset on its own schedule (hospital data roughly quarterly, nursing home data monthly, home health and dialysis data quarterly). The Actor reads live on every run; the catalog's modified date for the dataset is written to every row as _dataset_modified and _fetched_at is the fetch time |
| Copyright | Works of the United States Government are not subject to copyright in the U.S. (17 U.S.C. §105). The data are public; please cite CMS as the source |
| Known caveats | Dataset ids change when CMS re-publishes a dataset — the Actor resolves the id by exact title + theme on every run and fails with the candidate list if the title is not found; all values are strings exactly as the datastore returns them (ratings such as "4", footnote columns often empty); % and _ inside city / name filters are SQL LIKE wildcards |
Honesty note: the rows are the dataset's own columns, nothing is inferred, joined or re-scored by this Actor; CMS ratings and measures are informational, not medical advice, and a run stops with an error rather than guess when the API's shape changes.
Identification: the requests carry a product-token User-Agent and the operator's contact
address in the standard From: header (RFC 9110 §10.1.2).
Input
| Field | Type | Meaning |
|---|---|---|
dataset | select | hospital_general_info (default), nursing_home_provider_info, home_health_agencies, dialysis_facilities |
state | 2-letter code | Optional, exact match, e.g. NC (prefilled) |
city | string | Optional substring of the city column |
name_contains | string | Optional substring of the facility / provider name column |
max_records | integer | Default 500, at most 20,000 |
request_interval_ms | integer | Default 500 (floor 250) |
contact_email | string | Sent in the From: header |
Example — nursing homes in Houston, Texas:
{ "dataset": "nursing_home_provider_info", "state": "TX", "city": "Houston", "max_records": 200 }
Output (dataset row)
Every column the dataset carries, unchanged, plus _dataset (the preset key), _dataset_id,
_dataset_title, _dataset_modified, _source_url (the dataset's page on data.cms.gov) and
_fetched_at. Common columns by dataset (measured 2026-09-04):
| Dataset | Id | Name | Address / city / state / zip | Phone | Type / ownership | Ratings |
|---|---|---|---|---|---|---|
| hospital_general_info (~5,400 rows) | facility_id | facility_name | address, citytown, state, zip_code, countyparish | telephone_number | hospital_type, hospital_ownership, emergency_services | hospital_overall_rating (1–5) plus mortality / safety / readmission / patient-experience / timeliness measure counts |
| nursing_home_provider_info (~14,700 rows) | cms_certification_number_ccn | provider_name, legal_business_name | provider_address, citytown, state, zip_code, countyparish | telephone_number | provider_type, ownership_type, number_of_certified_beds, chain_name | overall_rating, health_inspection_rating, qm_rating, staffing_rating, special_focus_status, abuse_icon |
| home_health_agencies (~11,000 rows) | cms_certification_number_ccn | provider_name | address, citytown, state, zip_code | telephone_number | type_of_ownership, services offered (offers_nursing_care_services …) | quality_of_patient_care_star_rating plus outcome measures |
| dialysis_facilities (~7,700 rows) | cms_certification_number_ccn | facility_name | address_line_1, citytown, state, zip_code, countyparish | telephone_number | profit_or_nonprofit, chain_owned, chain_organization, of_dialysis_stations | five_star, mortality / hospitalization / readmission categories |
A run summary (dataset id and modified date, filters, the API's own match count, pages,
requests, whether the pay-per-event budget stopped the run) is stored as RUN_SUMMARY in
the run's key-value store.
Pricing (pay per event)
| Event | Price |
|---|---|
run-start — once per run | $0.10 |
record — per row written | $0.005 |
The default pull (NC hospitals, ~120 rows) costs about $0.70; 1,000 facilities cost $5.10. Rows stop when your run's maximum charge is reached; the run summary says so.
Operator
Steelyard Ventures LLC (RetrainMap) — info@steelyardclinical.com. Not affiliated with CMS. The Actor writes only to its own dataset and key-value store; it stores no credentials and sends nothing else.