OFAC Sanctions Change Digest | SDN List Monitor
Pricing
from $10.00 / 1,000 results
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
太郎 山田
Actor stats
0
Bookmarked
2
Total users
1
Monthly active users
9 hours ago
Last modified
Categories
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.jsonfor a two-watch (SDGT entities + Cuba programs) dataset run. - If that matches your workflow, switch to
store-input.templates.jsonand pick one of:SDGT Quickstart (2-program starter)for first-run validationNamed Entity Watchfor counterparty name-screening against the SDN listRussia & Iran Program Digestfor geo-targeted sanctions trackingIndividuals-Only Watchfor people-focused screeningWebhook Upgradefor 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
| Who | Why |
|---|---|
| Compliance teams | Daily/weekly digest of SDN additions for counterparty screening |
| AML/KYC workflows | Name-match alerting when specific entities appear on the list |
| Risk systems | Track geo-targeted programs (Russia, Iran, Cuba) for jurisdictional exposure |
| Procurement & finance | Verify vendors/suppliers haven't been added to the SDN list |
Input
| Field | Type | Default | Description |
|---|---|---|---|
| watches | array | — | One entry per watch target. Each watch produces one summary digest row. Set programs and/or sdnTypes to narrow the scope |
| sdnXmlUrl | string | "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 |
| maxEntriesPerWatch | integer | 50 | Default upper bound on SDN entries in the nested output per watch. Can be overridden per-watch with the maxEntries field |
| requestTimeoutSeconds | integer | 60 | Timeout for the SDN XML fetch. The file is several MB so allow at least 60 seconds. |
| delivery | string | "dataset" | dataset stores results in the Apify dataset. webhook posts the digest JSON to webhookUrl. |
| webhookUrl | string | — | POST target for the digest payload. Leave empty for dataset delivery. |
| datasetMode | string | "all" | all emits every watch digest row. action_needed emits only watches with name-match hits. new_only emits only watches wit |
| snapshotKey | string | "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
| Field | Type | Description |
|---|---|---|
meta | object | |
errors | array | |
digests | array | |
digests[].watchId | string | |
digests[].watchName | string | |
digests[].programs | array | |
digests[].sdnTypes | array | |
digests[].watchTerms | array | |
digests[].checkedAt | timestamp | |
digests[].status | string | |
digests[].newEntryCount | number | |
digests[].removedEntryCount | number | |
digests[].totalMatchCount | number | |
digests[].changedSinceLastRun | boolean | |
digests[].actionNeeded | boolean | |
digests[].recommendedAction | string | |
digests[].signalTags | array | |
digests[].watchTermHits | array | |
digests[].typeBreakdown | object | |
digests[].programBreakdown | object | |
digests[].removedUids | array | |
digests[].entries | array | |
digests[].error | null |
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 ApifyClientclient = 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
watchKeywordsgenerously — false positives are cheap to triage, false negatives miss filings. - Pair with
regulatory-change-monitorfor 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.
Related Actors
Government & Regulatory cluster — explore related Apify tools:
- EPA Enforcement Digest | ECHO Compliance Risk Monitor — Monitor EPA ECHO all-media facility search, corporate compliance screener, and enforcement case feeds with one summary-first digest row per watched company, facility, or case feed.
- FDA Warning Letters Digest | Summary-First Feed — Monitor public FDA warning letters with one summary-first digest row per configured feed.
- Federal Register Digest | Agency Rule & Notice Monitor — Monitor Federal Register documents — rules, proposed rules, and notices — per configured agency feed.
- Government Contract Award Monitor | Award & Competitor Watch — Monitor public-sector contract award notices for new wins, notable awardees, incumbent recompetes, and competitor signals — one digest row per configured feed without brittle broad crawling.
- Grants.gov Funding Digest | Opportunity Watch & Signal Digest — Monitor Grants.
- NHTSA Vehicle Recall Digest | Recalls + Complaints Watch — Monitor official NHTSA vehicle recall and complaint endpoints for watched model-family, VIN, and manufacturer feeds.
- Product Safety Recall Digest | CPSC + openFDA Alerts — Monitor CPSC saferproducts.
- Regulatory Change Monitor API — Monitor official regulator update feeds, government bulletin pages, and public compliance notices with one action-oriented digest row per monitored source.
- Tariff Trade Change Digest | Federal Register + HTS Monitor — Monitor U.
- Treasury Fiscal Data Digest | Debt, Rates & Budget Monitor — Monitor the U.
- USPTO Patent Monitor API | JSON + Webhook — Search and monitor US patent filings with multi-source fallback.
- Campaign Finance & Lobbying Digest | FEC + LDA Watch — Monitor official FEC OpenFEC committee reports and LDA.
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.