Skip to content
All data sources

CMS Provider Data API and MCP server

No authcms-providers

Medicare-enrolled healthcare facilities by location, with the quality ratings CMS publishes on Care Compare. Six national directories: hospitals, nursing homes, home health agencies, hospice, inpatient rehabilitation, and long-term care hospitals. Hospital search returns type, ownership, emergency service, and overall rating by city, ZIP, county, or state. Nursing home search is the only one with coordinates, so it is the only one that answers a point-and-radius question, and it carries ownership, chain, certified beds, average daily residents, five separate star ratings, staffing hours, and Special Focus Facility status. Assisted living, independent living, and memory care are state-licensed rather than Medicare-certified and appear nowhere in this catalog.

CMS Provider Data is published by CMS Provider Data Catalog: Hospital General Information, Nursing Home Provider Information, Home Health Care Agencies, Hospice, Inpatient Rehabilitation Facility, Long-Term Care Hospital and covers United States, hospitals: every state, the District of Columbia, and the territories that enroll Medicare providers. Address, city, state, ZIP, and county only, with no coordinates published., United States, nursing homes: every state and territory that certifies them, and every row carries a coordinate. This is the only directory here that supports a point and radius search., and United States, home health agencies, hospice, inpatient rehabilitation facilities, and long-term care hospitals: address only, with no coordinates published..

It refreshes on a schedule the publisher sets.

Last verified . That is when these facts were last rebuilt from the ParcelOps source registry, not when CMS Provider Data Catalog: Hospital General Information, Nursing Home Provider Information, Home Health Care Agencies, Hospice, Inpatient Rehabilitation Facility, Long-Term Care Hospital last refreshed the data itself.

API access

Your AI client reaches CMS Provider Data through one ParcelOps MCP endpoint, so there is no separate key to hold for it and no per-source client to write. Reaching it takes no credentials of your own.

Where it came from

PublisherCMS Provider Data Catalog: Hospital General Information, Nursing Home Provider Information, Home Health Care Agencies, Hospice, Inpatient Rehabilitation Facility, Long-Term Care Hospital

Freshness and coverage

FreshnessScheduled · Each file refreshes on its own cycle and publishes its own modified and released dates. When probed on 2026-08-10 the hospital file was released 2026-05-13 and the nursing home file 2026-08-06, roughly three months apart. Vintages are stamped per method and never shared.
Places coveredUnited States, hospitals: every state, the District of Columbia, and the territories that enroll Medicare providers. Address, city, state, ZIP, and county only, with no coordinates published., United States, nursing homes: every state and territory that certifies them, and every row carries a coordinate. This is the only directory here that supports a point and radius search., United States, home health agencies, hospice, inpatient rehabilitation facilities, and long-term care hospitals: address only, with no coordinates published.
Time covered… → present · A current enrollment snapshot, not a time series. Certification dates reach back to the 1960s for the oldest facilities, but each file describes only the state of enrollment as of its own release.
CredentialsNo credentials required

What this source cannot tell you

  • Anything outside United States, hospitals: every state, the District of Columbia, and the territories that enroll Medicare providers. Address, city, state, ZIP, and county only, with no coordinates published., United States, nursing homes: every state and territory that certifies them, and every row carries a coordinate. This is the only directory here that supports a point and radius search., and United States, home health agencies, hospice, inpatient rehabilitation facilities, and long-term care hospitals: address only, with no coordinates published.. A request past that edge comes back empty rather than approximated.
  • A current enrollment snapshot, not a time series. Certification dates reach back to the 1960s for the oldest facilities, but each file describes only the state of enrollment as of its own release.
  • Anything CMS Provider Data Catalog: Hospital General Information, Nursing Home Provider Information, Home Health Care Agencies, Hospice, Inpatient Rehabilitation Facility, Long-Term Care Hospital does not publish. ParcelOps returns this source as it stands and never fills a blank field from a different one.
  • This catalog lists Medicare-enrolled facilities only. Urgent care centers, freestanding emergency rooms, physician offices, retail clinics, and most outpatient sites never appear in it. An empty result means no Medicare-enrolled facility of the requested type matched the filters, never that there is no healthcare in the area.
  • Assisted living, independent living, and memory care are licensed by states rather than certified by Medicare, so they are absent from this catalog entirely. For a seniors-housing comparison set this connector sees skilled nursing and the continuing care retirement community flag, and is blind to the rest of the stack.
  • Star ratings are CMS methodology snapshots computed from a fixed measure set over a fixed reporting window. They are not a guarantee about care received, are not comparable across facility types, and change when CMS revises the methodology without any change at the facility.
  • A missing rating is missing, never zero and never poor. Hospitals publish the literal string "Not Available" and home health agencies publish "-". Both are returned as null. Critical Access Hospitals, the rural lane’s answer, are largely unrated by design.
  • Each dataset refreshes on its own cycle, so vintages differ per file and are stamped per method rather than shared. A hospital rating and a nursing home rating are not observations from the same moment.
  • Almost nothing in this catalog is geocoded. Nursing homes are the only facility directory wired here that publishes coordinates, so they are the only facility type this connector reports a distance for. Hospitals, hospice, home health, inpatient rehabilitation, and long-term care hospitals are address only, and no hospital distance is available at any radius.
  • An address is the address CMS holds for that certification number. It is not a parcel boundary, and a multi-building campus or a multi-site operator under one certification number resolves to a single point.
  • A nursing home coordinate is a point from the CMS geocoding pipeline, not a surveyed location, and CMS flags a minority of them with a footnote code whose crosswalk it does not publish through this API. Those rows are returned with the raw flag attached rather than a guessed meaning, and a distance computed from a flagged row deserves a second look.
  • The CMS Certification Number is the join key across these files, and hospitals publish it as facility_id in the same identifier space. It identifies a Medicare enrollment, not a legal entity, a building, or an owner.
  • Every column upstream is typed text, so range operators compare strings and a negative value sorts backwards. This connector never sends a longitude filter and never sends a negative number, and resolves longitude and distance locally instead.
  • Nothing here is patient level, physician level, or claims level. Every row is a facility, drawn from the same files that feed the public Care Compare site.

