# HHS-OIG Healthcare Exclusion List Screener (`usta/hhs-oig-exclusion-screening`) Actor

Screen a name, NPI, or state against HHS-OIG's current excluded-provider list (LEIE). One row per person or business barred from Medicare/Medicaid today, with reason code, date, and state.

- **URL**: https://apify.com/usta/hhs-oig-exclusion-screening.md
- **Developed by:** [US Tech Automations](https://apify.com/usta) (community)
- **Categories:** Business, Lead generation, Other
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$10.00 / 1,000 result rows

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?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

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

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Screen Any Name Against HHS-OIG's Exclusion List

**For healthcare compliance officers:** screen a name, NPI, or state against HHS-OIG's exclusion list and get back only the rows that actually match, without opening a spreadsheet.

Check a name, NPI, or state against the federal government's own current list
of people and businesses banned from billing Medicare, Medicaid, or any other
federal health program. One row back for every match.

### Introduction

Federal law lets HHS's Office of Inspector General ban a person or a business
from ever billing a federal health program again — for a health care fraud
conviction, patient abuse, a revoked license, kickbacks, and more. OIG
publishes every exclusion that is in effect right now as the List of Excluded
Individuals/Entities (LEIE), and federal guidance expects a hospital or
medical practice to check every new hire and every contractor against it —
and to check its whole staff again every month — because knowingly employing
or contracting with someone on this list can trigger civil monetary
penalties against the employer, not just the excluded person.

This Actor reads OIG's own current-month file live on every run and returns
the exact rows that match your search. It never uses a cached or historical
copy: the file it reads is the same one OIG publishes today.

### Tutorial

1. Set **Name** to some or all of a person's or business's name, e.g. `SMITH`
   or `ACME HOME HEALTH`. Leave it empty to skip this filter.
2. Optionally set **State** to a two-letter code, e.g. `TX`.
3. Optionally set **NPI** to an exact 10-digit National Provider Identifier.
   Only about 1 in 10 excluded parties has one on file with OIG, so a miss
   here does not clear someone — always also check by name.
4. Optionally set **Individual or business** to narrow the kind of result.
5. Optionally set **Exclusion type code** (e.g. `1128a1`) to restrict to one
   statutory reason. See "Exclusion type codes" below for what each one means.
6. Optionally set **Excluded on or after** to a date, to run a "what's new"
   check instead of a full search.
7. Set **Maximum rows** as your spend cap, then click **Start**.

### Pricing

**$0.01 per row. No start fee.**

A run that matches nobody costs nothing — most single-name checks will. A
run built to monitor a state, for example every new exclusion in Texas since
the first of the month, might return a few dozen rows in a typical month,
costing well under a dollar. **Maximum rows** is the hard cap: the run cannot
cost more than that number multiplied by $0.01, whatever the search matches.

### Input and output examples

Input:

```json
{"state": "NY", "maxItems": 10}
```

Output (one row, from a live run on 2026-09-15):

```json
{
  "entity_type": "business",
  "last_name": null,
  "first_name": null,
  "middle_name": null,
  "business_name": "PURPLE HEART TRANSPORTATION, I",
  "provider_type": "OTHER BUSINESS",
  "specialty": "TRANSPORTATION CO",
  "npi": null,
  "state": "NY",
  "exclusion_type_code": "1128a1",
  "exclusion_type_label": "Mandatory exclusion: conviction of program-related crimes (42 U.S.C. 1320a-7(a)(1))",
  "exclusion_date": "2026-09-20",
  "reinstatement_date": null,
  "waiver_date": null,
  "waiver_state": null,
  "source_url": "https://oig.hhs.gov/exclusions/downloadables/UPDATED.csv",
  "fetched_at": "2026-09-15T17:04:07Z"
}
```

Every field in a row:

| Field | What it holds |
|---|---|
| `entity_type` | `individual` or `business` |
| `last_name` / `first_name` / `middle_name` | Set only for an individual |
| `business_name` | Set only for a business |
| `provider_type` | OIG's own broad category, e.g. `NURSE`, `PHARMACY`, `OTHER BUSINESS` |
| `specialty` | A narrower category when OIG recorded one |
| `npi` | The 10-digit National Provider Identifier, only when OIG has one on file (about 1 in 10 rows) |
| `state` | Two-letter state on OIG's own record |
| `exclusion_type_code` | OIG's own short code for the reason, e.g. `1128a1` |
| `exclusion_type_label` | Plain-English meaning of that code — see the table below; `null` for a small number of codes OIG's file uses but does not publicly define |
| `exclusion_date` | When the exclusion took effect |
| `reinstatement_date` | Always `null` in the current file — see Limitations |
| `waiver_date` / `waiver_state` | Set only on the rare record where a state obtained a waiver to keep employing this person in a specific role |
| `source_url` | The exact file this row was read from |
| `fetched_at` | When this run read OIG's file, in UTC |

#### Exclusion type codes this Actor can label

| Code | Meaning |
|---|---|
| `1128a1` | Mandatory: conviction of program-related crimes |
| `1128a2` | Mandatory: conviction relating to patient abuse or neglect |
| `1128a3` | Mandatory: felony conviction relating to health care fraud |
| `1128a4` | Mandatory: felony conviction relating to a controlled substance |
| `1128b1`–`1128b16` | Permissive exclusions: misdemeanor fraud/controlled-substance convictions, a revoked license, exclusion from another federal or state program, excessive or unnecessary billing, kickbacks, ownership by a sanctioned party, failing to disclose required information or grant access, loan default, false statements, and more |
| `1156` | Failure to meet standards for medically necessary services (a QIO finding) |

A code OIG's file uses that is not in this table — seen live: `1128Aa`,
`1160`, `BRCH CIA`, `BRCH SA` — is still returned as OIG's own raw code, with
`exclusion_type_label` left `null` rather than guessed at.

### Recommendations

Run monthly per state (or per employee roster) with **Excluded on or after**
set to the first of the previous month, matching the required cadence for
checking staff against federal exclusion lists. Always screen by name; treat
an NPI check as a bonus, not a substitute, since most excluded individuals
never had an NPI in the first place.

### Limitations

**This file only ever lists exclusions in effect today.** OIG's own
documentation states reinstated individuals and entities are removed from
this file entirely, and every row this Actor ever returns confirmed that
live on 2026-09-15 (0 of 84,001 rows carried a reinstatement date). A name
not appearing here means OIG does not currently list that exact name as
excluded — it is not a full identity-verified clearance, since this Actor
(like OIG's own downloadable file) carries no Social Security Number or
Employer ID Number to disambiguate common names. For a legally
identity-verified check on a specific person, use OIG's own Online Searchable
Database at `exclusions.oig.hhs.gov`, which can match against an SSN or EIN
you supply; this Actor is built for scanning a roster or a state, not for
that final identity confirmation step.

**No street address, city, ZIP, or date of birth is returned**, even though
OIG's own file carries them. This Actor drops them; a row here is only ever
name, role, state, and the exclusion itself.

**A handful of exclusion dates run slightly ahead of the file's own
publication date.** OIG's file is refreshed by the 10th of each month but can
carry a small number of records dated for later in that same month; this is
OIG's own listed date, not a fetch error, and is passed through as OIG wrote
it.

**Updates monthly, at OIG's pace.** OIG republishes this file roughly monthly
("generally updated by the middle of each month" — its own FAQ). Running this
Actor twice in the same week will not find anything new that a single run
did not already have.

**A file OIG cannot serve is reported, not guessed at.** If OIG's site is
briefly down, the run pushes no rows, costs nothing, and returns a status of
`UNKNOWN` with the error.

### FAQ

**Where does the data come from?**
HHS's Office of Inspector General, the List of Excluded Individuals/Entities,
downloaded live from `oig.hhs.gov/exclusions/downloadables/UPDATED.csv` on
every run.

**Does it need an API key or a login?**
No. It is a public file anyone can download from a browser.

**Why did I get fewer rows than Maximum rows?**
Either your search matched fewer records than that, or more matched than
**Maximum rows** allowed through — check `OUTPUT.warnings` and
`OUTPUT.rows_matched` for the true count.

**What happens if OIG's site is down?**
The run pushes no rows, costs nothing, and writes a status of `UNKNOWN` with
the error to `OUTPUT`. It never fills the gap with made-up rows.

**Is there support?**
Issues can be raised through the Apify Store issues tab for this Actor. No
response time is promised.

### Refunds and support

Refunds: if a run returns zero rows for a valid input, email operations@ustechautomations.com within 7 days and we refund that run. Support: same address, replies within 2 business days.

# Actor input Schema

## `name` (type: `string`):

Match if this text appears anywhere in the person's last/first/middle name or the business name, e.g. "SMITH" or "ACME HOME HEALTH". Leave empty to skip this filter.

## `state` (type: `string`):

Two-letter postal code, e.g. CA. Matches the excluded party's own state on the OIG record. Leave empty for every state.

## `npi` (type: `string`):

Exact 10-digit National Provider Identifier. Only about 1 in 10 excluded parties has one on file with OIG, so a miss here does not clear someone.

## `entityType` (type: `string`):

Restrict to one kind of excluded party. Leave empty for both.

## `exclusionTypeCode` (type: `string`):

OIG's own code for why the exclusion happened, e.g. "1128a1" for a program-related crime conviction. Leave empty for every code. See the README for the full list of codes this Actor can label.

## `excludedSince` (type: `string`):

Only return exclusions dated on or after this date, written as YYYY-MM-DD. Useful for a monthly "what's new" run. Leave empty for the full history OIG still lists.

## `maxItems` (type: `integer`):

Hard cap on the number of rows this run produces, and therefore on what it can cost. Every row bills at the listed price from row one; there is no start fee.

## Actor input object example

```json
{
  "entityType": "",
  "maxItems": 100
}
```

# Actor output Schema

## `dataset` (type: `string`):

No description

## `report` (type: `string`):

No description

# 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 = {
    "maxItems": 100
};

// Run the Actor and wait for it to finish
const run = await client.actor("usta/hhs-oig-exclusion-screening").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 = { "maxItems": 100 }

# Run the Actor and wait for it to finish
run = client.actor("usta/hhs-oig-exclusion-screening").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 '{
  "maxItems": 100
}' |
apify call usta/hhs-oig-exclusion-screening --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,usta/hhs-oig-exclusion-screening"
        }
    }
}
```

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/TmyjxSxrXhWa0X0NP/builds/Rg8pdHhhtbebA0Ag1/openapi.json
