Watchman
AML/CTF/KYC/OFAC Search of global watchlist and sanctions
Install / Use
/learn @moov-io/WatchmanREADME
moov-io/watchman
Moov's mission is to give developers an easy way to create and integrate bank processing into their own software products. Our open source projects are each focused on solving a single responsibility in financial services and designed around performance, scalability, and ease of use.
What is Watchman?
Moov Watchman is a high-performance sanctions screening and compliance tool that helps businesses meet their regulatory obligations. It provides an HTTP server and Go library for searching against multiple global sanctions and screening lists.
Key Features
- Geocoding: Using one of the supported providers.
- Senzing Support: Import data files in senzing format and get search responses as senzing entities.
- Comprehensive Coverage: Integrates multiple global watchlists in one unified system
- High-Performance Search: Optimized for speed and accuracy using advanced matching algorithms
- Flexible Integration: HTTP API and Go library for easy integration into your systems
- Automated Updates: Regular refreshes of watchlist data to ensure compliance
Included Lists
Watchman integrates the following lists to help you maintain global compliance:
| Source | List | |----------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | OpenSanctions | Any senzing dataset from OpenSanctions | | United Nations | Consolidated Sanctions List | | US Treasury | Office of Foreign Assets Control (OFAC) and Non-SDN list | | US Government | Consolidated Screening List (CSL), FinCEN 311 |
Future Lists
The v0.50+ series of Watchman has revamped its search engine. The following lists are being re-added into Watchman.
| Source | List | |--------|------| | European Union | Consolidated Sanctions List | | United Kingdom | OFSI Sanctions List | | United Kingdom | Sanctions List (Disabled by default) |
v2 Endpoints (v0.50+ series and beyond)
The v0.50+ series of Watchman has introduced a new v2 search endpoint and removed the older endpoint. This was done to offer a unified response model, improve overall performance, and work towards a stable v1.0 release.
We encourage you to try out the new Watchman and report any issues or requests in slack (#watchman channel).
Project status
Moov Watchman is actively used in multiple production environments. Please star the project if you are interested in its progress. If you have layers above Watchman to simplify tasks, perform business operations, or found bugs we would appreciate an issue or pull request. Thanks!
Usage
The Watchman project implements an HTTP server and Go library for searching against Watchman.
Government lists are downloaded (and refreshed), parsed, prepared, normalized, and indexed in-memory. Searches operate concurrently and do not require an external database or connection.
Docker
We publish a public Docker image moov/watchman from Docker Hub or use this repository. No configuration is required to serve on :8084. We also have Docker images for OpenShift published as quay.io/moov/watchman. Lastly, we offer a moov/watchman:v2-static Docker image with files from 2019. This image can be useful for faster local testing or consistent results.
Start the Docker image using a tag:
docker run -p 8084:8084 moov/watchman
Run a search for an individual or business:
curl -s "http://localhost:8084/v2/search?name=Nicolas+Maduro&type=person&limit=1&minMatch=0.75" | jq .
<details>
{
"entities": [
{
"name": "Nicolas MADURO MOROS",
"entityType": "person",
"sourceList": "us_ofac",
"sourceID": "22790",
"person": {
"name": "Nicolas MADURO MOROS",
"altNames": null,
"gender": "male",
"birthDate": "1962-11-23T00:00:00Z",
"deathDate": null,
"titles": [
"President of the Bolivarian Republic of Venezuela"
],
"governmentIDs": [
{
"type": "cedula",
"country": "Venezuela",
"identifier": "5892464"
}
]
},
"business": null,
"organization": null,
"aircraft": null,
"vessel": null,
"contact": {
"emailAddresses": null,
"phoneNumbers": null,
"faxNumbers": null,
"websites": null
},
"addresses": null,
"cryptoAddresses": null,
"affiliations": null,
"sanctionsInfo": null,
"historicalInfo": null,
"sourceData": {
"entityID": "22790",
"sdnName": "MADURO MOROS, Nicolas",
"sdnType": "individual",
"program": [
"VENEZUELA",
"IRAN-CON-ARMS-EO"
],
"title": "President of the Bolivarian Republic of Venezuela",
"callSign": "",
"vesselType": "",
"tonnage": "",
"grossRegisteredTonnage": "",
"vesselFlag": "",
"vesselOwner": "",
"remarks": "DOB 23 Nov 1962; POB Caracas, Venezuela; citizen Venezuela; Gender Male; Cedula No. 5892464 (Venezuela); President of the Bolivarian Republic of Venezuela."
},
"match": 0.7784062500000001
}
]
}
</details>
Data persistence
By design, Watchman does not persist (save) any data about the search queries or lists pulled from external sources. Watchman can store ingested files (the individual records) in a MySQL or PostgreSQL database for concurrent access. External lists that are downloaded on startup (and refreshed periodically) are only kept in memory. No encryption of data in-memory is performed.
Configuration
Watchman recommends file-based configuration but supports environmental variable options.
FAQ
Reporting hits to OFAC
OFAC requires reporting of positive hits and has a voluntary self-disclosure portal. Work with your Financial Institution for complete details.
Useful resources
- OFAC Sanctions Search Page
- Subscribe for OFAC email updates
- When should I call the OFAC Hotline?
- BIS Denied Persons List with Denied US Export Privileges (DPL)
- BIS Entity List
- Sectoral Sanctions Identifications (SSI)
- US Sanctions Search FAQ
Getting help
channel | info ------- | --
Related Skills
node-connect
345.4kDiagnose OpenClaw node connection and pairing failures for Android, iOS, and macOS companion apps
frontend-design
104.6kCreate distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, or applications. Generates creative, polished code that avoids generic AI aesthetics.
openai-whisper-api
345.4kTranscribe audio via OpenAI Audio Transcriptions API (Whisper).
qqbot-media
345.4kQQBot 富媒体收发能力。使用 <qqmedia> 标签,系统根据文件扩展名自动识别类型(图片/语音/视频/文件)。

