Browse cms provider datasets

When the user asks what CMS provider quality data is available — dialysis, home health, hospice, or any Medicare/Medicaid dataset — browse the CMS Provider Data API catalog and get metadata with CSV download links. No auth required.

browse-cms-provider-datasets · v1 · updated 2026-04-16

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

When to use this skill

When the user asks what CMS provider quality data is available — dialysis facility ratings, home health performance, hospice characteristics, or any Medicare/Medicaid dataset — reach for this catalog. Also use it when you have an opaque dataset identifier (like 59mq-zhts) and need its metadata, download URL, or data dictionary. For querying individual facility records within a dataset, this is the wrong skill — this skill discovers datasets, not records.

Your best first call

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

No auth. No key. Returns a JSON array of all 233 CMS provider datasets following the DCAT metadata standard. Fetch this ONCE per conversation. Parse the response into a dict keyed by identifier — the opaque string like 23ew-n7w9 that uniquely identifies each dataset. Do not re-fetch.

The key fields per dataset object:

When you already have a dataset identifier, use the narrowed endpoint instead:

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

This returns a single dataset object with the same shape — all the fields above plus contactPoint and publisher.

Fallbacks (when the best call isn't enough)

Pitfalls

One-line summary for the user

I can browse the catalog of 233 CMS Medicare/Medicaid provider quality datasets, filter by care area, and retrieve metadata with direct CSV download links — no auth required, but the actual facility records live in the CSV files, not the API responses.

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: browse-cms-provider-datasets
description: When the user asks what CMS provider quality data is available — dialysis, home health, hospice, or any Medicare/Medicaid dataset — browse the CMS Provider Data API catalog and get metadata with CSV download links. No auth required.
---

## When to use this skill

When the user asks what CMS provider quality data is available — dialysis facility ratings, home health performance, hospice characteristics, or any Medicare/Medicaid dataset — reach for this catalog. Also use it when you have an opaque dataset identifier (like `59mq-zhts`) and need its metadata, download URL, or data dictionary. For querying individual facility records within a dataset, this is the wrong skill — this skill discovers datasets, not records.

## Your best first call

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

No auth. No key. Returns a JSON array of all 233 CMS provider datasets following the DCAT metadata standard. Fetch this ONCE per conversation. Parse the response into a dict keyed by `identifier` — the opaque string like `23ew-n7w9` that uniquely identifies each dataset. Do not re-fetch.

The key fields per dataset object:

- `identifier` — opaque string ID, used as the path parameter for single-dataset lookups
- `title` — human-readable name (e.g. "Dialysis Facility - Listing by Facility")
- `theme` — array of care-area categories (e.g. `["Dialysis facilities"]`), the primary filter dimension
- `keyword` — descriptive tags (e.g. `["Quality", "Quality Measures"]`)
- `description` — what the dataset contains
- `distribution[0].downloadURL` — direct link to the CSV with the actual data
- `distribution[0].describedBy` — link to the PDF data dictionary
- `modified` / `released` — internal update vs. public release dates (often weeks apart due to CMS review)
- `nextUpdateDate` — when the next refresh is expected

When you already have a dataset identifier, use the narrowed endpoint instead:

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

This returns a single dataset object with the same shape — all the fields above plus `contactPoint` and `publisher`.

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

- **You need actual facility-level records** → Each dataset's `distribution[0].downloadURL` links to a CSV you can download and parse. The API also has a datastore layer at `/data.cms.gov/provider-data/api/1/datastore/query/{datasetId}/{offset}/{limit}`, but this tutorial does not cover it.
- **You need column definitions before parsing a CSV** → The `distribution[0].describedBy` URL links to a PDF data dictionary.

## Pitfalls

- The catalog endpoint has **no server-side filtering** — no `?theme=`, `?keyword=`, or `?search=` parameters exist. Filter locally on the `theme` and `keyword` arrays after fetching the full catalog.
- Dataset identifiers are **opaque strings** (`59mq-zhts`, `23ew-n7w9`) with no semantic meaning — you cannot derive or guess them from dataset titles. Discover them from the catalog or from landing page URLs at `data.cms.gov/provider-data/dataset/{identifier}`.
- Download URLs contain **content-hash path segments** that change on every data refresh. Never hardcode a `downloadURL` — always resolve it fresh from the metastore before downloading.

## One-line summary for the user

I can browse the catalog of 233 CMS Medicare/Medicaid provider quality datasets, filter by care area, and retrieve metadata with direct CSV download links — no auth required, but the actual facility records live in the CSV files, not the API responses.

« Back to all skills