# SAM.gov Vendor Exclusion Screening (`maximedupre/sam-gov-exclusions`) Actor

Screen one or more vendors against current SAM.gov federal exclusion records. Match by vendor name, UEI, or CAGE code, then review clear, possible-match, excluded, or not-found outcomes with source links and retrieval times.

- **URL**: https://apify.com/maximedupre/sam-gov-exclusions.md
- **Developed by:** [Maxime Dupré](https://apify.com/maximedupre) (community)
- **Categories:** Business, Developer tools, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$0.01 / 1,000 vendor screenings

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/platform/actors/running/actors-in-store#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

### 🔎 Screen Vendors Against SAM.gov Exclusions

For procurement teams, compliance staff, and developers, this Actor checks submitted vendors against current SAM.gov federal exclusion records. It returns one structured row per vendor with a clear, possible-match, excluded, or not-found outcome, matching evidence, an official source URL, and the UTC retrieval time. Use a vendor name, UEI, or CAGE code for a repeatable check.

- Check a submitted vendor for an OIG exclusion recorded in SAM.gov with **[OIG Exclusion Search](https://apify.com/maximedupre/sam-gov-exclusions/examples/oig-exclusion-search)**.
- Screen a provider name against SAM.gov federal exclusion records with **[Provider Exclusion List](https://apify.com/maximedupre/sam-gov-exclusions/examples/provider-exclusion-list)**.
- Check a vendor against SAM.gov records using the **[GSA Exclusion List](https://apify.com/maximedupre/sam-gov-exclusions/examples/gsa-exclusion-list)** task.
- Use **[Excluded Parties List System](https://apify.com/maximedupre/sam-gov-exclusions/examples/excluded-parties-list-system)** to check vendors against SAM.gov.
- Run a targeted name, UEI, or CAGE check with **[SAM Exclusion Search](https://apify.com/maximedupre/sam-gov-exclusions/examples/sam-exclusion-search)**.

#### 📋 Review Vendor Outcomes and Evidence

Each saved row keeps the submitted vendor values, the screening outcome, any matching or possible-match SAM.gov exclusion records, the source URL, and the UTC retrieval time. An exclusion can include identity, UEI, CAGE code, status, program, type, agency, dates, classification, and address when SAM.gov provides them.

When the same source item appears more than once, the first eligible occurrence is saved and later repeats are ignored.

#### ▶️ Run a Vendor Screening

1. Add one or more vendors. Each vendor can use a name, UEI, CAGE code, or any combination.
2. Choose **Active exclusions** or **All exclusions**. Active exclusions is the default.
3. Add optional agency, program, exclusion type, country, or U.S. state filters when you need a narrower check.
4. Start the run and open the default dataset when it finishes.

Leaving an optional filter empty keeps all values for that filter until the source is exhausted.

#### ⚙️ Input

**Input fields**

| Field | Type | What it does |
|---|---|---|
| `vendors` | Array of objects | Adds one or more vendors to check. Each item can include a name, UEI, CAGE code, or any combination. |
| `vendors[].name` | String | Gives the vendor's legal name. |
| `vendors[].uei` | String | Gives the vendor's 12-character Unique Entity ID. |
| `vendors[].cageCode` | String | Gives the vendor's 5-character CAGE code. |
| `exclusionStatus` | String: `active` or `all` | Chooses active exclusions or all SAM.gov exclusion records. `active` is the default. |
| `excludingAgency` | Array of strings | Keeps records from the listed excluding agencies. Leave empty to use all agencies. |
| `program` | Array of strings | Keeps records from the listed programs. Leave empty to use all programs. |
| `exclusionType` | Array of strings | Keeps records with the listed exclusion types. Leave empty to use all types. |
| `country` | Array of strings | Keeps records from the listed countries. Leave empty to use all countries. |
| `state` | Array of strings | Keeps records from the listed U.S. states. Leave empty to use all states. |

This example uses the smallest successful vendor check:

```json
{
  "vendors": [
    {
      "name": "DYNAMIC MINDS FAMILY SERVICES, LLC"
    }
  ],
  "exclusionStatus": "active"
}
```

#### 🧾 Output

**Output fields**

| Field | Type | What it does |
|---|---|---|
| `vendor` | Object | Shows the submitted vendor values checked in this row. |
| `vendor.name` | String | Shows the submitted vendor name. |
| `vendor.uei` | String | Shows the submitted UEI when provided. |
| `vendor.cageCode` | String | Shows the submitted CAGE code when provided. |
| `outcome` | String: `clear`, `possibleMatch`, `excluded`, or `notFound` | Gives the screening outcome. A possible match or exclusion needs human review. |
| `exclusions` | Array of objects | Lists SAM.gov exclusion records that matched or may match the vendor. |
| `exclusions[].exclusionId` | String | Gives the SAM.gov identifier for the exclusion record when available. |
| `exclusions[].name` | String | Shows the name on the exclusion record when available. |
| `exclusions[].uei` | String | Shows the UEI on the exclusion record when available. |
| `exclusions[].cageCode` | String | Shows the CAGE code on the exclusion record when available. |
| `exclusions[].status` | String: `active` or `inactive` | Shows whether the exclusion record is active or inactive. |
| `exclusions[].program` | String | Shows the program named on the exclusion record when available. |
| `exclusions[].exclusionType` | String | Shows the exclusion type when available. |
| `exclusions[].excludingAgency` | String | Shows the agency that issued the exclusion when available. |
| `exclusions[].exclusionDate` | Date string | Shows when the exclusion began when available. |
| `exclusions[].terminationDate` | Date string | Shows when the exclusion ended or is due to end when available. |
| `exclusions[].classification` | String | Shows the classification on the exclusion record when available. |
| `exclusions[].address` | Object | Shows the address on the exclusion record when available. |
| `exclusions[].address.line1` | String | Shows the first address line when available. |
| `exclusions[].address.line2` | String | Shows the second address line when available. |
| `exclusions[].address.city` | String | Shows the city when available. |
| `exclusions[].address.state` | String | Shows the state or region when available. |
| `exclusions[].address.postalCode` | String | Shows the postal code when available. |
| `exclusions[].address.country` | String | Shows the country when available. |
| `sourceUrl` | URI string | Links to the official SAM.gov page or data URL used for the screening. |
| `retrievedAt` | UTC date-time string | Shows when the official SAM.gov data for this row was retrieved. |

**Example row**

This complete row comes from a successful run and shows an excluded outcome with four source records:

```json
{
  "vendor": {
    "name": "DYNAMIC MINDS FAMILY SERVICES, LLC"
  },
  "outcome": "excluded",
  "exclusions": [
    {
      "exclusionId": "268b6a87-711e-4198-9a9e-063c3eef8c04",
      "name": "DYNAMIC MINDS FAMILY SERVICES",
      "uei": "MGS1EPM43F23",
      "status": "active",
      "program": "Reciprocal",
      "exclusionType": "Prohibition/Restriction",
      "excludingAgency": "OPM",
      "exclusionDate": "2020-10-27",
      "classification": "Special Entity Designation",
      "address": {
        "line1": "5755 S SANDHILL ROAD, SUITE A",
        "city": "LAS VEGAS",
        "state": "NV",
        "postalCode": "89120",
        "country": "USA"
      }
    },
    {
      "exclusionId": "e6539eeb-d387-436a-acbe-0ea558e046be",
      "name": "POWERFUL MINDS MENTAL HEALTH LLC",
      "uei": "GRYUCB2AQ2N4",
      "status": "active",
      "program": "Reciprocal",
      "exclusionType": "Prohibition/Restriction",
      "excludingAgency": "OPM",
      "exclusionDate": "2026-05-31",
      "classification": "Special Entity Designation",
      "address": {
        "line1": "10761 MUSCARI WAY",
        "city": "LAS VEGAS",
        "state": "NV",
        "postalCode": "89141",
        "country": "USA"
      }
    },
    {
      "exclusionId": "5179e372-3eda-41c5-82ac-7f72553cd931",
      "name": "UNITY FAMILY SERVICES, INC.",
      "status": "active",
      "program": "Reciprocal",
      "exclusionType": "Prohibition/Restriction",
      "excludingAgency": "OPM",
      "exclusionDate": "2013-08-27",
      "classification": "Firm",
      "address": {
        "line1": "3840 N COMMERCE ST, NUM200",
        "city": "NORTH LAS VEGAS",
        "state": "NV",
        "postalCode": "89032",
        "country": "USA"
      }
    },
    {
      "exclusionId": "df26ef79-1b64-4af6-bdf9-2a0f4ef199fc",
      "name": "TRUE FAMILY SERVICES, INC.",
      "uei": "QQUCZJR18P35",
      "status": "active",
      "program": "Reciprocal",
      "exclusionType": "Prohibition/Restriction",
      "excludingAgency": "OPM",
      "exclusionDate": "2025-02-28",
      "classification": "Special Entity Designation",
      "address": {
        "line1": "914 EAST SAHARA AVENUE",
        "city": "LAS VEGAS",
        "state": "NV",
        "postalCode": "89104",
        "country": "USA"
      }
    }
  ],
  "sourceUrl": "https://sam.gov/api/prod/sgs/v1/search/?index=ex&page=0&size=100&sort=-relevance&date_filter_index=ex&q=DYNAMIC+MINDS+FAMILY+SERVICES",
  "retrievedAt": "2026-08-06T21:48:00.716Z"
}
```

#### 💳 Pricing

**How charges work**

This Actor uses pay-per-event pricing. The primary event is **Vendor screening**: one completed vendor screening is charged when current SAM.gov exclusion records are checked. See the live Store price before you run.

#### 🔌 Integrations

**Dataset access**

Open the default dataset from the run to use its structured rows in Apify tools or through the dataset API.

**Walkthrough**

See the run flow here:

https://www.youtube.com/watch?v=bNACk1\_S\_6w\&list=PLObrtcm1Kw6MUrlLNDbK9QRg8VDJg0gOW\&index=4

#### ❓ FAQ

##### Can I screen more than one vendor in one run?

Yes. Add multiple vendor objects to `vendors` and the Actor checks them in one run.

##### Can I use only a UEI or CAGE code?

Yes. Each vendor item can use a name, UEI, CAGE code, or any combination. UEIs must have 12 letters or numbers, and CAGE codes must have 5 letters or numbers.

##### What does a possible match mean?

It means a SAM.gov record may match the submitted vendor. Review the name, identifiers, agency, type, dates, and address before you act. It is not a legal, award, responsibility, or teaming-eligibility decision.

##### What does notFound mean?

It means no exclusion match was found for the submitted vendor under the chosen status and filters. The row still keeps the submitted vendor, outcome, source URL, and retrieval time.

##### Can I include inactive exclusions?

Yes. Set `exclusionStatus` to `all` to include active and inactive records. The default is `active`.

##### Why might an exclusion field be missing?

SAM.gov records do not always include every identifier, date, or address. When a source value is unavailable, the matching output field is not included.

##### Do I need a SAM.gov API key?

No buyer-supplied SAM.gov API credential is needed for the core search. The Actor checks public SAM.gov data and includes the official source URL used for each row.

##### Can I use this as a final eligibility decision?

No. Possible matches and status flags need human verification against the official source before a legal, award, responsibility, or teaming decision.

##### How are repeated source matches handled?

The first eligible occurrence of a source item is saved. Later appearances of that same source item are ignored, so one row does not collect every later matching value.

### 📝 Changelog

**0.0: Initial release**

### 🆘 Support

For issues, questions, or feature requests, [file a ticket](https://console.apify.com/actors/maximedupre~sam-gov-exclusions/issues) and I'll fix or implement it in less than 24h 🫡

### 🔗 Related Actors

- [Sanctions & Watchlist Screening — Risk-Scored Decisions](https://apify.com/maximedupre/sanctions-screening) checks names against OFAC, EU, UK OFSI, and UN sanctions lists for broader sanctions coverage.
- [SAM.gov Entity Exclusions Scraper](https://apify.com/automation-lab/sam-gov-entity-exclusions-scraper) exports public SAM.gov exclusion records for vendor screening and debarment monitoring.
- [SAM.gov Vendor Screening — Exclusions & Registration Check](https://apify.com/leadharbor/sam-gov-vendor-screening) adds SAM registration status and expiry checks beside exclusion screening.
- [SAM.gov Contracts & Exclusions API - No Scraping, No Start Fee](https://apify.com/mooseandraven/samgov-federal-contracting-suite) combines federal contract opportunities and exclusions through an official API.
- [Government Contract Data & Federal Bids — SAM.gov Scraper](https://apify.com/jungle_synthesizer/samgov-scraper) covers broader SAM.gov opportunities, bids, and exclusion data.

**Made with ❤️ by Maxime Dupré**

# Actor input Schema

## `vendors` (type: `array`):

Add one or more vendors. Each vendor can include a name, UEI, CAGE code, or any combination.

## `exclusionStatus` (type: `string`):

Choose whether to check active exclusions or all SAM.gov exclusion records.

## `excludingAgency` (type: `array`):

Return records only from these excluding agencies. Leave empty to use all agencies.

## `program` (type: `array`):

Return records only from these programs. Leave empty to use all programs.

## `exclusionType` (type: `array`):

Return records only with these exclusion types. Leave empty to use all types.

## `country` (type: `array`):

Return records only from these countries. Leave empty to use all countries.

## `state` (type: `array`):

Return records only from these U.S. states. Leave empty to use all states.

## Actor input object example

```json
{
  "vendors": [
    {
      "name": "Example vendor"
    }
  ],
  "exclusionStatus": "active"
}
```

# Actor output Schema

## `results` (type: `string`):

Open the default dataset to view one row for each submitted vendor, with its screening outcome and matching exclusion evidence.

# 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 = {
    "vendors": [
        {
            "name": "DYNAMIC MINDS FAMILY SERVICES, LLC"
        }
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("maximedupre/sam-gov-exclusions").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 = { "vendors": [{ "name": "DYNAMIC MINDS FAMILY SERVICES, LLC" }] }

# Run the Actor and wait for it to finish
run = client.actor("maximedupre/sam-gov-exclusions").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 '{
  "vendors": [
    {
      "name": "DYNAMIC MINDS FAMILY SERVICES, LLC"
    }
  ]
}' |
apify call maximedupre/sam-gov-exclusions --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,maximedupre/sam-gov-exclusions"
        }
    }
}

```

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/XuRVd3VtZZiE1w174/builds/VWlrEfhtbO3203pnf/openapi.json
