Access cms provider quality data

When the user asks about Medicare or Medicaid provider quality data — dialysis facility ratings, home health agency performance, hospice provider characteristics, patient experience surveys, or CMS datasets — reach for the CMS Provider Data API. Catalog metadata and direct CSV download links via unauthenticated GET.

access-cms-provider-quality-data · v1 · updated 2026-04-16

Agents: This page is a SKILL.md-style capability guide. For JSON, call GET /api/skills/access-cms-provider-quality-data. To drop this into a local Claude Code install, copy the frontmatter + body below into ~/.claude/skills/access-cms-provider-quality-data/SKILL.md.

When to use this skill

When the user asks about Medicare or Medicaid provider quality data — dialysis facility ratings, home health agency performance, hospice provider characteristics, patient experience surveys, or "what datasets does CMS publish about X?" The CMS Provider Data API is the catalog and metadata layer over 233 datasets published by the Centers for Medicare & Medicaid Services. No auth required. The API returns dataset metadata and direct CSV download links, not the records themselves. For beneficiary-level claims data or individual physician billing records, this is the wrong skill.

Your best first call

Use the single-dataset endpoint when you know the identifier, or the catalog when you need to discover which datasets exist.

curl "https://data.cms.gov/provider-data/api/1/metastore/schemas/dataset/items/59mq-zhts"

No auth. No key. The identifier 59mq-zhts is the ICH-CAHPS patient experience survey for in-center hemodialysis — swap it for any other dataset identifier. The response is a single DCAT-format dataset object with these key fields:

For discovery — finding which datasets cover a care area — fetch the full catalog:

curl "https://data.cms.gov/provider-data/api/1/metastore/schemas/dataset/items"

Fetch this ONCE per session. Parse the response into a dict keyed by identifier and index by theme for fast lookup. Do not re-fetch within the same conversation.

Fallbacks (when the best call isn't enough)

Pitfalls

One-line summary for the user

I can discover and retrieve metadata for any of the 233 CMS Medicare/Medicaid provider quality datasets — including direct CSV download links — no auth required.

APIs this skill uses

CMS Provider Data API · primary · verified

The CMS Provider Data API provides access to Medicare and Medicaid provider data, including quality measures, facility information, and healthcare statistics. This API is maintained by the Centers for Medicare & Medicaid Services (CMS).

Generated from

CMS Provider Data API tutorial Getting Started with the CMS Provider Data API

SKILL.md source (frontmatter + body)
---
name: access-cms-provider-quality-data
description: When the user asks about Medicare or Medicaid provider quality data — dialysis facility ratings, home health agency performance, hospice provider characteristics, patient experience surveys, or CMS datasets — reach for the CMS Provider Data API. Catalog metadata and direct CSV download links via unauthenticated GET.
---

## When to use this skill

When the user asks about Medicare or Medicaid provider quality data — dialysis facility ratings, home health agency performance, hospice provider characteristics, patient experience surveys, or "what datasets does CMS publish about X?" The CMS Provider Data API is the catalog and metadata layer over 233 datasets published by the Centers for Medicare & Medicaid Services. No auth required. The API returns dataset metadata and direct CSV download links, not the records themselves. For beneficiary-level claims data or individual physician billing records, this is the wrong skill.

## Your best first call

Use the single-dataset endpoint when you know the identifier, or the catalog when you need to discover which datasets exist.

```bash
curl "https://data.cms.gov/provider-data/api/1/metastore/schemas/dataset/items/59mq-zhts"
```

No auth. No key. The identifier `59mq-zhts` is the ICH-CAHPS patient experience survey for in-center hemodialysis — swap it for any other dataset identifier. The response is a single DCAT-format dataset object with these key fields:

- `identifier` — opaque string key (`59mq-zhts`, `23ew-n7w9`) used in all other API calls
- `title` — human-readable name ("Patient survey (ICH CAHPS) - Facility")
- `description` — one-paragraph summary of dataset contents
- `theme` — category array like `["Dialysis facilities"]`
- `distribution[0].downloadURL` — direct link to the CSV data file
- `distribution[0].describedBy` — link to the PDF data dictionary explaining column names
- `modified` — when CMS internally updated the source data
- `released` — when the current snapshot was made public (lags `modified` by up to six weeks during CMS's internal review)
- `nextUpdateDate` — scheduled date for the next data refresh

For discovery — finding which datasets cover a care area — fetch the full catalog:

```bash
curl "https://data.cms.gov/provider-data/api/1/metastore/schemas/dataset/items"
```

Fetch this ONCE per session. Parse the response into a dict keyed by `identifier` and index by `theme` for fast lookup. Do not re-fetch within the same conversation.

## Fallbacks (when the best call isn't enough)

- **Need the actual facility records, not just metadata** → Use `distribution[0].downloadURL` from the dataset record to download the CSV. The metastore API serves metadata and download links, not individual records.
- **No search endpoint exists** → If the catalog was not cached, re-fetch and filter locally on `theme` or `keyword`. The metastore has no query parameters for topic-based filtering.

## Pitfalls

- The catalog returns all 233 datasets with no server-side filtering by theme, keyword, or category. The endpoint ignores query parameters meant for filtering. Filter locally on the `theme` array after fetching.
- Dataset identifiers are opaque strings (`59mq-zhts`, `23ew-n7w9`) with no semantic meaning — they cannot be derived from titles. Discover them from the catalog or from a dataset's landing page at `data.cms.gov/provider-data/dataset/{identifier}`.
- Download URLs contain content-hash path segments (`af4027a6449e63899d56ecec0c718998_1766441154`) that change on every data refresh. Never hardcode a `downloadURL` — always resolve it from the metastore immediately before downloading.
- A recent `modified` date with an older `released` date means the data is still in CMS's internal review and not yet publicly available. The gap can be up to six weeks.

## One-line summary for the user

I can discover and retrieve metadata for any of the 233 CMS Medicare/Medicaid provider quality datasets — including direct CSV download links — no auth required.

« Back to all skills