Sanctions lists
OFAC SDN list additions and removals for named watches
This Actor diffs the official OFAC Specially Designated Nationals XML against watches you supply and emits source-linked addition/removal digest rows. Public SDN XML only.
Not legal, KYC, or screening advice. Not a real-time payment blocker. Not HTS tariff monitoring. Unofficial research on public lists.
from $8.00 / 1,000 Sanctions change digest row ($0.008 per delivered apify-default-dataset-item). No Actor Start. Unchanged runs that write zero default-dataset rows typically charge $0.00 on current PPE.
Open Sanctions Change Tracker on Apify
Sanctions Change Tracker, not a neighboring Actor
Use this page for this Actor’s job. Use HTS Tariff & Trade Scraper for HTS/USTR changes; Use Campaign Finance Scraper for FEC/LDA filings; Use Federal Register Scraper for Federal Register docs.
| This Actor | HTS Tariff & Trade Scraper | Campaign Finance Scraper | Federal Register Scraper | |
|---|---|---|---|---|
| Intent | Sanctions Change Tracker | HTS/USTR changes | FEC/LDA filings | Federal Register docs |
| Primary input | see schema | HTS watches | feeds / watchTerms | feeds / watchTerms |
| What it reads | Public sources listed on the Store page | USITC/USTR public data | OpenFEC / LDA.gov | federalregister.gov API |
| Primary output | Dataset rows billed per live PPE | tariff digest rows | campaign digest rows | FR digest rows |
| Not this job | Not legal, KYC, or screening advice. Not a real-time payment blocker. Not HTS tariff monitoring. Unofficial research on public lists. | Not OFAC SDN list diffs | Not OFAC sanctions or Federal Register | Not page-HTML regulatory crawls |
Store ID: taroyamada/sanctions-change-digest. Respect source terms, robots.txt, and rate limits.
Use cases
- Named-entity SDN watches
- Addition/removal alerts
- Recurring snapshotKey compliance research
How is Sanctions Change Tracker different from HTS Tariff & Trade Scraper and Campaign Finance Scraper?
Sanctions Change Tracker (taroyamada/sanctions-change-digest): This Actor diffs the official OFAC Specially Designated Nationals XML against watches you supply and emits source-linked addition/removal digest rows. Public SDN XML only. Not legal, KYC, or screening advice. Not a real-time payment blocker. Not HTS tariff monitoring. Unofficial research on public lists. HTS Tariff & Trade Scraper is for HTS/USTR changes (input HTS watches; USITC/USTR public data; tariff digest rows). Not OFAC SDN list diffs. Campaign Finance Scraper is for FEC/LDA filings (input feeds / watchTerms; OpenFEC / LDA.gov; campaign digest rows). Not OFAC sanctions or Federal Register. Federal Register Scraper is for Federal Register docs (input feeds / watchTerms; federalregister.gov API; FR digest rows). Not page-HTML regulatory crawls.
What input is required?
Live required fields: none listed (see live fields). Published exampleRunInput is shown below. Quickstart: leave watches empty to use the default all-programs watch, or configure one watch with programs=SDGT to narrow scope
| Field | Type | Default | Notes |
|---|---|---|---|
watches |
object[] | empty |
Watch configurations. One entry per watch target. Each watch produces one summary digest row. Set programs and/or sdnTypes to narrow the scope; add watchTerms for name-match alerting. If omitted, a single all-programs default watch is used. Each item supports id, name, watchTerms, programs, sdnTypes, maxEntries. |
sdnXmlUrl |
string | https://www.treasury.gov/ofac/downloads/sdn.xml |
OFAC SDN XML URL. Override the OFAC SDN XML feed URL. The default legacy URL (https://www.treasury.gov/ofac/downloads/sdn.xml) redirects to the current sanctions list service endpoint. Change only if the URL moves. |
maxEntriesPerWatch |
integer | 50 |
Global max entries per watch. Default upper bound on SDN entries in the nested output per watch. Can be overridden per-watch with the maxEntries field. min=1 max=500 |
requestTimeoutSeconds |
integer | 60 |
HTTP request timeout (seconds). Timeout for the SDN XML fetch. The file is several MB so allow at least 60 seconds. min=5 max=300 |
delivery |
string enum | dataset |
Delivery mode. dataset stores results in the Apify dataset. webhook posts the digest JSON to webhookUrl. enum: dataset, webhook |
webhookUrl |
string | empty |
Webhook URL (required when delivery=webhook). POST target for the digest payload. Leave empty for dataset delivery. |
datasetMode |
string enum | all |
Dataset output mode. all emits every watch digest row. action_needed emits only watches with name-match hits. new_only emits only watches with entries not seen in the previous run. enum: all, action_needed, new_only |
snapshotKey |
string | sanctions-change-digest-state |
Snapshot key for recurring state. Stable key used to persist seen SDN entry UIDs across recurring runs so new_only and action_needed modes stay comparable. Use the same key across scheduled runs. |
notifyOnNoNew |
boolean | true |
Emit digest even when no new entries found. When true, every watch always produces a digest row even if no new entries were found. When false, watches with no new entries are omitted from the output. |
dryRun |
boolean | false |
Dry run (skip snapshot writes and webhook delivery). Fetch and process without persisting state or posting webhooks. Safe for testing input shapes. |
nowIso |
string | empty |
Override current time (ISO string, for testing). Set to a fixed ISO timestamp to make runs deterministic against fixture data. |
fixturePath |
string | empty |
Fixture file path (testing). Local XML or JSON fixture for offline tests. When set, the live OFAC SDN URL is not fetched. |
Published Store example run input (omitted fields take schema defaults):
{
"watches": [
{
"id": "sdgt-entities",
"name": "SDGT Entities",
"programs": "SDGT",
"sdnTypes": "Entity",
"maxEntries": 10
},
{
"id": "cuba-watch",
"name": "Cuba Programs",
"programs": "CUBA",
"maxEntries": 10
}
],
"maxEntriesPerWatch": 10,
"requestTimeoutSeconds": 90,
"delivery": "dataset",
"datasetMode": "all",
"snapshotKey": "sanctions-change-digest-quickstart",
"notifyOnNoNew": true,
"dryRun": false
}
Run Sanctions Change Tracker on Apify
How do dataset, webhook, and dry-run delivery work?
delivery defaults to dataset on the live schema. Dataset output is the billable surface when rows are written. webhookUrl is used when delivery is webhook (and typically not during dryRun). dryRun true validates or samples without the usual dataset/webhook side effects described on the Store schema. datasetMode can limit emits to changes_only / changed_only / action_needed versus all. Unchanged runs that write zero default-dataset rows typically charge $0.00 on current PPE.
What does a result contain?
README output fence is truncated or invalid JSON on Store. Illustration head: { "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)." … Treat README samples as illustrations, not a live coverage guarantee. There is no published output JSON schema on the Store page.
How is Sanctions Change Tracker priced?
Billing is pay per event. The live Store card is from $8.00 / 1,000 Sanctions change digest row ($0.008 per delivered apify-default-dataset-item). No Actor Start. Unchanged runs that write zero default-dataset rows typically charge $0.00 on current PPE. Current PPE:
| Event | Price | Emitted when |
|---|---|---|
apify-default-dataset-item (Sanctions change digest row) |
$0.008 | Charged only when a sanctions change digest row is delivered. |
The published README Cost block is stale versus the live Store pricing tab. README Cost still quotes actor-start $0.01. README Cost quotes dataset-item $0.003; live primary is $0.008 (Sanctions change digest row). Live: Sanctions change digest row $0.008. This page quotes live PPE only.
from $8.00 / 1,000 Sanctions change digest row ($0.008 per delivered apify-default-dataset-item). No Actor Start. Unchanged runs that write zero default-dataset rows typically charge $0.00 on current PPE.
See Sanctions Change Tracker pricing on Apify
Limits to keep in mind
- Public OFAC SDN XML
- maxEntriesPerWatch cap
- Not a certified screening engine
- Not legal advice
- Respect source terms, robots.txt, and rate limits.
Open Sanctions Change Tracker on Apify
Related pages
- HTS Tariff & Trade Scraper — Tariffs, not SDN names.
- Campaign Finance Scraper — FEC/LDA, not OFAC.
- Federal Register Scraper — FR documents, not SDN XML.
- BIS Export Control List Change Report — BIS lists, not OFAC.
- Tools