OFAC Sanctions Change Digest | SDN List Monitor avatar

OFAC Sanctions Change Digest | SDN List Monitor

Pricing

from $10.00 / 1,000 results

Go to Apify Store
OFAC Sanctions Change Digest | SDN List Monitor

OFAC Sanctions Change Digest | SDN List Monitor

Monitor the OFAC SDN (Specially Designated Nationals) sanctions list for additions and removals. Summary-first digest per configured watch with snapshot-backed change detection, watch-term name alerts, and program/type filtering.

Pricing

from $10.00 / 1,000 results

Rating

0.0

(0)

Developer

太郎 山田

太郎 山田

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

9 hours ago

Last modified

Share

Monitor the OFAC SDN (Specially Designated Nationals) sanctions list for additions and removals. Summary-first digest per configured watch with snapshot-backed change detection, watch-term name alerts, and program/type filtering.

Store Quickstart

  • Start with store-input.example.json for a two-watch (SDGT entities + Cuba programs) dataset run.
  • If that matches your workflow, switch to store-input.templates.json and pick one of:
    • SDGT Quickstart (2-program starter) for first-run validation
    • Named Entity Watch for counterparty name-screening against the SDN list
    • Russia & Iran Program Digest for geo-targeted sanctions tracking
    • Individuals-Only Watch for people-focused screening
    • Webhook Upgrade for compliance automation with action-needed handoff

Key Features

  • 📋 Summary-first output — 1 watch = 1 digest row; raw SDN entries nested under entries
  • 🔄 Change detection — snapshot-backed diff flags new additions and list removals between runs
  • 🔍 Name screening — watch-term matching across SDN entry names and all aliases (case-insensitive)
  • 🗂️ Program & type filtering — scope any watch to OFAC program codes or entity types
  • 🪝 Webhook delivery — route action-needed digests to Slack, compliance tools, or any HTTP endpoint
  • No auth required — OFAC publishes the SDN XML as a public feed

Use Cases

WhoWhy
Compliance teamsDaily/weekly digest of SDN additions for counterparty screening
AML/KYC workflowsName-match alerting when specific entities appear on the list
Risk systemsTrack geo-targeted programs (Russia, Iran, Cuba) for jurisdictional exposure
Procurement & financeVerify vendors/suppliers haven't been added to the SDN list

Input

