Continuous monitoring re-screens your counterparties as watchlist data changes, catching new designations after onboarding.
Continuous monitoring re-screens your counterparties as watchlist data changes, catching new designations after onboarding.
Sanctions screening cannot be treated as a one-off check at onboarding. Regulatory expectations increasingly require continuous monitoring: re-screening existing counterparties as watchlist data changes, so that newly designated individuals or companies are caught even if they passed the initial screen.
We do not offer a dedicated monitoring product with stored counterparty data and managed alerts. We are developing features to make monitoring easier, but as a data and screening provider, we will provide well-documented data and screening primitives, not a full case management tool. This guide explains how to build monitoring on the existing API and bulk data infrastructure.
Screening takes a counterparty and checks whether it matches any entity in the database right now. The /match endpoint does this.
Monitoring adds a time dimension: not "does this counterparty match today?" but "has anything changed since the last check that would affect screening results?" This requires:
The challenge is doing this efficiently without generating excessive noise.
Regardless of which implementation path you choose, you need to maintain state about screening matches over time. This section describes how that state is typically structured, how to keep routine data updates from overwhelming analyst review, and how to reason about when a change to an entity should raise a new alert.
Start from the compliance regime you operate under. Monitoring workflows differ in three ways: the regulatory exposure of the business (OFAC-only, EU FSF, UK OFSI, or a combination), its risk appetite, and the product the data is embedded in. Onboarding screening has different ergonomics than ongoing monitoring. The patterns below reflect what tends to work in practice; adapt them to where you sit on these axes.
Persist resolution decisions so they survive routine data updates. An entity you have resolved, whether as a match or a mismatch, should not re-enter triage every time a MOD arrives. Store the decision against the canonical ID; on each update, reconcile stored IDs against the incoming id and referents fields as described in the identifiers documentation. The /entities endpoint is free, which makes it cheap to re-check a stored ID's current risk picture without running a full re-screen.
Filter non-material MOD operations before escalating them. Distinguishing source-driven from pipeline-driven change is a shared problem: today the delta format does not tell you which of the two you are looking at. This is an area we are maturing on our side. In the meantime, the most effective filter is local. Diff the properties your matcher uses, track topics and programId changes, and watch for new Sanction objects. Most routine noise can be suppressed this way.
Split the alert decision into two gates: Resolution (is this really the right entity?) and Relevance (does it matter to your business?) A single alert-state field conflates two independent questions, and any data change then potentially re-opens the whole decision. Keeping them separate means each change can be routed to only the gate it affects.
Resolution. Is the counterparty in your portfolio actually the entity we returned?
Some regulated contexts do not permit leaving a match unresolved; it must be treated as a confirmed match until disproven. Whether unresolved is a distinct state or collapses into confirmed match in your workflow is a policy question driven by your legal environment. Check your compliance requirements before designing around it.
Relevance. For confirmed matches (and for unresolved matches, under the policy above), does the entity's risk profile fall within the compliance scope you operate under? Three axes drive this gate:
topics classify the kind of risk (sanction, role.pep, sanction.linked, reg.warn). A topic gain or escalation is a Relevance event.programId identifies the specific sanction programs the entity sits under. Evaluate each program against the programs and jurisdictions you monitor (see Re-alerting depends on your regulatory exposure below).Sanction objects returned by the nested entities API. A new Sanction on an already-matched entity is a new legal basis for the designation, even if the entity's own properties are unchanged.Dataset membership serves as a coarser proxy for program-level tracking where finer granularity is overkill. Common Relevance outcomes include: in-scope, action required; in-scope, accepted with monitoring (a permitted counterparty that must still be watched for risk changes); out-of-scope (flagged by an authority the business is not subject to).
Persist the pair of outcomes, one per gate. Re-alerting rules then depend on which gate an incoming data change acts on.
| Field | Purpose |
|---|---|
| Counterparty internal ID | Link the match back to your customer or supplier record |
| Matched entity ID | The canonical id from the screening result. On each update, reconcile against incoming id and referents to catch merges — see identifiers |
| Match score | Detect score drift over time |
| Resolution state | confirmed match, confirmed mismatch, or unresolved |
| Relevance state | Customer-defined; typical values include in-scope action, in-scope monitored, out-of-scope |
| Last gate evaluated | Which gate the most recent decision was made on; routes incoming data changes to the right re-evaluation |
| Datasets at time of match | Which datasets the entity appeared in; detect when new authorities flag the same entity |
| Topics at time of match | Which risk topics applied; detect escalation (e.g. PEP becomes sanctioned) |
| Program IDs at time of match | Which programId values were associated with the entity |
| Screening timestamp | When this match was last screened and last reviewed |
A new designation only matters if it falls within the jurisdictions and programs you monitor. Relevance outcomes are relative to the compliance scope of the business using the data, not absolute properties of the entity.
A Person sanctioned only under OFAC is already a Relevance event for any business with OFAC in scope. When that person is later designated under EU FSF, a global bank that also monitors EU FSF records a new Relevance trigger; a US-only institution sees no change in exposure, since the entity was already flagged via OFAC. Store the programs and jurisdictions you monitor as configuration, and evaluate each incoming programId or dataset change against that configuration before escalating.
The axis cuts the other way too: a delisting in one jurisdiction does not close an alert if the entity is still designated under another program you monitor.
Not every change to a matched entity warrants a new alert. Route each change by the gate it acts on:
role.pep entity gaining sanction, or a new sanction.linked), a new programId, new adjacent Sanction metadata, or a delisting. Evaluate each against the programs and jurisdictions you monitor. Only in-scope changes produce an alert.For confirmed matches, the /entities endpoint is the cheapest way to refresh the risk picture: polling the canonical IDs you have stored surfaces Relevance changes (new topics, new programs, new sanctions metadata) without running a full re-screen, and it does not count against your API quota.
Entity IDs are not permanent. Deduplication merges records from different sources into a single profile, and when it does, the entity's canonical ID can change; previously-merged entities can also be split. The identifiers documentation covers the mechanics: source IDs, canonical IDs, the referents list, and the six-month expiration window.
For a monitoring workflow, merges create three specific problems:
All three are detectable by checking each incoming match's referents against your stored entity IDs. If a referent matches a stored ID, the entity was merged rather than newly added. When you detect a merge:
topics, datasets, and programId values from both fragments. If the combination introduces new risk factors (one fragment was PEP-only, the other sanctioned), the risk picture has changed and this is a re-alert event.Changes in the database originate from three distinct causes:
Distinguishing source-driven from pipeline-driven changes is a problem we are still maturing. A MOD operation in a delta file looks the same whether the underlying government data changed or a parser was improved, and the last_change field does not separate these causes either. Reducing the noise this generates is a shared effort: we are refining the signals we expose; the workarounds below give you a pragmatic way to filter the majority of non-material MOD operations on your side today.
Two patterns generate disproportionate noise:
last_change limitations. This field reflects any change to entity data, including pipeline-driven changes. It does not reflect deduplication events: merges do not bump last_change. At the dataset level, last_change can regress to an earlier date when entities are removed. Treat it as a rough filter, not an authoritative signal. See What does "last change" indicate?.Two strategies exist for monitoring, and you can combine them.
API-based re-screening calls the /match endpoint on a schedule and compares results to the previous run. It is simpler to implement and does not require managing bulk data updates locally. Best for customers using the hosted API or on-premise yente who want a straightforward integration. You still need to maintain identifiers along with Resolution and Relevance decisions.
Delta-based monitoring consumes incremental change files and re-screens only the entities that changed. It is more efficient at scale and gives finer control over which changes to act on. Best for bulk data customers who already manage a local copy of the dataset and have the engineering capacity for a delta processing pipeline.
A hybrid approach is often the most practical: use deltas to identify changed entities between runs, and do a periodic full re-screen (weekly or monthly) as a safety net.
| Factor | API re-screening | Delta-based |
|---|---|---|
| Setup complexity | Low | Medium to high |
| Engineering required | Scheduling and result comparison | Delta parsing and local data management |
| Scope, modification date filtering | Query parameters | Local comparison/logic |
| Potential relevance change | Check what changed in returned matches | Check what changed in relevant modified entities |
| Latency | Bounded by polling frequency | Near-real-time (process deltas as published) |
| Portfolio size sweet spot | Up to ~50,000 counterparties | Any size |
| Prerequisite | API access or on-premise yente | Bulk data in FollowTheMoney (FtM) format |
/match with appropriate scope filters.Use tight scope filtering. Every entity in scope is a candidate for re-screening on every run. The scope filtering guide covers all available mechanisms: collections, datasets, risk topics, and entity types. Narrowing the collection from default to sanctions alone can reduce the candidate set by an order of magnitude.
The changed_since filter. This parameter restricts results to entities whose last_change timestamp falls after a given date. Identify which entities changed since the last run, then re-screen only counterparties that previously matched or narrowly missed matching those entities. See the noise problem for caveats on last_change.
Now determine whether the changed fields imply alerting.
The delta update mechanism provides incremental change files with ADD, MOD, and DEL operations between consecutive published versions. Read that documentation first for format details, access mechanism, and version tracking.
A typical workflow:
index.json metadata (see keeping data fresh).ADD: Screen the new entity against your full counterparty portfolio.MOD: Re-screen against counterparties that previously matched (or narrowly missed matching) this entity.DEL: Mark any active alerts referencing this entity ID for review. The entity was removed or merged.DEL and one ADD operation for the newly minted canonical ID. Alternatively, one entity could be merged into another with a canonical ID, resulting in a DEL of the merged entity and a MOD of the receiving entity. In both cases, the IDs of the merged (DEL) entities end up as referents in the resulting (ADD or MOD) entity. Update stored entity IDs and consolidate duplicate alerts (see Handling merges and deduplication).When processing a MOD, compare the previous and current entity to assess whether the change is material:
topics and datasets. A change in risk classification or data source attribution is meaningful even when matching properties are identical.This requires storing the previous version of each entity locally, which adds overhead but dramatically reduces re-screening volume during large pipeline-driven updates.
Deltas are only available for the FollowTheMoney entity format. If you consume CSV or nested JSON, either adopt FtM for your delta pipeline (recommended) or diff successive full exports yourself. The latter works but is more resource-intensive and loses the explicit operation semantics.
Delta-based monitoring is more efficient, but it does not fully replace periodic full re-screening:
DEL/ADD pair for an entity you were not previously tracking.We want to be transparent about the direction of this work. Two principles guide our approach:
We do not plan to build a case management tool. Alert triage, analyst assignment, audit trails, and compliance workflow management are better served by dedicated tools. Our goal is to provide data primitives that make those tools effective, not to compete with them.
We strongly prefer not to store customer data. Most monitoring products require you to upload your counterparty portfolio, where it is stored and re-screened periodically. This creates data processor obligations, privacy risk, and operational complexity on both sides. We are exploring approaches that make monitoring viable without requiring us to hold your data, including clearer change metadata and higher-throughput screening endpoints designed for repeated use. This is an active area of work; please share what would be most useful for your use case.
We will update this guide as new capabilities ship. If you have specific monitoring requirements or encounter challenges with the workflows described here, reach out to our support team.