Nursing Home Fines & Civil Money Penalties (CMS) Scraper avatar

Nursing Home Fines & Civil Money Penalties (CMS) Scraper

Pricing

$10.00 / 1,000 penalty records

Go to Apify Store
Nursing Home Fines & Civil Money Penalties (CMS) Scraper

Nursing Home Fines & Civil Money Penalties (CMS) Scraper

Nursing home fines and civil money penalties from CMS: every fine and Medicare payment denial in the last three years, 16,166 records with CCN, date, type, dollar amount and denial window. Filter by state, CCN, facility name, date range, type or minimum fine. $0.01/record.

Pricing

$10.00 / 1,000 penalty records

Rating

0.0

(0)

Developer

JS Tech Solutions

JS Tech Solutions

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

11 days ago

Last modified

Share

Pulls every nursing home fine (civil money penalty) and Medicare payment denial CMS has levied in the last three years into clean JSON records: facility, CCN, address, penalty date, type, fine amount in dollars, and the payment-denial window. Filter by state, CCN, facility name, date range, penalty type or minimum fine.

16,166 penalties across 6,844 facilities in 53 states and territories as of the July 2026 extract: 13,687 fines totalling $464 million, and 2,479 payment denials running from 1 to 458 days. CMS publishes this only as a browser table and a monthly CSV; this Actor turns it into records you can drop into a database, a diligence model, or an alert pipeline.

Who uses this data

  • Elder-law and nursing home abuse attorneys building the enforcement history of a defendant facility. One CCN, one run, every fine and payment denial with dates and dollar amounts.
  • Long-term care liability underwriters pricing a facility or a book. Penalty frequency and severity per CCN is a loss signal you cannot get from star ratings alone.
  • Nursing home lenders, brokers, credit and bond analysts covering SNF operators. Filter by provider name to roll a chain's penalty exposure up across every facility it runs, or by state to size regulatory pressure in a market.
  • Senior placement and referral services screening facilities before they go on a shortlist for a family.

What you get

One dataset item per penalty, newest penalty date first.

{
"source": "https://data.cms.gov/provider-data/dataset/g6vv-u9sr",
"attribution": "Centers for Medicare & Medicaid Services (CMS)",
"penaltyId": "fine:140300",
"ccn": "375284",
"providerName": "Arbor Village",
"providerAddress": "310 W Taft Ave",
"city": "Sapulpa",
"state": "OK",
"zipCode": "74066",
"penaltyDate": "2026-06-11",
"penaltyType": "Fine",
"fineId": "140300",
"fineAmount": 14385,
"paymentDenialStartDate": null,
"paymentDenialLengthDays": null,
"paymentDenialEndDate": null,
"processingDate": "2026-07-01",
"fetchedAt": "2026-08-23T11:38:23.648Z"
}

A payment denial fills the other half: "penaltyType": "Payment Denial", fineId and fineAmount null, and "paymentDenialStartDate": "2026-06-28", "paymentDenialLengthDays": 2, "paymentDenialEndDate": "2026-06-29".

  • penaltyDate is CMS's own definition: the date of the inspection that triggered the penalty, not the date the money was collected.
  • fineAmount and paymentDenialLengthDays arrive as numbers, not strings. Missing values are null, never "".
  • paymentDenialEndDate is derived, not published. CMS gives a start date and a length in days, so this is start + (length - 1) days: the last day of the suspension, inclusive. Every delivered payment denial has all three denial fields populated; on a fine, all three are null.
  • penaltyId is a stable key: fine:<Fine ID> for fines, using CMS's own identifier, and denial:<ccn>:<start>:<days> for payment denials, which CMS does not identify. Across the full 16,166-row extract those produce 16,166 distinct keys, so nothing collapses.
  • Dates are ISO 8601 calendar dates, exactly as CMS publishes them. No time of day is invented.
  • Every delivered record matches one of the two penalty shapes CMS documents: a fine with an identifier and a whole-dollar amount, or a payment denial with a start date and a whole number of days. A row that fails that check, or that carries a date or number CMS's own dictionary promises but this Actor cannot parse, is skipped and reported in the run summary rather than delivered with a null where the amount should be. You are not charged for it. All 16,166 rows in the current extract pass both checks.

Input

Everything is optional. Run it with no input and you get the 100 most recent penalties nationwide.

FieldTypeDefaultNotes
statestring-Two-letter postal abbreviation, exact match. 53 appear in the data, including DC, GU and PR.
ccnstring-Six-character CMS Certification Number, exact match. The stable federal id for one facility.
providerNameContainsstring-Literal case-insensitive substring of the facility name, e.g. Genesis. Good for chains.
penaltyTypeenumanyany, Fine, or Payment Denial.
penaltyDateFromISO date-Keeps penalties dated on or after this day.
penaltyDateToISO date-Keeps penalties dated on or before this day.
minFineAmountinteger-Keeps only fines of at least this many dollars. Implies fines, since denials carry no amount.
maxResultsinteger1001 to 20000. This is your cost cap: you pay per delivered record.
includeRawbooleanfalseAttach a raw object with the CMS columns under their original API names.

Every filter except minFineAmount is pushed to CMS's own query API, so a narrow search reads less and finishes faster. minFineAmount is applied after the rows arrive, because CMS stores the amount as text and its >= compares it as text: asking the API for fine_amount >= 100000 returns 5782.

