npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

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

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-screening

Quickstart (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-100

Compliance & 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 lookup

KYB 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:

  1. Go to https://api.gocreativeai.com/start — the guided key wizard.
  2. 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.
  3. 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