OFAC, sanctions, PEP & KYB screening for Python — screen names, companies & crypto wallets against OFAC SDN, EU, UK, UN + 100+ watchlists; EU VAT (VIES) validation; EU consolidated (FSF) sanctions; OIG-LEIE exclusion + fuzzy SDN matching; GLEIF ownership & name→LEI; SEC EDGAR filings + XBRL company financials; FDA NDC directory + drug-recall enforcement; plus 24 KYB / reference validators (LEI, EIN, ABN, CNPJ, LATAM tax-IDs, BIC, ISIN, UK & EU VAT). Free demo, no key.
Project description
ofac-sanctions-screening
OFAC / sanctions / PEP / KYB screening for Python. Screen any person, company, or crypto wallet against OFAC SDN, EU, UK (OFSI), UN + 100+ global watchlists (powered by OpenSanctions) and get a PASS / WARN / BLOCK verdict — in one call, with cited sources.
- ✅ Free demo, no signup — start screening in 10 seconds, no API key.
- 🪙 Crypto-wallet OFAC screening — screen BTC/ETH addresses against the OFAC SDN crypto list (most APIs only do names & companies).
- 🏢 KYB-360 — sanctions + PEP + entity risk + registry in one call.
- ⚖️ One PASS / WARN / BLOCK verdict — no raw-list parsing.
- 🔌 Zero dependencies, Python 3.8+. Pay-per-call (card or USDC via x402) — no seat license, no enterprise contract.
Install
pip install ofac-sanctions-screening
Quickstart (free, no key)
from ofac_sanctions_screening import Client
c = Client() # free demo mode, rate-limited
# Sanctions / PEP screen a person or company
print(c.screen("Vladimir Putin"))
# {'result': {'flagged': True, 'match_count': 2, 'risk_topics': ['sanction', 'role.pep', ...], 'matches': [...]}}
# OFAC-screen a crypto wallet against the SDN crypto list
print(c.screen_wallet("1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa"))
# KYB screen a company
print(c.kyb("Acme Inc"))
Full access (paid)
Get an API key instantly with a card at https://api.gocreativeai.com/credits/buy (or pay-per-call in USDC via x402 — no key at all):
c = Client(api_key="gck_...")
c.screen("Some Person") # full sanctions & PEP coverage
c.screen_wallet("0xabc...") # full OFAC wallet screen
c.kyb("Some Company Ltd") # full KYB-360 dossier
c.verdict("Some Person") # one PASS / WARN / BLOCK decision
c.risk("Some Company") # entity risk score 0-100 + onboarding flag
Compliance & registry lookups (paid)
Live watchlist + registry lookups that complement the sanctions screen — healthcare exclusion, fuzzy SDN matching, corporate ownership, name→LEI resolution, SEC filings and the FDA drug directory:
c = Client(api_key="gck_...")
c.screen_oig_exclusion("John Smith")
# {'is_excluded': True, 'match_count': 3, 'risk': 'HIGH — HHS-OIG LEIE ...', 'matches': [...]}
# the mandatory pre-billing check for Medicare/Medicaid providers
c.screen_fuzzy_name("Vladimir Putin")
# {'is_potential_match': True, 'top_score': 83, 'matches': [{'name': 'PUTIN, Vladimir ...', ...}]}
# catches alias / transliteration / reordered-name SDN hits a strict match misses
c.lookup_gleif_entity("Apple Inc") # company NAME -> LEI(s) (ranked matches)
c.lookup_gleif_ownership("5493006MHB84DD0ZWV18") # LEI -> corporate-ownership tree (UBO)
c.lookup_sec_filings("AAPL") # SEC EDGAR recent-filings feed (free demo too)
c.lookup_fda_ndc("Trulicity") # FDA National Drug Code directory lookup
KYB identity / tax-ID validation (paid)
Reject malformed business identifiers before an expensive registry call — deterministic check-digit + reference-data validators for onboarding and vendor due diligence:
c = Client(api_key="gck_...")
c.verify_lei("529900T8BM49AURSDO55")
# {'verdict': 'VALID_ACTIVE', 'checksum_valid': True,
# 'entity': {'legal_name': 'Ubisecure Oy', 'legal_jurisdiction': 'FI', 'entity_status': 'ACTIVE', ...},
# 'registration': {'lei_status': 'ISSUED', ...}} # ← live GLEIF Level-1 record
c.verify_ein("12-3456789") # {'verdict': 'VALID_FORMAT', 'issuing_campus': 'Andover', ...}
c.verify_abn("51824753556") # {'verdict': 'VALID', 'abn_formatted': '51 824 753 556', ...}
c.verify_latam_taxid("MX", "GODE561231GR8")
# {'verdict': 'VALID', 'country': 'MX', 'tax_id_scheme': 'RFC (Registro Federal de Contribuyentes)', ...}
# also handles AR CUIT, PE RUC, CO NIT, CL RUT
c.verify_bic("DEUTDEFF")
# {'verdict': 'VALID', 'structure': {'institution_code': 'DEUT', 'country_code': 'DE', ...},
# 'entity': {'legal_name': 'DEUTSCHE BANK AKTIENGESELLSCHAFT', 'lei': '7LTWFZYICNSX8D621K86', ...}} # ← GLEIF BIC-to-LEI
c.verify_gstin("27AAPFU0939F1ZV") # India GSTIN — mod-36 checksum + state + embedded PAN
c.verify_pan("AAPFU0939F") # India PAN — structure + holder type
c.verify_gtin("4006381333931") # GTIN/UPC/EAN — GS1 mod-10 check digit + region
c.verify_uk_vat("GB434031494") # UK VAT — HMRC modulus-97 (9755)
# Or use the dispatcher for any validator:
c.verify("lei", "5493001KJTIIGC8Y1R12")
c.verify("latam-taxid", "GODE561231GR8", country="MX")
Reference-data / identifier validators (paid)
Deterministic check-digit + structural validators for finance, trade, securities and telecom identifiers — same keyless-algorithm pattern, one line each:
c = Client(api_key="gck_...")
# Finance / banking
c.verify_aba("021000021") # US bank routing / ABA / MICR (Fed mod-10) + district
c.verify_cnpj("11222333000181") # Brazil CNPJ checksum + Receita Federal company lookup
c.verify_cnpj_alpha("12ABC34501DE35") # Brazil CNPJ incl. new 2026 alphanumeric format
# Securities
c.verify_isin("US0378331005") # ISIN (ISO 6166) + security resolve
c.verify_cusip("037833100") # CUSIP (North-American securities, mod-10)
c.verify_sedol("2046251") # SEDOL (UK/Ireland, LSE weighted mod-10)
# Trade / supply chain / government
c.verify_duns("150483782") # D&B D-U-N-S number format
c.verify_cage("1U2A3") # US CAGE / NATO NCAGE (defense-supplier onboarding)
c.verify_eori("GB123456789000") # EU/UK EORI (customs / trade compliance)
c.verify_gln("0614141000012") # GS1 GLN (mod-10) + region
# Telecom / media
c.verify_phone("+14155552671") # phone number (ITU-T E.164) + country decode
c.verify_imei("490154203237518") # IMEI (GSMA Luhn) + TAC (manufacturer/model) decode
c.verify_issn("2049-3630") # ISSN (ISO 3297, mod-11)
c.verify_media_type("application/json") # IANA media type / MIME (RFC 6838)
Methods
| Method | Free demo | Paid endpoint | Returns |
|---|---|---|---|
screen(name) |
✅ | /v1/verdict/screen |
sanctions & PEP matches across OFAC/EU/UK/UN + 100+ lists |
screen_wallet(address) |
✅ | /v1/verdict/wallet |
OFAC SDN crypto-wallet match |
kyb(name) |
✅ | /v1/verdict/kyb |
KYB-360 dossier |
verdict(name) |
— | /v1/verdict/check |
PASS / WARN / BLOCK |
risk(name) |
— | /v1/risk/entity-score |
risk score 0-100 |
screen_oig_exclusion(name) |
— | /v1/screen/oig-exclusion |
HHS-OIG LEIE healthcare-exclusion screen |
screen_fuzzy_name(name) |
— | /v1/screen/fuzzy-name |
fuzzy OFAC SDN match (alias/transliteration) |
lookup_gleif_ownership(lei) |
— | /v1/lookup/gleif-ownership |
GLEIF corporate-ownership tree (UBO) |
lookup_gleif_entity(name) |
— | /v1/lookup/gleif-entity |
company name → LEI resolver |
lookup_sec_filings(ticker_or_cik) |
✅ | /v1/lookup/sec-filings |
SEC EDGAR recent-filings feed |
lookup_fda_ndc(ndc_or_name) |
— | /v1/lookup/fda-ndc |
FDA NDC drug-directory lookup |
verify_lei(lei) |
— | /v1/verify/lei |
ISO 17442 checksum + GLEIF legal-entity record |
verify_ein(ein) |
— | /v1/verify/ein |
US EIN format + IRS issuing campus |
verify_abn(abn) |
— | /v1/verify/abn |
Australian ABN (ATO modulus-89) |
verify_latam_taxid(country, tax_id) |
— | /v1/verify/latam-taxid |
MX RFC / AR CUIT / PE RUC / CO NIT / CL RUT |
verify_bic(bic) |
— | /v1/verify/bic |
SWIFT/BIC (ISO 9362) + GLEIF legal entity |
verify_gstin(gstin) |
— | /v1/verify/gstin |
India GSTIN (mod-36) + state / embedded PAN |
verify_pan(pan) |
— | /v1/verify/pan |
India PAN structure + holder type |
verify_gtin(gtin) |
— | /v1/verify/gtin |
GTIN/UPC/EAN (GS1 mod-10) + region |
verify_uk_vat(vat) |
— | /v1/verify/uk-vat |
UK VAT (HMRC modulus-97) |
verify_aba(routing_number) |
— | /v1/verify/aba |
US bank routing / ABA / MICR (Fed mod-10) + district |
verify_cnpj(cnpj) |
— | /v1/verify/cnpj |
Brazil CNPJ checksum + Receita Federal lookup |
verify_cnpj_alpha(cnpj) |
— | /v1/verify/cnpj-alpha |
Brazil CNPJ incl. 2026 alphanumeric format |
verify_isin(isin) |
— | /v1/verify/isin |
ISIN (ISO 6166) + security resolve |
verify_cusip(cusip) |
— | /v1/verify/cusip |
CUSIP (North-American securities) |
verify_sedol(sedol) |
— | /v1/verify/sedol |
SEDOL (UK/Ireland securities) |
verify_duns(duns) |
— | /v1/verify/duns |
D&B D-U-N-S number format |
verify_cage(code) |
— | /v1/verify/cage |
US CAGE / NATO NCAGE code |
verify_eori(eori) |
— | /v1/verify/eori |
EU/UK EORI (customs / trade) |
verify_gln(gln) |
— | /v1/verify/gln |
GS1 GLN (mod-10) + region |
verify_phone(phone) |
— | /v1/verify/phone |
phone number (ITU-T E.164) |
verify_imei(imei) |
— | /v1/verify/imei |
IMEI (GSMA Luhn) + TAC decode |
verify_issn(issn) |
— | /v1/verify/issn |
ISSN (ISO 3297, mod-11) |
verify_media_type(media_type) |
— | /v1/verify/media-type |
IANA media type / MIME (RFC 6838) |
verify(kind, value, country=…) |
— | dispatcher | any of the 23 validators by kind |
All methods return parsed JSON (dict). Errors raise ComplianceError with a clear message (402 → how to get a key, 429 → demo quota reached).
Get a free key (2 minutes)
The screen, screen_wallet, kyb, screening_report, wallet_report and batch_screen
methods work with no key (rate-limited demo). To unlock full coverage and all 23
validators, grab a gck_ key:
- Go to https://api.gocreativeai.com/start — the guided key wizard.
- Buy credits with a card (instant) at https://api.gocreativeai.com/credits/buy, or pay per call in USDC via x402 with no key at all.
Client(api_key="gck_...")— done.
Why this vs the incumbents
Same OpenSanctions data the serious vendors use, but keyless and pay-per-call — a fraction of the cost of Dataspike, ComplyAdvantage, or enterprise contracts, and it adds crypto-wallet OFAC screening most don't. See the comparisons: vs Dataspike · vs sanctions.io · vs ComplyAdvantage.
Disclaimer
Screening results draw on public watchlist + sanctions data and are provided for compliance-screening support. Verify matches before acting; absence of a match is not a guarantee of clearance. Not legal advice.
License
MIT © GoCreative · Product page · Docs
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file ofac_sanctions_screening-0.7.1.tar.gz.
File metadata
- Download URL: ofac_sanctions_screening-0.7.1.tar.gz
- Upload date:
- Size: 19.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.9.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
07cd251836fe411c6fa0edb6299093829bad6981de3628f338b0d59a6f81bff2
|
|
| MD5 |
7fad4628ae05ae647a0e6f23e60112bd
|
|
| BLAKE2b-256 |
b135fdeec7ed1c306a3b7fcd714c31ace1479be0e3e5e01201b6fd7ffc4b5cb5
|
File details
Details for the file ofac_sanctions_screening-0.7.1-py3-none-any.whl.
File metadata
- Download URL: ofac_sanctions_screening-0.7.1-py3-none-any.whl
- Upload date:
- Size: 16.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.9.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c0c4901774c23bcb107e363bda3f408f34457a439dae20edad3edf733304f003
|
|
| MD5 |
335b4c98d7cd0b44892769a2c9cab93a
|
|
| BLAKE2b-256 |
c1187fd8e03e9493bb2ff5ab54f4a108f2687c594b8047558d276adc831fd427
|