# GLEIF LEI & Sanctions Screener (OFAC/EU/UN/UK) (`gp005/gleif-sanctions-screener`) Actor

Screen companies by LEI or name via GLEIF API; cross-check OFAC, EU, UN, and UK government sanctions lists. Returns enriched entity data with match hits, risk flags, and fuzzy name matching — no login, no paywall, API-first design.

- **URL**: https://apify.com/gp005/gleif-sanctions-screener.md
- **Developed by:** [Geo](https://apify.com/gp005) (community)
- **Categories:** Developer tools, Business
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $35.00 / 1,000 entity screeneds

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## GLEIF LEI & Sanctions Screener (OFAC/EU/UN/UK)

Screen any company or legal entity against **four official government sanctions lists** (US OFAC, EU Consolidated, UN Consolidated, UK FCDO) and enrich the result with **verified LEI data from GLEIF** — the global legal entity identifier registry. Built for KYB, AML, trade-compliance, and counterparty-risk workflows.

### What is this Actor?

GLEIF LEI & Sanctions Screener resolves a company name or LEI code via the [GLEIF API](https://www.gleif.org/en/about-lei/common-data-file-format/gleif-and-concatenated-file-format-download) to get verified legal name, jurisdiction, registration status, and parent/ultimate-parent LEI, then cross-checks those names against:

- **OFAC SDN** (US Treasury Specially Designated Nationals)
- **EU Consolidated List** (all EU sanctions regimes)
- **UN Consolidated List** (UN Security Council resolutions)
- **UK FCDO Sanctions List** (post-Brexit unified list)

All four lists are official government-published, openly licensed data with no login or paywall required.

### Use cases

- **KYB / onboarding**: flag sanctioned counterparties before you engage them
- **AML batch screening**: run your entire customer book against all four lists in one call
- **Trade-compliance checks**: verify suppliers, distributors, and buyers against US + UK + EU + UN lists simultaneously
- **M\&A / due diligence**: check acquisition targets and their parent chains
- **Automated monitoring**: schedule recurring runs for continuous watchlist monitoring

### What data is returned?

| Field | Description |
|---|---|
| `lei` | 20-char ISO 17442 LEI code |
| `legalName` | Verified legal name from GLEIF |
| `jurisdiction` | Country/region of registration |
| `entityStatus` | GLEIF entity status (ACTIVE, INACTIVE, …) |
| `leiStatus` | LEI registration status (ISSUED, LAPSED, …) |
| `registeredAddress` | Full registered address |
| `parentLei` | Direct parent LEI (if available) |
| `ultimateParentLei` | Ultimate parent LEI (if available) |
| `sanctionsHit` | `true` if any list match found |
| `hitCount` | Total number of name matches |
| `hitList` | Which lists triggered (e.g. `["OFAC","EU"]`) |
| `hits` | Per-hit detail: list, matched name, similarity score |
| `checkedLists` | All lists that were checked |
| `gleifStatus` | `found` / `not_found` / `skipped` |

### How to use

#### Input

Provide one or more of these inputs:

```json
{
  "entities": [
    {"name": "Gazprom", "country": "RU"},
    {"lei": "HWUPKR0MPOU8FGXBT394"}
  ],
  "sanctionsLists": ["OFAC", "EU", "UN", "UK"],
  "fuzzyThreshold": 0.7,
  "gleifEnrich": true
}
```

- **`entities`**: array of `{name, lei, country}` objects or plain strings. LEI codes (20-char alphanumeric) are detected automatically.
- **`leis`**: flat array of LEI codes (alternative to `entities`)
- **`names`**: flat array of company names (alternative to `entities`)
- **`sanctionsLists`**: choose any subset of `["OFAC","EU","UN","UK"]` (default: all four)
- **`fuzzyThreshold`**: 0.0–1.0 trigram similarity cutoff (default 0.7 — a good balance; lower = more recall, higher = fewer false positives)
- **`gleifEnrich`**: set `false` to skip GLEIF lookup and screen only by input name (faster, lower cost)
- **`maxTotalChargeUsd`**: hard USD cap — the actor stops gracefully when the budget is reached

#### Output example

```json
{
  "inputName": "Gazprom",
  "lei": "2534001DBBFAD6QDFA72",
  "legalName": "Public Joint Stock Company Gazprom",
  "jurisdiction": "RU",
  "entityStatus": "ACTIVE",
  "leiStatus": "ISSUED",
  "registeredAddress": "Saint-Petersburg, Russian Federation",
  "sanctionsHit": true,
  "hitCount": 3,
  "hitList": ["OFAC", "EU"],
  "hits": [
    {"list": "OFAC", "matchedName": "GAZPROM", "score": 0.91},
    {"list": "EU", "matchedName": "Public Joint Stock Company Gazprom", "score": 0.94}
  ],
  "checkedLists": ["OFAC", "EU", "UN", "UK"],
  "gleifStatus": "found",
  "timestamp": "2026-07-09T10:00:00.000Z"
}
```

### Pricing

This Actor uses pay-per-event billing — you only pay for what runs:

| Event | Price | When charged |
|---|---|---|
| `actor-start` | $0.01 | Once per run |
| `entity-screened` | $0.05 | Per entity (with GLEIF enrichment, multi-list check) |

**Example cost math:**

- 10 entities, all 4 lists, GLEIF on: $0.01 + 10 × $0.05 = **$0.51**
- 100 entities, GLEIF off: $0.01 + 100 × $0.05 = **$5.01**
- Platform compute for a 100-entity run: ~0.01–0.02 compute units (~$0.001–0.002) — well under 30% of event revenue

Set `maxTotalChargeUsd` to cap spend for large batches.

### Limitations

- **Name matching is fuzzy, not authoritative.** The trigram similarity algorithm catches common transliteration variants and abbreviations but is not a certified sanctions-screening system. High-stakes compliance decisions must be reviewed by a compliance officer.
- **GLEIF name matching**: GLEIF's API search uses exact/prefix matching; very short or non-Latin names may not resolve. Supply the LEI directly for guaranteed lookup.
- **Sanctions list freshness**: lists are fetched live on each run. OFAC/EU/UN/UK update on varying schedules (OFAC typically daily). For critical workflows, schedule frequent runs.
- **No OpenSanctions**: this Actor intentionally omits OpenSanctions — its commercial-use terms require a paid license. Use the official government sources directly (included here) for free commercial use.
- **UK list structure**: the UK FCDO XML schema changed in January 2026 (OFSI list retired). This Actor uses the current FCDO consolidated XML at gov.uk.
- **Personal data in lists**: sanctions lists contain individual names and identifiers. Your use of this data must have a valid legal basis (AML/KYB compliance is a recognized lawful purpose). Do not use output to build personal profiles unrelated to compliance screening.

### Integrations

- **API**: run via [Apify REST API](https://docs.apify.com/api/v2) — POST to `/acts/gp005~gleif-sanctions-screener/runs`
- **Scheduling**: set up daily/weekly runs in Apify Console for continuous monitoring
- **Webhooks**: trigger downstream alerts on `SUCCEEDED` runs with hits
- **Make / n8n**: connect via Apify integrations to your existing KYB or CRM workflow
- **MCP**: load via the [Apify MCP server](https://apify.com/apify/actors-mcp-server) for LLM-driven compliance workflows

### Other Actors in the FORGE fleet

- [EDGAR Company Filings & XBRL Fundamentals Extractor](https://apify.com/gp005/edgar-xbrl-fundamentals) — SEC financial data
- [Email Deliverability & Domain Posture Auditor](https://apify.com/gp005/email-deliverability-auditor) — MX/SPF/DKIM/DMARC checks
- [SSL/TLS Certificate Expiry Monitor](https://apify.com/gp005/tls-cert-monitor) — bulk certificate monitoring

### FAQ

#### Is this a certified AML/sanctions screening system?

No. This Actor uses fuzzy name matching against official government XML feeds as a first-pass filter. It is not a certified AML system. Always have a compliance officer review hits before acting on them.

#### Can I use this commercially?

Yes. All four sanctions lists (OFAC, EU, UN, UK FCDO) are official government-published data with permissive or public-domain licensing. The GLEIF API is CC0 (public domain). There is no OpenSanctions data, which requires a commercial license.

#### How often should I run this?

For onboarding, run once per new counterparty. For ongoing monitoring, schedule daily or weekly runs on your active portfolio. OFAC updates their SDN list frequently — sometimes multiple times per day during active sanctions events.

#### What's the false positive rate?

At the default threshold of 0.7, you will see occasional false positives on common words (e.g., searching "China National" may match various Chinese state entities). Increase `fuzzyThreshold` to 0.85+ to reduce noise, or review hits manually. The `score` field tells you how close the match is.

#### Can I supply LEI codes directly?

Yes — include them in `entities` as `{"lei": "HWUPKR0MPOU8FGXBT394"}` or in the `leis` array. Direct LEI lookups bypass the name search step and are more reliable.

#### How do I get support?

Open a GitHub issue or contact us via the Apify Issues tab. Custom integrations and bulk-screening solutions available on request.

# Actor input Schema

## `entities` (type: `string`):

JSON array of entities to screen. Each item can be a string (company name or 20-char LEI) or an object with {name, lei, country}. Example: \[{"name":"Gazprom","country":"RU"},{"lei":"HWUPKR0MPOU8FGXBT394"}]

## `leis` (type: `array`):

Flat list of 20-character ISO 17442 LEI codes to look up. Alternative to 'entities'. Example: \["HWUPKR0MPOU8FGXBT394"]

## `names` (type: `array`):

Flat list of company names to screen. Alternative to 'entities'. Example: \["Gazprom","Rosneft"]

## `sanctionsLists` (type: `array`):

Which official government sanctions lists to screen against. Default: all four (OFAC = US Treasury SDN, EU = EU Consolidated List, UN = UN Security Council Consolidated List, UK = UK FCDO Sanctions List).

## `gleifEnrich` (type: `boolean`):

When true (default), each entity is looked up in the GLEIF LEI registry to get verified legal name, jurisdiction, registration status, and parent/ultimate-parent LEI before sanctions screening. Set false to skip GLEIF and screen only by input name (faster, lower cost).

## `fuzzyThreshold` (type: `number`):

Trigram similarity threshold (0.0–1.0) for name matching against sanctions lists. Default 0.7 balances recall vs false positives. Increase to 0.85+ for strict matching; decrease below 0.6 for broader recall.

## `maxResultsPerEntity` (type: `integer`):

Maximum number of GLEIF name-search matches to return per entity (applies when looking up by name, not LEI). Higher values = more thorough check but more entity-screened charges. Range: 1–20.

## `maxTotalChargeUsd` (type: `number`):

Hard spending cap in USD. The actor stops gracefully when this limit is reached, ensuring you never spend more than intended on large batches. Example: 5.00 caps a run at $5.

## Actor input object example

```json
{
  "entities": "[{\"name\":\"Gazprom\",\"country\":\"RU\"},{\"lei\":\"HWUPKR0MPOU8FGXBT394\"}]",
  "leis": [
    "HWUPKR0MPOU8FGXBT394"
  ],
  "names": [
    "Gazprom",
    "Rosneft"
  ],
  "sanctionsLists": [
    "OFAC",
    "EU",
    "UN",
    "UK"
  ],
  "gleifEnrich": true,
  "fuzzyThreshold": 0.7,
  "maxResultsPerEntity": 3,
  "maxTotalChargeUsd": 5
}
```

# Actor output Schema

## `dataset` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "entities": "[{\"name\":\"Gazprom\",\"country\":\"RU\"},{\"name\":\"Sberbank\"}]",
    "names": [
        "Gazprom",
        "Sberbank"
    ],
    "sanctionsLists": [
        "OFAC",
        "EU",
        "UN",
        "UK"
    ],
    "gleifEnrich": true,
    "fuzzyThreshold": 0.7,
    "maxResultsPerEntity": 3
};

// Run the Actor and wait for it to finish
const run = await client.actor("gp005/gleif-sanctions-screener").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "entities": "[{\"name\":\"Gazprom\",\"country\":\"RU\"},{\"name\":\"Sberbank\"}]",
    "names": [
        "Gazprom",
        "Sberbank",
    ],
    "sanctionsLists": [
        "OFAC",
        "EU",
        "UN",
        "UK",
    ],
    "gleifEnrich": True,
    "fuzzyThreshold": 0.7,
    "maxResultsPerEntity": 3,
}

# Run the Actor and wait for it to finish
run = client.actor("gp005/gleif-sanctions-screener").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "entities": "[{\\"name\\":\\"Gazprom\\",\\"country\\":\\"RU\\"},{\\"name\\":\\"Sberbank\\"}]",
  "names": [
    "Gazprom",
    "Sberbank"
  ],
  "sanctionsLists": [
    "OFAC",
    "EU",
    "UN",
    "UK"
  ],
  "gleifEnrich": true,
  "fuzzyThreshold": 0.7,
  "maxResultsPerEntity": 3
}' |
apify call gp005/gleif-sanctions-screener --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=gp005/gleif-sanctions-screener",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/acts/3t4Dul3ix6gFxN1MR/builds/fBy6whhjvxID6mdc1/openapi.json