providerNameContains is matched literally. % and _ are wildcards in the catalog's query language, so they are escaped before the query is sent and the match is re-checked locally; typing GEN%SIS finds facilities with that exact string, not every name from GENESIS to GENSIS.

Example inputs

Every fine and payment denial for one facility (case file, diligence):

{
"ccn": "375284",
"maxResults": 500
}

Large fines in one state this year (underwriting, market screening):

{
"state": "TX",
"penaltyType": "Fine",
"minFineAmount": 50000,
"penaltyDateFrom": "2026-01-01",
"maxResults": 1000
}

A chain's penalty exposure across every facility it operates:

{
"providerNameContains": "Genesis",
"maxResults": 2000
}

Pricing

$0.01 per record; you pay only for records delivered. One charge per dataset item, nothing else. maxResults is your ceiling, not a quota: at 100 it can cost at most $1.00, and a filter matching fewer penalties costs proportionally less. Filters are applied before delivery, so a narrow search costs less than a broad one. Nothing else is billable, and a run that fails delivers and charges nothing.

Data source, refresh and licence

Records come from the Centers for Medicare & Medicaid Services (CMS) Provider Data Catalog, read through the catalog's own datastore query API:

  • Dataset: Penalties (g6vv-u9sr), described by CMS as "A list of the fines and payment denials received by nursing homes in the last three years."
  • API: https://data.cms.gov/provider-data/api/1/datastore/query/5b9088ff-626e-5038-bab8-fc3d4c476be4
  • Field definitions: Nursing Home Data Dictionary (PDF), Table 14.

Refresh: CMS refreshes this table monthly; its data dictionary names the file NH_Penalties_MonYYYY.csv, and the current one is NH_Penalties_Jul2026.csv. The catalog metadata for that extract reads modified: 2026-07-01, released: 2026-07-29, nextUpdateDate: 2026-08-26; every record carries CMS's own processingDate so you can see which extract you have. A monthly schedule tracks the source; running it daily will return the same extract until CMS posts the next one.

Licence: The Provider Data Catalog's own metadata declares no licence for this dataset. CMS's sibling catalog at data.cms.gov declares https://www.usa.gov/government-works on each of its datasets; that page states a "government work is something created by a U.S. government officer or employee as part of their official duties" and that such works are not copyright-protected, while cautioning that you "cannot use government materials in a way that implies endorsement by a government agency, official, or employee."

Attribution: Centers for Medicare & Medicaid Services (CMS), carried on every record in the attribution field. This Actor is not affiliated with or endorsed by CMS. No login, API key, or account is involved. Buyers are responsible for their own use of the data.

data.cms.gov publishes crawl-delay: 10 in its robots.txt and does not disallow /provider-data/api/*. This Actor honours that delay between requests, including between retries, and waits longer still when CMS sends a Retry-After header. It sends a descriptive User-Agent, opens no parallel connections, and caches nothing between runs. A default 100-record run is a single request.

Limitations

  • Three years only. CMS publishes a rolling three-year window. The current extract spans 2023-07-17 to 2026-06-11. Older penalties are not available here, and this Actor does not archive them for you.
  • Penalties, not deficiencies. A facility can be cited without being penalized. This table is the enforcement outcome, not the inspection record; for the underlying citations see the Nursing Home Deficiency Citations Actor or CMS's Health Deficiencies dataset.
  • No appeal or payment status. The table has fourteen columns and none of them says whether a penalty was appealed, reduced, waived, or actually collected. Treat fineAmount as the amount CMS published, not as money known to have changed hands.
  • No payment-denial end date at the source. CMS publishes a start date and a length in days; paymentDenialEndDate is computed from those two rather than published, so check it against the source if it is load-bearing for you.
  • Monthly, not live. A penalty imposed today appears in the next monthly extract, not immediately.
  • Federally certified nursing homes only. Facilities without a Medicare or Medicaid certification are outside CMS's enforcement data entirely.

FAQ

How do I find out if a nursing home has been fined?

Run with the facility's ccn (the six-character CMS Certification Number shown on its Care Compare page) or with providerNameContains. Every fine and payment denial CMS has published for that facility in the last three years comes back with the penalty date and the dollar amount.

What is a civil money penalty (CMP) for a nursing home?

A fine CMS imposes after a survey finds noncompliance serious enough to penalise. In this dataset it appears as penaltyType: "Fine" with fineAmount in whole dollars and CMS's own fineId.

What is a denial of payment for new admissions?

The other enforcement remedy in this dataset: Medicare and Medicaid stop paying for new admissions to the facility for a set number of days. It appears as penaltyType: "Payment Denial" with a start date, a length in days and a derived end date.

How often is the CMS nursing home penalties data updated?

Monthly. The current extract is NH_Penalties_Jul2026.csv, and every record carries the processingDate of the extract it came from.

Can I get nursing home fines by state?

Yes. Set state to a two-letter code; the filter runs on the CMS API. Combine it with minFineAmount and a date range to keep only the large, recent fines.

Does the fine amount show what was actually paid?

No. CMS publishes the amount imposed. Appeals, reductions, waivers and collection status are not in this dataset.

Other datasets by the same author, all pay-per-record with source, refresh cadence and licence stated on each listing:

Nursing home and long-term care data

Medicare provider enrollment data

Public procurement and RFP feeds

Developer and AI test data