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:
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:
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.
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.