FieldTypeDefaultDescription
watchesarrayOne entry per watch target. Each watch produces one summary digest row. Set programs and/or sdnTypes to narrow the scope
sdnXmlUrlstring"https://www.treasury.gov/ofac/downloads/sdn.xml"Override the OFAC SDN XML feed URL. The default legacy URL (https://www.treasury.gov/ofac/downloads/sdn.xml) redirects t
maxEntriesPerWatchinteger50Default upper bound on SDN entries in the nested output per watch. Can be overridden per-watch with the maxEntries field
requestTimeoutSecondsinteger60Timeout for the SDN XML fetch. The file is several MB so allow at least 60 seconds.
deliverystring"dataset"dataset stores results in the Apify dataset. webhook posts the digest JSON to webhookUrl.
webhookUrlstringPOST target for the digest payload. Leave empty for dataset delivery.
datasetModestring"all"all emits every watch digest row. action_needed emits only watches with name-match hits. new_only emits only watches wit
snapshotKeystring"sanctions-change-digest-state"Stable key used to persist seen SDN entry UIDs across recurring runs so new_only and action_needed modes stay comparable

Input Example

{
"watches": [
{
"id": "sdgt-entities",
"name": "SDGT Entities",
"programs": "SDGT",
"sdnTypes": "Entity",
"maxEntries": 20
},
{
"id": "name-screen",
"name": "Counterparty Screen",
"watchTerms": "Acme Corp,Example Bank",
"maxEntries": 10
}
],
"delivery": "dataset",
"datasetMode": "all",
"snapshotKey": "sanctions-change-digest-state"
}

Output

FieldTypeDescription
metaobject
errorsarray
digestsarray
digests[].watchIdstring
digests[].watchNamestring
digests[].programsarray
digests[].sdnTypesarray
digests[].watchTermsarray
digests[].checkedAttimestamp
digests[].statusstring
digests[].newEntryCountnumber
digests[].removedEntryCountnumber
digests[].totalMatchCountnumber
digests[].changedSinceLastRunboolean
digests[].actionNeededboolean
digests[].recommendedActionstring
digests[].signalTagsarray
digests[].watchTermHitsarray
digests[].typeBreakdownobject
digests[].programBreakdownobject
digests[].removedUidsarray
digests[].entriesarray
digests[].errornull

Output Example

{
"meta": {
"generatedAt": "2026-04-03T12:00:00.000Z",
"sdnPublishDate": "04/03/2026",
"sdnRecordCount": 18698,
"newEntries": 3,
"actionNeededCount": 0,
"executiveSummary": {
"overallStatus": "watch",
"brief": "3 new SDN addition(s) and 0 removal(s) detected across 2 watch(es)."
}
},
"digests": [
{
"watchId": "sdgt-entities",
"status": "watch",
"newEntryCount": 3,
"removedEntryCount": 0,
"totalMatchCount": 1847,
"entries": [...]
}
]
}

API Usage

Run this actor programmatically using the Apify API. Replace YOUR_API_TOKEN with your token from Apify Console → Settings → Integrations.

cURL

curl -X POST "https://api.apify.com/v2/acts/taroyamada~sanctions-change-digest/run-sync-get-dataset-items?token=YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{ "watches": [ { "id": "sdgt-entities", "name": "SDGT Entities", "programs": "SDGT", "sdnTypes": "Entity", "maxEntries": 20 }, { "id": "name-screen", "name": "Counterparty Screen", "watchTerms": "Acme Corp,Example Bank", "maxEntries": 10 } ], "delivery": "dataset", "datasetMode": "all", "snapshotKey": "sanctions-change-digest-state" }'

Python

from apify_client import ApifyClient
client = ApifyClient("YOUR_API_TOKEN")
run = client.actor("taroyamada/sanctions-change-digest").call(run_input={
"watches": [
{
"id": "sdgt-entities",
"name": "SDGT Entities",
"programs": "SDGT",
"sdnTypes": "Entity",
"maxEntries": 20
},
{
"id": "name-screen",
"name": "Counterparty Screen",
"watchTerms": "Acme Corp,Example Bank",
"maxEntries": 10
}
],
"delivery": "dataset",
"datasetMode": "all",
"snapshotKey": "sanctions-change-digest-state"
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item)

JavaScript / Node.js

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_API_TOKEN' });
const run = await client.actor('taroyamada/sanctions-change-digest').call({
"watches": [
{
"id": "sdgt-entities",
"name": "SDGT Entities",
"programs": "SDGT",
"sdnTypes": "Entity",
"maxEntries": 20
},
{
"id": "name-screen",
"name": "Counterparty Screen",
"watchTerms": "Acme Corp,Example Bank",
"maxEntries": 10
}
],
"delivery": "dataset",
"datasetMode": "all",
"snapshotKey": "sanctions-change-digest-state"
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);

Tips & Limitations

  • Run daily for active watchlists; weekly for passive monitoring.
  • Webhook delivery works well for compliance team Slack channels — include docket URL for 1-click access.
  • Use watchKeywords generously — false positives are cheap to triage, false negatives miss filings.
  • Pair with regulatory-change-monitor for cross-agency coverage.
  • Archive Dataset rows weekly for long-term compliance evidence retention.

FAQ

How far back does history go?

This actor monitors forward-only — new items since first run. For historical data, use the agency's own search tool.

What timezones are used?

All timestamps are UTC. Use your downstream pipeline to convert to agency-local time if needed.

Does it translate non-English content?

No — original language is preserved. Use downstream translation services if needed.

Is the data official?

Yes — sourced directly from official government websites and feeds. Not a third-party aggregator.

Can I use this for legal research?

For alerting and monitoring, yes. For litigation research, cross-verify with primary sources (agency websites) — this actor is a monitoring tool, not a legal database.

Government & Regulatory cluster — explore related Apify tools:

Cost

Pay Per Event:

  • actor-start: $0.01 (flat fee per run)
  • dataset-item: $0.003 per output item

Example: 1,000 items = $0.01 + (1,000 × $0.003) = $3.01

No subscription required — you only pay for what you use.