# Ukraine Sanctions Screener (NSDC) (`canada-dd/ukraine-sanctions-screener-nsdc`) Actor

Screen people, companies and vessels against Ukraine's State Sanctions Register (RNBO/NSDC). Fuzzy name + ID matching across Ukrainian, Russian and Latin spellings. Bundled snapshot index, no NSDC download needed. $0.004 per screened name.

- **URL**: https://apify.com/canada-dd/ukraine-sanctions-screener-nsdc.md
- **Developed by:** [Yurii Domaranskyi](https://apify.com/canada-dd) (community)
- **Categories:** Business, AI
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$4.00 / 1,000 screened names

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## 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.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Ukraine Sanctions Screener (NSDC)

Screen **people, companies and vessels** against **Ukraine's State Sanctions Register** (Державний реєстр санкцій), maintained by the National Security and Defense Council of Ukraine (RNBO / NSDC).

- **Fuzzy name matching across scripts.** Ukrainian, Russian and Latin spellings all match. Names and aliases are transliterated, legal-form words (LLC, ТОВ, ООО, JSC…) are ignored, and word order does not matter. "Viktor Medvedchuk" matches "Медведчук Віктор Володимирович".
- **Exact ID matching.** Tax numbers (INN / РНОКПП), registration numbers (EDRPOU, OGRN), passport numbers, and vessel IMO and MMSI numbers.
- **All three registers:** individuals, legal entities and vessels, with the **status** of each subject (active, lifted or expired), decrees, dates, sanctions term and end date.
- **Fast, with no scraping.** The index is bundled into the actor, so runs never download from the NSDC site.

Built for KYC/AML, compliance, procurement and due-diligence teams, and for Super Intelligence agents (available as an MCP tool).

### Data snapshot: please read

The register website is protected against automated downloads, so this actor ships an **offline snapshot** built from the official NSDC "actions" CSV exports dated **09.10.2026**. The snapshot covers 22,625 individual, 13,700 legal-entity and 888 vessel action rows, which collapse to 13,943 individuals, 9,682 legal entities and 888 vessels (24,513 subjects).
Sanctions imposed, changed or lifted after the snapshot date are **not** included. Every result carries `snapshot_date`. The maintainer refreshes the index by re-downloading the CSVs from drs.nsdc.gov.ua and redeploying. Always confirm a hit on https://drs.nsdc.gov.ua before acting on it.

### Pricing

Pay-per-event: **$0.004 per screened name or ID**. Screening 1,000 names costs $4.

### Input

```json
{"names": ["Viktor Medvedchuk", "Rosneft", "Acme Maple Trading Ltd"], "ids": ["9410210"], "fuzzyThreshold": 0.85}
```

- `names`: names to screen. `ids`: optional IDs for exact lookup.
- `fuzzyThreshold`: minimum similarity from 0 to 1, default 0.85.
- `entityTypes`: any of `individual`, `legal`, `vessel`.
- `activeOnly`: hide lifted or expired subjects.
- `maxMatchesPerName`: cap on matches returned per name.

### Output (one item per screened name/ID)

```json
{"query": "Viktor Medvedchuk", "query_type": "name", "matched": true, "active_match": true, "match_count": 1, "top_score": 1.0,
 "matches": [{"name": "Медведчук Віктор Володимирович", "translit_name": "Medvedchuk Viktor Volodymyrovych", "type": "individual",
   "score": 1.0, "status": "active", "ids": [{"type": "Податковий номер", "value": "…", "country": "Україна"}],
   "decree": "…", "date": "…", "first_decree": "…", "sanctions_term": "…", "sanctions_end_date": "…",
   "register_id": "…", "sourceUrl": "https://drs.nsdc.gov.ua"}],
 "snapshot_date": "09.10.2026", "sourceUrl": "https://drs.nsdc.gov.ua", "attribution": "Source: State Sanctions Register …"}
```

`decree` and `date` give the decree currently in force for the subject. `first_decree` is the original listing. `last_action` records whether the latest decree applied, amended or lifted the sanctions.

### Data source & attribution

Source: **State Sanctions Register of Ukraine, National Security and Defense Council of Ukraine (RNBO / NSDC)**, https://drs.nsdc.gov.ua. The data is a snapshot dated 09.10.2026, reprocessed (normalized, deduplicated, indexed) by this actor. See LICENSES.md.

### Disclaimer

This actor is not affiliated with or endorsed by the NSDC or the Government of Ukraine. Fuzzy matches are *potential* matches and need human review. A non-match does not prove a party is unsanctioned, since the data may be out of date. This is not legal advice. Screen against other lists (OFAC, EU, UK, Canada SEMA) as your obligations require.

# Actor input Schema

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

Person, company or vessel names (Ukrainian, Russian or Latin script).

## `ids` (type: `array`):

Exact ID lookup: tax numbers, registration numbers (EDRPOU, OGRN, INN), passport numbers, IMO/MMSI.

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

Minimum name similarity, 0-1 (default 0.85). Lower = more potential matches.

## `entityTypes` (type: `array`):

Leave empty for all

## `activeOnly` (type: `boolean`):

Hide subjects whose sanctions were lifted or expired (they are shown with status by default)

## `maxMatchesPerName` (type: `integer`):

Cap on matches returned per screened name

## Actor input object example

```json
{
  "names": [
    "Viktor Medvedchuk",
    "Acme Maple Trading Ltd"
  ],
  "fuzzyThreshold": 0.85,
  "activeOnly": false,
  "maxMatchesPerName": 10
}
```

# Actor output Schema

## `results` (type: `string`):

No description

## `fullResults` (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 = {
    "names": [
        "Viktor Medvedchuk",
        "Acme Maple Trading Ltd"
    ],
    "fuzzyThreshold": 0.85
};

// Run the Actor and wait for it to finish
const run = await client.actor("canada-dd/ukraine-sanctions-screener-nsdc").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 = {
    "names": [
        "Viktor Medvedchuk",
        "Acme Maple Trading Ltd",
    ],
    "fuzzyThreshold": 0.85,
}

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

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

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

```

## CLI example

```bash
echo '{
  "names": [
    "Viktor Medvedchuk",
    "Acme Maple Trading Ltd"
  ],
  "fuzzyThreshold": 0.85
}' |
apify call canada-dd/ukraine-sanctions-screener-nsdc --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,canada-dd/ukraine-sanctions-screener-nsdc"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/JlvKeBbBG0rRwnhRD/builds/kdkgkcmChJ9ZK3ZhQ/openapi.json
