Technical writing
SAM.gov Exclusions: The Federal Database Behind Government Contractor Debarments
The System for Award Management exclusions database lists every individual and entity currently barred from receiving federal contracts, grants, and other financial assistance — covering debarments, suspensions, proposed debarments, and voluntary exclusions across all federal agencies.
What SAM.gov exclusions are
SAM.gov — the System for Award Management, operated by the General Services Administration — replaced the Excluded Parties List System (EPLS) in July 2012. EPLS had served since the late 1980s as the government-wide consolidated list of debarred and suspended contractors. The migration into SAM.gov merged entity registration, contract awards reporting, and exclusions into a single platform, making the exclusions database a component of the broader vendor management infrastructure rather than a standalone system.
The legal foundation for the debarment and suspension system sits in FAR Part 9.4 — Subpart 9.4 of the Federal Acquisition Regulation. FAR 9.405 states the operative rule with no ambiguity: contracting officers shall not solicit offers from, award contracts to, or consent to subcontracts with contractors that are debarred, suspended, or proposed for debarment. The prohibition applies government-wide; a debarment issued by the Army blocks award from every civilian agency, and a suspension issued by the EPA blocks award from the Department of Defense. The database that enforces this cross-agency effect is SAM.gov.
The mandatory check requirement extends well beyond procurement contracts. Executive Order 12549 (1986) and its implementing regulation at 2 C.F.R. Part 180 extended the exclusions framework to all federal financial assistance — grants, cooperative agreements, loans, loan guarantees, and insurance. Every federal agency administering assistance programs must verify that prospective recipients and their principal individuals are not listed in SAM.gov before making an award. The Uniform Guidance at 2 C.F.R. Part 200 requires pass-through entities receiving federal grants to perform the same check before making sub-awards.
The consolidated list in SAM.gov incorporates exclusions from all federal agencies under four classifications: debarment (a formal finding of contractor misconduct with a default period of three years), suspension (temporary exclusion pending investigation or prosecution, capped at eighteen months), proposed debarment (the interim period between notice and final determination, treated identically to a debarment for contracting purposes), and voluntary exclusion (used primarily in non-procurement assistance programs such as federal grants). The database also receives entries from the Treasury Department's Office of Foreign Assets Control for SDN individuals who are also relevant to procurement, and from the HHS Office of Inspector General for providers excluded from Medicare and Medicaid programs under the healthcare-specific exclusion authorities.
Types of exclusions
The four exclusion categories in SAM.gov reflect distinct legal mechanisms with different triggers, durations, and procedural requirements.
Debarment is a formal administrative action taken after a finding of contractor misconduct or lack of present responsibility. The debarring official — a senior agency official designated under FAR 9.403, such as an agency head or designee — issues a written notice of proposed debarment and provides the contractor an opportunity to contest the action before the debarment becomes final. The standard period under FAR 9.406-4 is three years. The debarring official may extend the debarment beyond three years if the underlying conduct is particularly serious or if the contractor has failed to demonstrate rehabilitation. Unlike suspension, debarment requires a completed factual record; a conviction, civil judgment, or administrative determination is the typical trigger. A debarred entity may not receive new federal awards for the duration of the debarment period, but existing contracts already awarded may continue to completion at the contracting officer's discretion.
Suspension is a temporary, government-wide exclusion imposed while a criminal investigation, prosecution, or debarment proceeding is pending. FAR 9.407 governs suspensions. A suspension can be triggered by an indictment alone — no conviction is required — because the purpose is protective rather than punitive. The suspending official may act within days of a criminal indictment or the initiation of a fraud investigation. The maximum duration for a suspension is eighteen months, after which it must be converted to a proposed debarment or lifted. In practice, suspensions frequently run for only the period needed to complete criminal proceedings; if a prosecution concludes with a conviction, the suspension is typically followed by a formal debarment.
Proposed debarment is the interim status that exists between the issuance of a notice of proposed debarment and the debarring official's final determination. FAR 9.405 treats proposed debarment identically to final debarment for contracting purposes: agencies may not award new contracts to a contractor proposed for debarment unless there are compelling reasons to do so, documented in writing and approved at a level above the contracting officer. The proposed debarment period allows the contractor to present information and argument against debarment, but the procurement prohibition is in effect throughout.
Voluntary exclusion is a mechanism used primarily in non-procurement federal assistance programs governed by 2 C.F.R. Part 180. A participant in a federal grant program who has been found to have violated program requirements may agree to a voluntary exclusion in lieu of a formal debarment proceeding. Voluntary exclusions appear in SAM.gov and have the same effect on federal assistance eligibility as a formal debarment, but they arise from negotiation rather than unilateral agency action. They are more common in grant, loan, and cooperative agreement programs than in procurement contexts.
Grounds for debarment under FAR 9.406-2
FAR 9.406-2 specifies the causes that justify debarment. The list is expansive but not exhaustive — the regulation preserves agency discretion to debar based on “any other cause of so serious or compelling a nature that it affects the present responsibility of the contractor.”
The enumerated criminal grounds cover conviction for fraud or a criminal offense in connection with obtaining or performing a public contract or subcontract; conviction for embezzlement, theft, forgery, bribery, falsification or destruction of records, making false statements, receiving stolen property, or obstruction of justice; conviction under 18 U.S.C. § 1001 (false statements to the federal government); and conviction under the Export Administration Act, the Arms Export Control Act, or the International Emergency Economic Powers Act. Tax evasion convictions and RICO convictions arising from conduct related to federal contracting also support debarment. A conviction of any principal of the contractor entity — officer, director, owner, or partner — can result in debarment of the entity itself.
Civil grounds for debarment include a civil judgment for fraud or a fraudulent act in connection with a public contract or subcontract, and any violation of the False Claims Act (31 U.S.C. §§ 3729–3733) that results in a judgment. A settlement of a False Claims Act case, even without a judgment, can support debarment if the debarring official concludes that the settlement reflects an admission of liability or a finding of wrongdoing.
Performance-based grounds include serious or repeated violations of contract terms of a character that indicate a lack of business integrity affecting present responsibility, and willful failure to perform a contract to the satisfaction of the government that results in a termination for default. A single termination for default is not automatic grounds for debarment but may support it when the failure reflects systemic rather than situational problems.
Ethics-based grounds include knowing failure to disclose a potential violation of criminal law in connection with the award or performance of a government contract, and violations of the contractor ethics program requirements at FAR Subpart 3.10. For contractors subject to the ethics program requirements (those with contracts over $5.5 million with performance periods over 120 days), failure to maintain an ethics and compliance program, a reporting mechanism, and internal controls is itself a cause for debarment.
HHS OIG exclusions follow a parallel but distinct statutory path under 42 U.S.C. § 1320a-7. Mandatory exclusions for Medicare and Medicaid program-related crimes carry a minimum five-year period, extendable for aggravating factors. While OIG exclusions primarily affect participation in federal healthcare programs, they may also appear in SAM.gov when HHS reports the exclusion to the government-wide consolidated list, affecting eligibility for all federal financial assistance — not just healthcare programs.
Notable exclusion cases
Boeing was suspended from federal contracting in 2006 following revelations that the company had hired Darleen Druyun, a senior Air Force acquisition official, while she was still involved in awarding Boeing contracts. Druyun had improperly influenced the $20 billion KC-767 aerial tanker contract toward Boeing. The company ultimately reached a $615 million settlement with the Department of Justice covering both the tanker fraud and Druyun's improper hiring. The suspension covered Boeing's launch services division and lasted approximately two years before the company was reinstated following remediation measures including new ethics programs and personnel changes.
KBR (formerly Kellogg, Brown & Root, a Halliburton subsidiary) faced multiple suspension and debarment proceedings arising from its Iraq war logistics contract — the LOGCAP III contract — including allegations of inflated fuel charges, improper subcontracting arrangements, and bribery of Nigerian officials in connection with liquefied natural gas plant construction. KBR ultimately pleaded guilty to Foreign Corrupt Practices Act violations in 2009 and paid $402 million in fines. The proceedings illustrated the government's longstanding tension between debarring a contractor that provides services with few substitutes in a wartime environment and the deterrent function of exclusions.
Elizabeth Holmes and Theranos present a healthcare-specific example of how exclusion authorities intersect. Following Holmes's 2022 conviction for wire fraud and conspiracy to commit wire fraud arising from the fraudulent blood-testing scheme, the HHS OIG excluded Holmes under the mandatory exclusion authority at 42 U.S.C. § 1320a-7(a) based on her conviction for a program-related crime. That exclusion appeared in the LEIE and, through the cross-reporting mechanism, in SAM.gov, barring her from participation in federal healthcare programs and from receiving federal awards more broadly.
Individual False Claims Act defendants frequently appear in SAM.gov following civil judgments. The DOJ Civil Division's reporting practice sends referrals to agency debarring officials after FCA settlements and judgments, and many of those referrals result in debarment. Healthcare executives, defense contractors, and financial services firms have all faced debarment following FCA resolutions. A debarred entity may apply for reinstatement after the exclusion period expires by demonstrating to the debarring official that the conditions that gave rise to debarment no longer exist and that the entity has present responsibility to perform federal contracts. Reinstatement is discretionary and is typically conditioned on evidence of rehabilitation — new ethics programs, personnel changes, independent compliance monitors, and a demonstrated track record of lawful conduct since the underlying misconduct.
Accessing the data: bulk extract and API
The SAM.gov exclusions public extract is a ZIP file containing a CSV of all current exclusion records. It is updated daily and requires no API key for the public-data tier. The canonical download URL is:
https://sam.gov/data-services/Exclusions/Public%20V2?privacy=PublicA separate catalog entry is also maintained at data.gov at https://catalog.data.gov/dataset/sam-gov-exclusion-public-extract, which provides metadata and provenance documentation. The CSV fields in the public extract include:
- classification — the entity type: Firm, Individual, Vessel, or Special Entity Designation. Firms are legal entities; Individuals are natural persons; Vessels are watercraft subject to Maritime Administration exclusion actions; Special Entity Designations cover OFAC SDN entries and similar cross-referenced designations.
- exclusion_type — one of: Ineligible (Proceedings Pending), Debarment, Voluntary Exclusion, or Prohibition/Restriction. “Ineligible (Proceedings Pending)” corresponds to suspension and proposed debarment in FAR terminology.
- exclusion_program — Procurement, Nonprocurement, or Both. Procurement exclusions derive from FAR Part 9; Nonprocurement exclusions derive from 2 C.F.R. Part 180 and affect grants and financial assistance.
- agency — the federal agency that issued the exclusion action. Department of Defense (including Army, Navy, and Air Force as separate components), GSA, DOJ, EPA, and HHS are among the most frequent issuers.
- ct_code — the two-letter country code of the excluded entity. Most entries are US-based; international entries arise from OFAC SDN cross-listing and export control debarments.
- exclusion_date / activationdate — the date the exclusion took effect. The prohibition on new awards begins on this date.
- termination_date — the date the exclusion expires or was lifted. Records with no termination date are open-ended; records with a future termination date are currently active. Completed exclusions retain their records in the extract for historical reference.
- name — the legal name of the excluded individual or entity. Firms are listed by their registered legal name at the time of exclusion. Individuals are listed last-name-first or first-last depending on agency practice, which complicates automated matching.
- CAGE_code — the Commercial and Government Entity code, a five-character alphanumeric identifier issued by the Defense Logistics Agency. CAGE codes are stable across corporate name changes and are the most reliable matching key for linking SAM.gov exclusions to FPDS contract records and USASpending data.
- UEI (formerly DUNS) — the Unique Entity Identifier issued by SAM.gov. Since 2022, the UEI replaced the DUNS number from Dun & Bradstreet as the standard federal entity identifier. Historical records may carry only a DUNS number.
- SAM_number / address / city / state / zip / country — registration and address fields. Address data reflects the entity's registered address at the time of exclusion and may be stale for older records.
For entity-level lookups, the SAM.gov exclusions API at https://api.sam.gov/prod/exclusions/v1/ accepts name, UEI, CAGE code, and Social Security Number or EIN queries and returns JSON. An API key (free, registered at sam.gov) is required for the API; the bulk CSV download described above does not require one. The Entity Management Public Extract, a separate download, contains registration data for all active SAM.gov registrants and is the primary source for linking exclusions to vendor profiles.
Cross-listing with HHS OIG and OFAC
The SAM.gov exclusions database, the HHS OIG List of Excluded Individuals and Entities (LEIE), and the OFAC Specially Designated Nationals (SDN) list are three distinct databases with overlapping but non-identical coverage. Compliance programs that rely on any one of them exclusively will miss significant populations.
The HHS OIG LEIE at oig.hhs.gov/exclusions covers individuals and entities excluded from Medicare, Medicaid, CHIP, and all other federal healthcare programs under the mandatory and permissive exclusion authority at 42 U.S.C. § 1320a-7. Mandatory exclusions for program-related crimes carry a minimum five-year period; mandatory exclusions for patient abuse or neglect carry a minimum five years; a second mandatory exclusion carries a ten-year minimum; a third carries a permanent exclusion. Healthcare providers on the LEIE cannot bill Medicare even indirectly through an intermediary entity — the prohibition attaches to the individual, not to the billing entity. An excluded physician who provides services through a group practice causes the entire group's claims for those services to be improper, exposing the practice to civil monetary penalties of $10,000 per service plus exclusion of the practice itself.
The OIG cross-reports certain LEIE exclusions to SAM.gov, particularly those arising from criminal convictions that also implicate federal contracting eligibility. But the mapping is not one-to-one. Many LEIE-exclusive entries — such as license revocations under 42 U.S.C. § 1320a-7(b)(4) — do not generate corresponding SAM.gov entries. A compliance program for a healthcare organization that also holds federal grants or contracts must screen both databases independently on a monthly basis. Screening SAM.gov alone is insufficient for Medicare and Medicaid compliance; screening the LEIE alone is insufficient for procurement compliance.
OFAC SDN entries appear in SAM.gov under the Special Entity Designation classification when OFAC has designated an individual or entity that is also relevant to federal procurement. Not every SDN entry is cross-listed in SAM.gov; the OFAC SDN XML list at https://www.treasury.gov/ofac/downloads/sdn.xml remains the authoritative source for sanctions screening, with approximately 12,000 to 15,000 entries. The SAM.gov cross-listing provides a convenience reference for procurement officers who are checking entity eligibility but should not substitute for direct OFAC screening in financial services, banking, or export compliance contexts.
The historical precedent — EPLS — merged into SAM.gov in 2012 and its records carried forward. The transition eliminated the need to check a separate EPLS system and centralized the government-wide exclusions list in a single location, but also created a period of data quality variability as legacy records were migrated with varying levels of field completeness.
Python: analyzing the SAM.gov exclusions public extract
The script below downloads the daily SAM.gov exclusions public extract ZIP, parses the CSV, and computes five analytical outputs: active exclusions by type, top-20 agencies by debarment volume, duration distribution for completed exclusions, entity type breakdown across all records, and a listing of active exclusions with no termination date. Install dependencies with pip install requests.
import csv
import io
import zipfile
import requests
from collections import Counter, defaultdict
from datetime import datetime, date
# ---------------------------------------------------------------------------
# SAM.gov Exclusions Public Extract
# Updated daily. No API key required for the public extract.
# ZIP contains a CSV with all current and recently terminated exclusions.
# ---------------------------------------------------------------------------
EXTRACT_URL = (
"https://sam.gov/data-services/Exclusions/"
"Public%20V2?privacy=Public"
)
print("Downloading SAM.gov exclusions public extract...")
resp = requests.get(EXTRACT_URL, timeout=120)
resp.raise_for_status()
# The response is a ZIP file containing a single CSV
zf = zipfile.ZipFile(io.BytesIO(resp.content))
csv_name = next(n for n in zf.namelist() if n.lower().endswith(".csv"))
raw_bytes = zf.read(csv_name)
reader = csv.DictReader(io.StringIO(raw_bytes.decode("utf-8-sig")))
rows = list(reader)
print(f"Total exclusion records loaded: {len(rows):,}\n")
# ---------------------------------------------------------------------------
# Helper: parse date strings from the extract (format: YYYY-MM-DD or MM/DD/YYYY)
# ---------------------------------------------------------------------------
def parse_date(val: str) -> date | None:
val = (val or "").strip()
for fmt in ("%Y-%m-%d", "%m/%d/%Y"):
try:
return datetime.strptime(val, fmt).date()
except ValueError:
continue
return None
TODAY = date.today()
# ---------------------------------------------------------------------------
# Part A: Exclusions by type (active only — no termination date or future termination)
# exclusion_type field: Ineligible (Proceedings Pending), Debarment,
# Voluntary Exclusion, Prohibition/Restriction
# ---------------------------------------------------------------------------
type_counts: Counter = Counter()
active_rows = []
for row in rows:
term_date = parse_date(row.get("termination_date", ""))
# Active if no termination date, or termination date is in the future
if term_date is None or term_date >= TODAY:
active_rows.append(row)
excl_type = (row.get("exclusion_type") or "Unknown").strip()
type_counts[excl_type] += 1
print("=== Part A: Active Exclusions by Type ===")
for excl_type, count in type_counts.most_common():
print(f" {excl_type:<45} {count:>6,}")
print(f" {'TOTAL ACTIVE':<45} {sum(type_counts.values()):>6,}\n")
# ---------------------------------------------------------------------------
# Part B: Top 20 agencies with the most debarment actions (all time)
# Debarment rows have exclusion_type containing "Debarment"
# ---------------------------------------------------------------------------
agency_debarments: Counter = Counter()
for row in rows:
excl_type = (row.get("exclusion_type") or "").strip()
if "debarment" in excl_type.lower():
agency = (row.get("agency") or "Unknown").strip()
agency_debarments[agency] += 1
print("=== Part B: Top 20 Agencies by Debarment Actions (All Time) ===")
for agency, count in agency_debarments.most_common(20):
print(f" {agency[:55]:<55} {count:>5,}")
print()
# ---------------------------------------------------------------------------
# Part C: Exclusion duration distribution (completed exclusions only)
# ---------------------------------------------------------------------------
buckets = {"< 1 year": 0, "1-3 years": 0, "3-5 years": 0, "5+ years": 0}
completed = 0
for row in rows:
start = parse_date(row.get("exclusion_date") or row.get("activationdate", ""))
end = parse_date(row.get("termination_date", ""))
if start is None or end is None:
continue
if end <= start:
continue
completed += 1
days = (end - start).days
if days < 365:
buckets["< 1 year"] += 1
elif days < 3 * 365:
buckets["1-3 years"] += 1
elif days < 5 * 365:
buckets["3-5 years"] += 1
else:
buckets["5+ years"] += 1
print("=== Part C: Exclusion Duration Distribution (Completed Exclusions) ===")
for bucket, count in buckets.items():
pct = 100 * count / completed if completed else 0
print(f" {bucket:<12} {count:>6,} ({pct:5.1f}%)")
print(f" Total with known start and end date: {completed:,}\n")
# ---------------------------------------------------------------------------
# Part D: Entity type breakdown (Firm vs Individual vs Vessel vs other)
# classification field: Firm, Individual, Vessel, Special Entity Designation
# ---------------------------------------------------------------------------
entity_counts: Counter = Counter()
for row in rows:
classification = (row.get("classification") or "Unknown").strip()
entity_counts[classification] += 1
print("=== Part D: Entity Type Breakdown (All Records) ===")
total_all = len(rows)
for cls, count in entity_counts.most_common():
pct = 100 * count / total_all if total_all else 0
print(f" {cls:<40} {count:>6,} ({pct:5.1f}%)")
print()
# ---------------------------------------------------------------------------
# Part E: Active exclusions with no termination date (open-ended / permanent)
# ---------------------------------------------------------------------------
open_ended = [
r for r in active_rows
if not (r.get("termination_date") or "").strip()
]
print("=== Part E: Active Exclusions With No Termination Date ===")
print(f" Count: {len(open_ended):,}")
print()
print(f" {'Name':<50} {'Type':<35} {'Agency':<35} {'Excl Date'}")
print(" " + "-" * 130)
for row in sorted(open_ended, key=lambda r: r.get("exclusion_date", ""), reverse=True)[:20]:
name = (row.get("name") or row.get("exclusion_name", "")).strip()[:49]
excl_type = (row.get("exclusion_type") or "").strip()[:34]
agency = (row.get("agency") or "").strip()[:34]
excl_date = (row.get("exclusion_date") or row.get("activationdate", "")).strip()
print(f" {name:<50} {excl_type:<35} {agency:<35} {excl_date}")
Several implementation details affect the reliability of this analysis. The termination_date field is blank for active exclusions and for open-ended exclusions that have no scheduled end date; both cases require the same treatment: count the record as active. The exclusion_date and activationdate fields may differ in some records — exclusion_date reflects the administrative effective date while activationdate reflects when the record was activated in the SAM.gov system. For duration calculations, exclusion_date is the correct start point. The CSV encoding is UTF-8 with a byte order mark (BOM), handled by the utf-8-sig codec. Firm names in the database are not normalized — the same contractor may appear under multiple legal name variations across different exclusion records if it has been excluded multiple times or if name changes occurred between actions.
For production compliance screening, CAGE code matching is substantially more reliable than name matching because CAGE codes survive corporate name changes and restructurings. When CAGE codes are not available, a three-pass approach — exact UEI match, exact normalized name match, and fuzzy name match using token-sort ratio — mirrors the pattern described in the compliance screening risk score article, which integrates SAM.gov with the LEIE, OFAC, and more than two dozen other enforcement databases into a unified entity risk score.
Related: HHS OIG exclusions list · USASpending federal contracts
Part of the Federal Regulatory Data Hub.