Sanctions Screening (Watchlist Screening)
Sanctions Screening (Watchlist Screening) checks individuals and entities against government-maintained lists of persons subject to economic sanctions. TrustGate provides comprehensive coverage across all major global sanctions regimes.
Why Sanctions Screening Matters
Conducting business with sanctioned individuals or entities is illegal in most jurisdictions. Violations can result in:
- Civil penalties up to $311,562 per violation (OFAC)
- Criminal penalties up to $1,000,000 and 20 years imprisonment
- Secondary sanctions affecting non-US persons dealing with sanctioned parties
- License revocation and debarment from government contracts
Sanctions screening is not optional. Financial institutions, money service businesses, and many other regulated entities must screen all customers at onboarding and on an ongoing basis.
Sanctions Lists Covered
TrustGate screens against all major global sanctions lists:
OFAC SDN List (Specially Designated Nationals)
The primary US sanctions list maintained by the Office of Foreign Assets Control.
| Attribute | Details |
|---|---|
| Jurisdiction | United States |
| Administrator | US Treasury (OFAC) |
| Entity Count | ~12,000+ entries |
| Update Frequency | Multiple times weekly |
| Coverage | Individuals, companies, vessels, aircraft |
Programs included:
- Counter Terrorism
- Counter Narcotics
- Non-Proliferation
- Iran Sanctions
- Russia/Ukraine Sanctions
- North Korea Sanctions
- Venezuela Sanctions
EU Consolidated Sanctions List
The unified European Union sanctions list.
| Attribute | Details |
|---|---|
| Jurisdiction | European Union (27 member states) |
| Administrator | European Commission |
| Entity Count | ~4,500+ entries |
| Update Frequency | As needed (typically weekly) |
| Coverage | Individuals, entities, groups |
Measures included:
- Asset freezes
- Travel bans
- Sectoral sanctions
UN Security Council Consolidated List
Sanctions mandated by United Nations Security Council resolutions.
| Attribute | Details |
|---|---|
| Jurisdiction | Global (193 UN member states) |
| Administrator | UN Security Council |
| Entity Count | ~800+ entries |
| Update Frequency | As resolutions passed |
| Coverage | Individuals, entities, groups |
Sanctions regimes:
- ISIL (Da'esh) and Al-Qaida
- Taliban
- North Korea (DPRK)
- Yemen
- South Sudan
- Central African Republic
UK HM Treasury Sanctions List
United Kingdom's financial sanctions list.
| Attribute | Details |
|---|---|
| Jurisdiction | United Kingdom |
| Administrator | HM Treasury (OFSI) |
| Entity Count | ~3,400+ entries |
| Update Frequency | As needed |
| Coverage | Individuals, entities |
Since Brexit, the UK maintains an independent sanctions regime. UK businesses must screen against both UK and applicable international lists.
Data Coverage
TrustGate normalizes data from 200+ authoritative sources into a consistent format:
{
"schema": "Person",
"id": "tg-12345",
"properties": {
"name": ["John Smith", "Jon Smith", "J. Smith"],
"birthDate": ["1975-03-15"],
"nationality": ["US", "GB"],
"topics": ["sanction"]
},
"datasets": ["us_ofac_sdn", "eu_fsf"]
}
Coverage Statistics
| Source Type | Approximate Count |
|---|---|
| Sanctions lists | 50+ national lists |
| PEP databases | 180+ countries |
| Adverse media | Integrated with sanctions |
| Total entities | 500,000+ |
How Fuzzy Matching Works (Approximate Name Matching)
Sanctions evasion often involves name variations. TrustGate uses multiple matching techniques to catch them:
Matching Techniques
┌─────────────────────────────────────────────────────────────────┐
│ Fuzzy Matching Pipeline │
├─────────────────────────────────────────────────────────────────┤
│ │
│ Input: "Mohammad Al-Rahman" │
│ │
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────────┐ │
│ │ Exact Match │ → │ Phonetic │ → │ Token-based │ │
│ │ │ │ (Soundex, │ │ (Jaccard, │ │
│ │ │ │ Metaphone) │ │ Overlap) │ │
│ └──────────────┘ └──────────────┘ └──────────────────┘ │
│ │ │ │ │
│ ▼ ▼ ▼ │
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────────┐ │
│ │ Edit Distance│ → │ Transliter- │ → │ Name Parsing │ │
│ │ (Levenshtein)│ │ ation │ │ (First/Last) │ │
│ └──────────────┘ └──────────────┘ └──────────────────┘ │
│ │
│ Matches: "Mohammed Al Rahman", "Muhammed al-Rahman", │
│ "M. Al-Rahman", "Mohammad Rahman" │
│ │
└─────────────────────────────────────────────────────────────────┘
Name Variation Examples
| Technique | Input | Matches |
|---|---|---|
| Phonetic | Mohammed | Muhammad, Mohamed, Mohamad |
| Transliteration | Владимир | Vladimir, Wladimir |
| Token reordering | John Smith | Smith, John |
| Initial expansion | J. Smith | John Smith, James Smith |
| Alias matching | El Chapo | Joaquin Guzman |
| Typo tolerance | Hussien | Hussein |
Matching Threshold
TrustGate uses a configurable match threshold:
# Default threshold: 0.5 (50%)
screening_result = await screening_service.check_individual(
name="John Smith",
birth_date=date(1980, 1, 15),
countries=["US"],
threshold=0.5 # Matches with 50%+ confidence returned
)
- Lower threshold (0.3-0.5): More hits, more false positives, better coverage
- Higher threshold (0.7-0.9): Fewer hits, fewer false positives, may miss variations
- Recommended: Start at 0.5, adjust based on false positive rate
Confidence Scores (Match Scores)
Every potential match includes a confidence score from 0-100 indicating match quality.
Score Calculation
Confidence scores are calculated based on multiple factors:
| Factor | Weight | Description |
|---|---|---|
| Name similarity | 40% | How closely names match |
| Date of birth | 25% | Exact match, partial match, or missing |
| Country | 15% | Nationality or residence match |
| Identifiers | 20% | Passport, national ID matches |
Score Interpretation
┌────────────────────────────────────────────────────────────────┐
│ Confidence Score Guide │
├────────────────────────────────────────────────────────────────┤
│ │
│ 90-100 ████████████████████████████████ Very High │
│ Strong name match + DOB match + country match │
│ Action: Thorough review, likely true positive │
│ │
│ 75-89 ██████████████████████████ High │
│ Strong name match + partial DOB or country │
│ Action: Careful review, probable match │
│ │
│ 50-74 ████████████████ Medium │
│ Moderate name match, some supporting data │
│ Action: Standard review, investigate further │
│ │
│ <50 ████████ Low │
│ Weak match, likely different person │
│ Action: Quick review, likely false positive │
│ │
└────────────────────────────────────────────────────────────────┘
API Response Example
{
"hits": [
{
"id": "hit-uuid-1",
"hit_type": "sanctions",
"matched_name": "John Adam Smith",
"confidence": 92.5,
"matched_fields": ["name", "date_of_birth", "country"],
"list_source": "us_ofac_sdn",
"list_version_id": "OFAC-2025-01-15",
"match_data": {
"caption": "John Adam Smith",
"properties": {
"name": ["John Adam Smith", "J.A. Smith"],
"birthDate": ["1980-01-15"],
"nationality": ["US"],
"position": ["Narcotics Trafficker"]
},
"datasets": ["us_ofac_sdn"]
}
}
]
}
[Screenshot: Hit detail view showing confidence score breakdown]
Running Sanctions Screening
On-Demand Screening (Manual Screening)
Run screening through the dashboard or API when needed:
Via Dashboard:
- Navigate to Screening > New Check
- Select or search for an applicant
- Choose Sanctions check type
- Click Run Screening
[Screenshot: New screening check form in dashboard]
Via API:
# Screen an existing applicant
curl -X POST https://api.bytrustgate.com/v1/screening/check \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"applicant_id": "applicant-uuid",
"check_types": ["sanctions"]
}'
# Ad-hoc screening (no applicant record)
curl -X POST https://api.bytrustgate.com/v1/screening/check \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "John Smith",
"date_of_birth": "1980-01-15",
"country": "US",
"check_types": ["sanctions"]
}'
Automatic Screening (Workflow Integration)
Configure screening to run automatically during onboarding:
# Example workflow configuration
workflow:
name: "Standard Onboarding"
steps:
- step: identity_verification
- step: document_verification
- step: screening
config:
check_types: ["sanctions", "pep"]
auto_approve_clear: true
escalate_hits: true
Batch Screening (Bulk Screening)
Screen multiple applicants at once:
curl -X POST https://api.bytrustgate.com/v1/screening/batch \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"applicant_ids": [
"uuid-1",
"uuid-2",
"uuid-3"
],
"check_types": ["sanctions"]
}'
Handling Screening Results
Clear Results (No Match)
When no matches are found:
{
"status": "clear",
"hit_count": 0,
"hits": []
}
Recommended actions:
- No further action required for sanctions
- Continue with other verification steps
- Document the clear result in applicant record
Hit Results (Potential Match)
When matches are found:
{
"status": "hit",
"hit_count": 2,
"hits": [
{
"id": "hit-uuid",
"hit_type": "sanctions",
"matched_name": "John Smith",
"confidence": 85.5,
"resolution_status": "pending"
}
]
}
Required actions:
- Review each hit to determine if it's a true match
- Gather additional information if needed
- Resolve the hit as
confirmed_trueorconfirmed_false - Document your decision rationale
Learn more about Hit Resolution
Error Results
When screening fails:
{
"status": "error",
"error_message": "Request timed out"
}
Recommended actions:
- Retry the screening
- Check API status if errors persist
- Contact support if issues continue
Best Practices
For Developers
# Example: Proper error handling for screening
async def screen_applicant(applicant_id: str):
try:
result = await screening_client.check(
applicant_id=applicant_id,
check_types=["sanctions", "pep"]
)
if result.status == "error":
# Retry logic
await retry_screening(applicant_id)
elif result.status == "hit":
# Notify compliance team
await notify_compliance(applicant_id, result.hits)
else:
# Clear - continue workflow
await continue_onboarding(applicant_id)
except ScreeningAPIError as e:
logger.error(f"Screening failed: {e}")
raise
For Compliance Officers
- Review hits promptly - Unresolved hits create regulatory risk
- Document thoroughly - Explain why you marked something as false positive
- Escalate true positives - Follow your SAR filing procedures
- Monitor metrics - Track false positive rates and review time
Related Topics
- Hit Resolution - How to review and resolve matches
- Ongoing Monitoring - Continuous sanctions screening
- Screening Lists - Data sources and update frequency
- PEP Screening - Politically exposed persons checks