# OFAC SDN List Delta Monitor (added / removed / updated) (`sovereign_workspace/ofac-sdn-delta-monitor`) Actor

Tracks OFAC SDN list deltas (added, removed, updated) from the official Sanctions List Service. A data feed, not a screening determination: the buyer bears screening responsibility.

- **URL**: https://apify.com/sovereign\_workspace/ofac-sdn-delta-monitor.md
- **Developed by:** [Chase Mariano](https://apify.com/sovereign_workspace) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $30.00 / 1,000 sdn changes

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

## OFAC SDN List Delta Monitor

One **event per change** to OFAC's Specially Designated Nationals (SDN)
list: entries **added**, **removed** or **updated**, read from OFAC's own
published delta files. Filter by sanctions program, entry type (individual,
entity, vessel, aircraft) and name. Built for compliance, KYB and fintech
teams who need to know "what changed on the SDN list since my last run" so
they can re-screen, as structured data for their own pipeline instead of
an inbox alert.

> **A data feed, not a screening determination.** This Actor reports what
> OFAC published. It does not screen your customers, decide whether anyone
> is a match, or give legal advice, and a missed run is a missed change. The
> official lists are at
> [sanctionslist.ofac.treas.gov](https://sanctionslist.ofac.treas.gov/Home/SdnList).
> Check every result against OFAC before acting on it. **You, the buyer,
> bear sole responsibility for your sanctions screening and compliance
> decisions.** Using this Actor doesn't transfer or share that
> responsibility.

**Pricing: pay per event.** `sdn-change`: $0.03 per change returned.
A window with no changes costs you nothing.

### Input

```json
{"since_days": 7, "programs": ["RUSSIA-EO14024"], "change_types": ["added", "updated"],
 "state_key": "daily-russia-watch"}
```

Set a `state_key` on a scheduled watch. Changes already delivered under that
name are never charged again, so overlapping windows don't double-bill, and
changes cut by `limit` or your max-charge budget are delivered on the next run.

### Example output (one dataset item per change)

An added entry carries the whole record:

```json
{"change_type": "added", "publication_id": 966, "published_at": "2026-08-28T10:02:49",
 "publication_type": "Standard Action", "entity_id": "58482", "entity_type": "Individual",
 "name": "TAEEDI, Reza Mohammad", "aliases": [], "programs": ["IFSR", "SDGT"],
 "sanctions_lists": ["SDN List"],
 "identifiers": ["National ID No.: 784-1975-3624749-3 (United Arab Emirates)",
                 "Passport: P6602606", "Passport: E96037407"],
 "changes": [],
 "details_url": "https://sanctionssearch.ofac.treas.gov/Details.aspx?id=58482",
 "source_url": "https://sanctionslistservice.ofac.treas.gov/changes/966"}
```

An updated entry says what changed (aliases shortened here):

```json
{"change_type": "updated", "publication_id": 973, "published_at": "2026-09-14T14:35:42",
 "publication_type": "Standard Action", "entity_id": "17013", "entity_type": "Entity",
 "name": "VTB BANK PUBLIC JOINT STOCK COMPANY",
 "aliases": ["JSC VTB BANK", "BANK VTB OPEN JOINT STOCK COMPANY"],
 "programs": ["UKRAINE-EO13662", "RUSSIA-EO14024", "IRAN-EO13902"],
 "sanctions_lists": ["SDN List"], "identifiers": [],
 "changes": ["program added: IRAN-EO13902",
             "legal authority added: Executive Order 13902 (Iran)",
             "alias type changed: F.K.A. -> A.K.A. (x21)",
             "address added: Tehran, Iran",
             "feature added: Additional Sanctions Information -: Subject to Secondary Sanctions",
             "reliability removed: Confirmed",
             "comments removed: Russian Language website for the bank"],
 "details_url": "https://sanctionssearch.ofac.treas.gov/Details.aspx?id=17013",
 "source_url": "https://sanctionslistservice.ofac.treas.gov/changes/973"}
```

### Output fields

One dataset item per result; every field is always present
(empty or null when the source has no value). Defined in
`.actor/dataset_schema.json`.

| Field | Type | Description |
|---|---|---|
| `change_type` | string | added, removed or updated |
| `publication_id` | integer | OFAC publication id (SLS) |
| `published_at` | string | OFAC publication time, as OFAC states it (YYYY-MM-DDTHH:MM:SS) |
| `publication_type` | string | OFAC publication type, e.g. Standard Action |
| `entity_id` | string | OFAC entry id (the SDN uid) |
| `entity_type` | string | Individual, Entity, Vessel or Aircraft |
| `name` | string | Primary name as OFAC formats it |
| `aliases` | array | Other names (a.k.a./f.k.a./n.k.a.) |
| `programs` | array | Sanctions programs the entry is on |
| `sanctions_lists` | array | OFAC lists the entry is on, e.g. SDN List |
| `identifiers` | array | ID documents and digital currency addresses (added/removed entries) |
| `changes` | array | What changed, one line per change (updated entries) |
| `details_url` | string | OFAC Sanctions Search page for the entry |
| `source_url` | string | The OFAC delta file this change came from |

A `programs` filter also matches a change that **removes** an entry from
that program, so a watcher of a program sees removals too. For an updated
entry, `name`, `entity_type`, `aliases` and `programs` come from OFAC's
current SDN list; if the entry has since left the list, they are null.

Runs stop cleanly at your max-charge limit: nothing is pushed past
what you agreed to pay for. If OFAC lists a publication but cannot serve
it, or a file comes back incomplete, the run fails **with nothing
charged** rather than report a partial delta.

Source: U.S. Department of the Treasury, Office of Foreign Assets Control
(OFAC), Sanctions List Service public API: `/changes/history/{year}`,
`/changes/{publication-id}` and the SDN list export. US government data.
This Actor is not affiliated with or endorsed by OFAC or the Treasury.

# Actor input Schema

## `profile` (type: `string`):

Named config preset applied at start. Any field you set explicitly below overrides the preset.

## `since_days` (type: `integer`):

Report changes from OFAC publications in the last N days (1-365). OFAC usually publishes several times a week.

## `change_types` (type: `array`):

Report only these change types: added, removed, updated. Leave empty for all three.

## `entity_types` (type: `array`):

Report only these entry types: Individual, Entity, Vessel, Aircraft. Leave empty for all.

## `programs` (type: `array`):

Report only entries on (or added to / removed from) these OFAC program codes, e.g. RUSSIA-EO14024, SDGT, IRAN, CUBA. Leave empty for all programs.

## `name_keywords` (type: `array`):

Report only entries whose name or an alias contains one of these words (any case). Leave empty for all. This is a convenience filter, not name screening.

## `sanctions_lists` (type: `array`):

OFAC lists to report on. Default: SDN List. Clear it to report every list the delta files cover.

## `state_key` (type: `string`):

Set this on a scheduled watch: changes already delivered under this name are never charged again, so overlapping windows don't double-bill, and changes cut by the limit are delivered next run. Letters, digits, '.', '\_' and '-' only.

## `limit` (type: `integer`):

Maximum SDN changes to report per run.

## Actor input object example

```json
{
  "since_days": 7,
  "sanctions_lists": [
    "SDN List"
  ],
  "limit": 100
}
```

# Actor output Schema

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

No description

## `errorCounters` (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 = {};

// Run the Actor and wait for it to finish
const run = await client.actor("sovereign_workspace/ofac-sdn-delta-monitor").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 = {}

# Run the Actor and wait for it to finish
run = client.actor("sovereign_workspace/ofac-sdn-delta-monitor").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 '{}' |
apify call sovereign_workspace/ofac-sdn-delta-monitor --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,sovereign_workspace/ofac-sdn-delta-monitor"
        }
    }
}
```

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/x62ikMlDN5LSpxb4z/builds/sKSMQjD6AUEmBy8kp/openapi.json
