ofac-sanctions-screening
v0.6.0
Published
OFAC, sanctions, PEP & KYB screening for Node.js — screen names, companies & crypto wallets against OFAC SDN, EU, UK, UN + 100+ watchlists; EU VAT (VIES) validation; EU consolidated (FSF) sanctions screen; OIG-LEIE healthcare-exclusion + fuzzy SDN matchin
Downloads
1,004
Maintainers
Keywords
Readme
ofac-sanctions-screening
OFAC / sanctions / PEP / KYB screening for Node.js. 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, Node 18+ (uses global
fetch). Pay-per-call (card or USDC via x402) — no seat license, no enterprise contract.
Install
npm install ofac-sanctions-screeningQuickstart (free, no key)
const { Client } = require('ofac-sanctions-screening');
const c = new Client(); // free demo mode, rate-limited
// Sanctions / PEP screen a person or company
console.log(await 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
console.log(await c.screenWallet('1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa'));
// KYB screen a company
console.log(await 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):
const c = new Client({ apiKey: 'gck_...' });
await c.screen('Some Person'); // full sanctions & PEP coverage
await c.screenWallet('0xabc...'); // full OFAC wallet screen
await c.kyb('Some Company Ltd'); // full KYB-360 dossier
await c.verdict('Some Person'); // one PASS / WARN / BLOCK decision
await c.risk('Some Company'); // entity risk score 0-100Compliance & registry lookups (paid)
Live watchlist + registry lookups that complement the sanctions screen:
const c = new Client({ apiKey: 'gck_...' });
await c.screenOigExclusion('John Smith'); // HHS-OIG LEIE healthcare-exclusion screen
await c.screenFuzzyName('Vladimir Putin'); // fuzzy OFAC SDN match (alias / transliteration)
await c.lookupGleifEntity('Apple Inc'); // company NAME -> LEI(s), ranked matches
await c.lookupGleifOwnership('5493006MHB84DD0ZWV18'); // LEI -> corporate-ownership tree (UBO)
await c.lookupSecFilings('AAPL'); // SEC EDGAR recent-filings feed (free demo too)
await c.lookupFdaNdc('Trulicity'); // FDA National Drug Code directory lookupKYB identity validators (paid)
Reject malformed business identifiers before an expensive registry call. These are
deterministic, offline check-digit validators (no external vendor key needed) — an LEI
resolves against GLEIF, the rest confirm structure + check digit and decode what the code
encodes. Metered through your apiKey.
const c = new Client({ apiKey: 'gck_...' });
await c.verifyLei('5493001KJTIIGC8Y1R12'); // ISO 17442 + GLEIF Level-1 record → VALID_ACTIVE
await c.verifyEin('12-3456789'); // US EIN format + IRS issuing campus
await c.verifyAbn('51824753556'); // AU ABN (ATO modulus-89)
await c.verifyLatamTaxid('MX', 'GODE561231GR8'); // MX RFC / AR CUIT / PE RUC / CO NIT / CL RUT
await c.verifyBic('DEUTDEFF'); // SWIFT/BIC (ISO 9362) + institution resolve
await c.verifyGstin('29AAGCB7383J1ZW'); // India GSTIN (GSTN mod-36) + state/PAN decode
await c.verifyPan('AAGCB7383J'); // India PAN + holder-type decode
await c.verifyGtin('0012345678905'); // GTIN/UPC/EAN (GS1 mod-10) + region
await c.verifyUkVat('GB980780684'); // UK VAT (HMRC modulus-97)
// or the convenience dispatcher:
await c.verify('bic', 'DEUTDEFF');
await 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:
const c = new Client({ apiKey: 'gck_...' });
// Finance / banking
await c.verifyAba('021000021'); // US bank routing / ABA / MICR (Fed mod-10) + district
await c.verifyCnpj('11222333000181'); // Brazil CNPJ checksum + Receita Federal company lookup
await c.verifyCnpjAlpha('12ABC34501DE35'); // Brazil CNPJ incl. new 2026 alphanumeric format
// Securities
await c.verifyIsin('US0378331005'); // ISIN (ISO 6166) + security resolve
await c.verifyCusip('037833100'); // CUSIP (North-American securities, mod-10)
await c.verifySedol('2046251'); // SEDOL (UK/Ireland, LSE weighted mod-10)
// Trade / supply chain / government
await c.verifyDuns('150483782'); // D&B D-U-N-S number format
await c.verifyCage('1U2A3'); // US CAGE / NATO NCAGE (defense-supplier onboarding)
await c.verifyEori('GB123456789000'); // EU/UK EORI (customs / trade compliance)
await c.verifyGln('0614141000012'); // GS1 GLN (mod-10) + region
// Telecom / media
await c.verifyPhone('+14155552671'); // phone number (ITU-T E.164) + country decode
await c.verifyImei('490154203237518'); // IMEI (GSMA Luhn) + TAC (manufacturer/model) decode
await c.verifyIssn('2049-3630'); // ISSN (ISO 3297, mod-11)
await c.verifyMediaType('application/json'); // IANA media type / MIME (RFC 6838)
// dispatcher works for any of the 23:
await c.verify('cnpj', '11222333000181');
await c.verify('isin', 'US0378331005');Methods
| Method | Free demo | Paid endpoint | Returns |
|---|---|---|---|
| screen(name) | ✅ | /v1/verdict/screen | sanctions & PEP matches across OFAC/EU/UK/UN + 100+ lists |
| screenWallet(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 |
| screenOigExclusion(name) | — | /v1/screen/oig-exclusion | HHS-OIG LEIE healthcare-exclusion screen |
| screenFuzzyName(name) | — | /v1/screen/fuzzy-name | fuzzy OFAC SDN match (alias/transliteration) |
| lookupGleifOwnership(lei) | — | /v1/lookup/gleif-ownership | GLEIF corporate-ownership tree (UBO) |
| lookupGleifEntity(name) | — | /v1/lookup/gleif-entity | company name → LEI resolver |
| lookupSecFilings(tickerOrCik) | ✅ | /v1/lookup/sec-filings | SEC EDGAR recent-filings feed |
| lookupFdaNdc(ndcOrName) | — | /v1/lookup/fda-ndc | FDA NDC drug-directory lookup |
| verifyLei(lei) | — | /v1/verify/lei | LEI checksum + GLEIF legal-entity record |
| verifyEin(ein) | — | /v1/verify/ein | US EIN format + IRS issuing campus |
| verifyAbn(abn) | — | /v1/verify/abn | AU ABN modulus-89 checksum |
| verifyLatamTaxid(country, id) | — | /v1/verify/latam-taxid | MX/AR/PE/CO/CL tax-id check digit |
| verifyBic(bic) | — | /v1/verify/bic | SWIFT/BIC decode + institution |
| verifyGstin(gstin) | — | /v1/verify/gstin | India GSTIN mod-36 + state/PAN decode |
| verifyPan(pan) | — | /v1/verify/pan | India PAN structure + holder type |
| verifyGtin(gtin) | — | /v1/verify/gtin | GTIN/UPC/EAN GS1 mod-10 + region |
| verifyUkVat(vat) | — | /v1/verify/uk-vat | UK VAT HMRC modulus-97 |
| verifyAba(routingNumber) | — | /v1/verify/aba | US bank routing / ABA / MICR (Fed mod-10) + district |
| verifyCnpj(cnpj) | — | /v1/verify/cnpj | Brazil CNPJ checksum + Receita Federal lookup |
| verifyCnpjAlpha(cnpj) | — | /v1/verify/cnpj-alpha | Brazil CNPJ incl. 2026 alphanumeric format |
| verifyIsin(isin) | — | /v1/verify/isin | ISIN (ISO 6166) + security resolve |
| verifyCusip(cusip) | — | /v1/verify/cusip | CUSIP (North-American securities) |
| verifySedol(sedol) | — | /v1/verify/sedol | SEDOL (UK/Ireland securities) |
| verifyDuns(duns) | — | /v1/verify/duns | D&B D-U-N-S number format |
| verifyCage(code) | — | /v1/verify/cage | US CAGE / NATO NCAGE code |
| verifyEori(eori) | — | /v1/verify/eori | EU/UK EORI (customs / trade) |
| verifyGln(gln) | — | /v1/verify/gln | GS1 GLN (mod-10) + region |
| verifyPhone(phone) | — | /v1/verify/phone | phone number (ITU-T E.164) |
| verifyImei(imei) | — | /v1/verify/imei | IMEI (GSMA Luhn) + TAC decode |
| verifyIssn(issn) | — | /v1/verify/issn | ISSN (ISO 3297, mod-11) |
| verifyMediaType(mediaType) | — | /v1/verify/media-type | IANA media type / MIME (RFC 6838) |
| verify(kind, value, opts?) | — | (dispatches to the above) | one call for any of the 23 validators |
All methods return a Promise resolving to parsed JSON. Errors throw ComplianceError with a clear message (402 → how to get a key, 429 → demo quota reached).
Get a free key (2 minutes)
The screen, screenWallet, kyb, screeningReport, walletReport and batchScreen
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.
new Client({ apiKey: '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: 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