Methods (5)

A method is one call your agent can make against this source.

  • findHospitals

    read

    Find Medicare-enrolled hospitals by city, ZIP, county, or state, with type, ownership, and rating.

    Records returnedhospital
    How to get more resultsoffset (offsetField: offset, limitField: limit)
    FreshnessScheduled (source-level)
    Input schema
    {
      "type": "object",
      "properties": {
        "stateAlpha": {
          "type": "string",
          "pattern": "^[A-Za-z]{2}$",
          "description": "Two-letter state, district, or territory code such as TX."
        },
        "city": {
          "type": "string",
          "minLength": 2,
          "maxLength": 80,
          "description": "City or town exactly as CMS publishes it, such as AUSTIN."
        },
        "zipCode": {
          "type": "string",
          "pattern": "^\\d{5}$",
          "description": "Five-digit ZIP code such as 78704."
        },
        "county": {
          "type": "string",
          "minLength": 2,
          "maxLength": 80,
          "description": "County or parish name. The trailing \"County\" or \"Parish\" is optional."
        },
        "facilityName": {
          "type": "string",
          "minLength": 3,
          "maxLength": 120,
          "description": "Partial facility name. Matching is case-insensitive."
        },
        "hospitalType": {
          "type": "string",
          "enum": [
            "Acute Care Hospitals",
            "Critical Access Hospitals",
            "Psychiatric",
            "Childrens",
            "Rural Emergency Hospital",
            "Long-term",
            "Acute Care - Veterans Administration",
            "Acute Care - Department of Defense"
          ]
        },
        "ownershipType": {
          "type": "string",
          "minLength": 4,
          "maxLength": 80,
          "description": "Published ownership string such as \"Proprietary\" or \"Voluntary non-profit - Private\"."
        },
        "emergencyServices": {
          "type": "boolean",
          "description": "Whether the hospital reports emergency services."
        },
        "minOverallRating": {
          "type": "integer",
          "minimum": 1,
          "maximum": 5,
          "description": "Keep only facilities at or above this CMS star rating. Unrated facilities are excluded, not treated as low."
        },
        "limit": {
          "type": "integer",
          "minimum": 1,
          "maximum": 200
        },
        "offset": {
          "type": "integer",
          "minimum": 0,
          "maximum": 20000
        }
      },
      "required": [],
      "additionalProperties": false
    }

    No coordinates exist upstream, so no point and no distance.

  • findNursingHomes

    read

    Find Medicare-certified nursing homes near a point or in a place, with ratings, beds, and ownership.

    Records returnednursing_home
    How to get more resultsoffset (offsetField: offset, limitField: limit)
    FreshnessScheduled (source-level)
    Input schema
    {
      "type": "object",
      "properties": {
        "latitude": {
          "type": "number",
          "minimum": -90,
          "maximum": 90
        },
        "longitude": {
          "type": "number",
          "minimum": -180,
          "maximum": 180
        },
        "radiusMiles": {
          "type": "number",
          "minimum": 0.1,
          "maximum": 25,
          "description": "Straight-line miles from the point. Caps at 25 so the search stays complete within the upstream page limit."
        },
        "stateAlpha": {
          "type": "string",
          "pattern": "^[A-Za-z]{2}$",
          "description": "Two-letter state, district, or territory code such as TX."
        },
        "city": {
          "type": "string",
          "minLength": 2,
          "maxLength": 80,
          "description": "City or town exactly as CMS publishes it, such as AUSTIN."
        },
        "zipCode": {
          "type": "string",
          "pattern": "^\\d{5}$",
          "description": "Five-digit ZIP code such as 78704."
        },
        "county": {
          "type": "string",
          "minLength": 2,
          "maxLength": 80,
          "description": "County or parish name. The trailing \"County\" or \"Parish\" is optional."
        },
        "facilityName": {
          "type": "string",
          "minLength": 3,
          "maxLength": 120,
          "description": "Partial facility name. Matching is case-insensitive."
        },
        "ownershipType": {
          "type": "string",
          "minLength": 4,
          "maxLength": 80,
          "description": "Published ownership string such as \"For profit - Limited Liability company\"."
        },
        "minOverallRating": {
          "type": "integer",
          "minimum": 1,
          "maximum": 5,
          "description": "Keep only facilities at or above this CMS star rating. Unrated facilities are excluded, not treated as low."
        },
        "minCertifiedBeds": {
          "type": "integer",
          "minimum": 1,
          "maximum": 2000,
          "description": "Keep only facilities with at least this many certified beds."
        },
        "continuingCareRetirementCommunity": {
          "type": "boolean",
          "description": "Whether the facility sits on a continuing care retirement community campus."
        },
        "limit": {
          "type": "integer",
          "minimum": 1,
          "maximum": 200
        },
        "offset": {
          "type": "integer",
          "minimum": 0,
          "maximum": 20000
        }
      },
      "required": [],
      "additionalProperties": false
    }

    The one method with coordinates. latitude and longitude go together.

  • findSeniorCareProviders

    read

    Find home health agencies, hospice, inpatient rehab, or long-term care hospitals in a place.

    What you must providefacilityType
    Records returnedsenior_care_provider
    How to get more resultsoffset (offsetField: offset, limitField: limit)
    FreshnessScheduled (source-level)
    Input schema
    {
      "type": "object",
      "properties": {
        "facilityType": {
          "type": "string",
          "enum": [
            "homeHealth",
            "hospice",
            "inpatientRehab",
            "longTermCareHospital"
          ]
        },
        "stateAlpha": {
          "type": "string",
          "pattern": "^[A-Za-z]{2}$",
          "description": "Two-letter state, district, or territory code such as TX."
        },
        "city": {
          "type": "string",
          "minLength": 2,
          "maxLength": 80,
          "description": "City or town exactly as CMS publishes it, such as AUSTIN."
        },
        "zipCode": {
          "type": "string",
          "pattern": "^\\d{5}$",
          "description": "Five-digit ZIP code such as 78704."
        },
        "county": {
          "type": "string",
          "minLength": 2,
          "maxLength": 80,
          "description": "County or parish name. The trailing \"County\" or \"Parish\" is optional."
        },
        "facilityName": {
          "type": "string",
          "minLength": 3,
          "maxLength": 120,
          "description": "Partial facility name. Matching is case-insensitive."
        },
        "ownershipType": {
          "type": "string",
          "minLength": 3,
          "maxLength": 80,
          "description": "Published ownership string such as \"For-Profit\" or \"PROPRIETARY\"."
        },
        "limit": {
          "type": "integer",
          "minimum": 1,
          "maximum": 200
        },
        "offset": {
          "type": "integer",
          "minimum": 0,
          "maximum": 20000
        }
      },
      "required": [
        "facilityType"
      ],
      "additionalProperties": false
    }

    Address only. Home health publishes no county column.

  • getProviderDetail

    read

    Look one CMS Certification Number up across every facility directory this connector carries.

    What you must provideproviderId
    FreshnessScheduled (source-level)
    Input schema
    {
      "type": "object",
      "properties": {
        "providerId": {
          "type": "string",
          "pattern": "^[A-Za-z0-9]{4,10}$",
          "description": "CMS Certification Number such as 455822, or a hospital facility id such as 450388."
        },
        "facilityType": {
          "type": "string",
          "enum": [
            "hospital",
            "nursingHome",
            "homeHealth",
            "hospice",
            "inpatientRehab",
            "longTermCareHospital"
          ],
          "description": "Narrow the lookup to one directory. Omit it to search all six."
        }
      },
      "required": [
        "providerId"
      ],
      "additionalProperties": false
    }

    Each record carries its own dataset vintage.

  • getServiceInfo

    read

    Return dataset vintages, row counts, which files carry coordinates, and what this connector omits.

    FreshnessScheduled (source-level)
    Input schema
    {
      "type": "object",
      "properties": {},
      "required": [],
      "additionalProperties": false
    }

    Reads no upstream file, so it always answers.

Where this source is used