🔔 Sanctions Change Tracker
Pricing
from $10.00 / 1,000 results
🔔 Sanctions Change Tracker
Automate OFAC compliance checks by extracting daily additions and removals from the SDN list. Generate precise JSON diffs for counterparty screening.
OFAC Sanctions Change Digest | SDN List Monitor
Maintain strict compliance by extracting structured updates directly from the official OFAC website using this dedicated SDN List scraper. Global compliance teams and risk managers use this tool to scrape the Specially Designated Nationals database, reliably tracking entity additions and removals at scale. Instead of writing complex parsers to monitor fragile government websites in a browser, you can set up scheduled weekly or daily runs to automatically detect sanctions changes. By configuring custom watch-terms, you can search the scraped data for specific counterparty names, generating a concise change digest that instantly flags new risks. Extract deep granular details directly from the web, outputting comprehensive profiles for every flagged individual or organization. The actor outputs rich JSON data, including a nested entries array containing raw SDN records, a precise diff object highlighting exact changes between runs, and a matchedAliases field for exact name screening hits. Whether you need to integrate these results into internal compliance tools via API, export the targeted URLs to a dashboard, use the extracted details to verify contact information, or send alerts to an email address, this scraper streamlines the workflow. Stop worrying about missed updates and start using automated snapshot-backed change detection to maintain an accurate internal database.
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.
⭐ Was this helpful?
If this actor saved you time, please leave a ★ rating on Apify Store. It takes 10 seconds, helps other developers discover it, and keeps updates free.
Bug report or feature request? Open an issue on the Issues tab of this actor.