# Nursing Home Violations, Citations & Penalties - CMS Data (`kempdata/us-nursing-home-deficiencies`) Actor

Track nursing home health citations nationwide. 419,479 deficiency records from official CMS inspections, with plain-English scope and severity decoding, immediate-jeopardy and actual-harm filters and fines per facility. For elder-care attorneys and risk teams.

- **URL**: https://apify.com/kempdata/us-nursing-home-deficiencies.md
- **Developed by:** [Mark Kemp](https://apify.com/kempdata) (community)
- **Categories:**
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.50 / 1,000 deficiency citation records

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## US Nursing Home Deficiencies, Penalties & Violations

**Every nursing home health citation CMS has issued in the last three years — 419,000+ records — with the severity code translated into plain English and the facility's fines attached.**

CMS grades every citation with a single letter from A to L. Almost nobody outside the industry knows that **J, K and L mean "immediate jeopardy"** — residents were in immediate danger — or that **G and above means harm actually happened**. This Actor decodes that grid for you and lets you filter by it directly.

### Who this is for

- **Elder-abuse and nursing-home negligence attorneys** — filter to immediate-jeopardy and actual-harm citations in your state, see which were complaint-driven, and read the exact citation language alongside the facility's fine history. This is public inspection evidence, organized the way a case is built.
- **Families choosing a facility** — pull every citation for facilities in your county before you tour them. "Five stars" hides a lot; the citation text doesn't.
- **Healthcare investors, operators and acquirers** — diligence on a target's compliance record, or benchmark your facilities against competitors in the same market.
- **Insurers and risk teams** — underwriting signal that updates as new inspections post.
- **Journalists and researchers** — the abuse-and-neglect citation set, filterable by state and severity, in one download.

### What you get

One record per citation:

```json
{
    "provider_name": "Lakeshore Manor Nursing & Rehab",
    "cms_certification_number": "195123",
    "city": "Slidell",
    "state": "LA",
    "survey_date": "2026-03-14",
    "deficiency_tag": "F0600",
    "deficiency_category": "Freedom from Abuse, Neglect, and Exploitation Deficiencies",
    "deficiency_description": "Protect each resident from all types of abuse...",
    "scope_severity_code": "L",
    "severity_label": "Immediate jeopardy to resident health or safety (widespread)",
    "harm_level": "Immediate jeopardy to resident health or safety",
    "is_immediate_jeopardy": true,
    "complaint_driven": true,
    "deficiency_corrected": "Y",
    "under_dispute": false,
    "facility_total_fines_usd": 249106,
    "facility_fine_count": 3
}
```

Export to Excel, CSV, or JSON in one click, or pull on a schedule via API.

### How to use it

1. **States** — enter two-letter codes (LA, TX, CA...) or leave empty for the whole country.
2. **Minimum harm level** — all citations, potential-for-harm and worse (D–L), actual harm and worse (G–L), or immediate jeopardy only (J/K/L).
3. **Only citations on or after** a date — narrow to recent inspections.
4. **Complaint-driven only** — return just the citations that came from somebody filing a complaint.
5. **Category contains** — filter to "Abuse", "Pharmacy", "Nutrition", "Infection", and so on.
6. **Include fines & penalties** — attaches each facility's total CMS fines, fine count, and payment-denial days.

### The severity grid, decoded

| Code | What it means |
|------|---------------|
| A–C | No actual harm, potential for minimal harm |
| D–F | No actual harm, potential for **more than** minimal harm |
| G–I | **Actual harm** occurred |
| J–L | **Immediate jeopardy** to resident health or safety |

Within each band, the second letter tells you how widespread it was: isolated, pattern, or widespread. So an **L** is the most serious citation CMS issues.

### Data source & fair use

All data comes from the **CMS Provider Data Catalog** (data.cms.gov) — the official Health Deficiencies and Penalties datasets that CMS publishes for public use. No scraping, no bot games. The Actor reads the published JSON API politely, with paging and rate-limit handling, and republishes only what CMS itself makes public. Citation records reflect inspections at a point in time and may be under dispute (the `under_dispute` field flags those); always verify current status with CMS Care Compare before relying on a citation.

### Want more?

Home-health agencies, hospices, and hospitals publish comparable inspection data, and sibling Actors are being built in the order people ask. Open an issue and name what you need.

### Support

Questions and issues answered fast — usually within hours.

# Actor input Schema

## `states` (type: `array`):

Two-letter state codes to include (e.g. LA, TX, CA). Leave empty for all states and territories.

## `harmLevel` (type: `string`):

CMS grades every citation A-L. "Immediate jeopardy" (J/K/L) means residents were in immediate danger - the most serious citations there are. "Actual harm" (G-L) means harm actually occurred.

## `surveyDateFrom` (type: `string`):

Format YYYY-MM-DD. Leave empty for all available citations (CMS publishes roughly the last three years).

## `complaintOnly` (type: `boolean`):

Return only citations that resulted from a complaint investigation rather than a routine inspection. Complaint citations mean somebody reported this facility.

## `infectionControlOnly` (type: `boolean`):

Return only infection-control related citations.

## `categoryContains` (type: `string`):

Optional text filter on the deficiency category, e.g. "Abuse", "Pharmacy", "Nutrition", "Quality of Life". Leave empty for all categories.

## `includePenalties` (type: `boolean`):

Attach each facility's total CMS fines, number of fines, and payment-denial days from the official penalties dataset.

## `maxRecords` (type: `integer`):

Stop after this many citations. You are only charged for records actually returned.

## Actor input object example

```json
{
  "states": [],
  "harmLevel": "actualHarm",
  "surveyDateFrom": "",
  "complaintOnly": false,
  "infectionControlOnly": false,
  "categoryContains": "",
  "includePenalties": true,
  "maxRecords": 1000
}
```

# Actor output Schema

## `records` (type: `string`):

Dataset of nursing home health citations with decoded scope & severity, harm level, and optional facility penalty totals.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {};

// Run the Actor and wait for it to finish
const run = await client.actor("kempdata/us-nursing-home-deficiencies").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {}

# Run the Actor and wait for it to finish
run = client.actor("kempdata/us-nursing-home-deficiencies").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{}' |
apify call kempdata/us-nursing-home-deficiencies --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,kempdata/us-nursing-home-deficiencies"
        }
    }
}

```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/YcnWAPKGGeyQZoMuT/builds/uVgYMgebtx0wFCkbO/openapi.json
