Treas APIsanctionssearch.ofac.treas.gov ↗
Search OFAC SDN and consolidated non-SDN sanctions lists by name or ID. Retrieve entity details, aliases, addresses, and identification documents for KYC screening.
What is the Treas API?
This API exposes 2 endpoints against the US Treasury OFAC sanctions database, covering both the Specially Designated Nationals (SDN) list and consolidated non-SDN lists. Use search_sanctions to run fuzzy-matched queries by name, ID number, country, program code, or address, then call get_entity_details with the returned entity ID to pull full records including aliases, identification documents, nationalities, and remarks for KYC and compliance workflows.
curl -X GET 'https://api.parse.bot/scraper/75ff35f9-bc2f-451f-a305-adda7948e13d/search_sanctions?name=vladimir+putin&type=Individual&min_score=80' \ -H 'X-API-Key: $PARSE_API_KEY'
Typed, relational, agent-ready
A generated client with real types, enums, and the links between objects — the structure a flat JSON response can't carry. Autocompletes in your editor and reads cleanly to coding agents.
- Fully typed · autocompletes
- Objects link to objects
- Typed errors & pagination
Typed Python client. Set up the SDK in your uv project, then pull this API’s typed client:
uv add parse-sdk uv run parse init uv run parse add --marketplace sanctionssearch-ofac-treas-gov-api
uv run parse add --marketplace pulls a pinned snapshot of this canonical API — it won’t change underneath you. To customize it, subscribe and swap to your own copy.
"""Walkthrough: OFAC Sanctions Search — screen a name and drill into entity details."""
from parse_apis.sanctionssearch_ofac_treas_gov_api import (
OFACSanctions, EntityType, EntityNotFound,
)
client = OFACSanctions()
# Search for individuals matching a name, with a relaxed fuzzy threshold.
for hit in client.entity_summaries.search(
name="vladimir putin", type=EntityType.INDIVIDUAL, min_score=90, limit=5
):
print(hit.name, hit.score, hit.programs, hit.list)
# Drill into the top match's full record via the summary→detail navigation.
top = client.entity_summaries.search(name="rosneft", min_score=90, limit=1).first()
if top is not None:
entity = top.details()
print(entity.details.last_name, entity.details.first_name)
print("DOB:", entity.details.date_of_birth)
print("Program:", entity.details.program)
for alias in entity.aliases:
print(" alias:", alias.name, f"({alias.category})")
for addr in entity.addresses:
print(" address:", addr.address, addr.city, addr.country)
# Point lookup by the same entity_id discovered above.
try:
refreshed = client.entities.get(entity_id=entity.entity_id)
print("Refreshed:", refreshed.details.last_name)
except EntityNotFound:
print("Entity no longer on the sanctions list")
print("exercised: entity_summaries.search / details / entities.get")
Search the OFAC sanctions list by name or ID number with optional filters for entity type, program, country, list, address, city, and state. Returns fuzzy-matched results above the specified minimum name score threshold. Each result includes the matched name variant, entity type, sanctioning program(s), list membership, and match score. The same entity may appear multiple times with different name variants (aliases), each sharing the same entity_id. Makes two round trips: one to fetch the form state and one to submit the search. Results are not paginated; OFAC returns all matches in a single response.
| Param | Type | Description |
|---|---|---|
| city | string | Filter by city name. |
| list | string | Filter by list type. Omitted returns results from all lists. |
| name | string | Name to search for (person, entity, or vessel name). At least one of name or id_number must be provided. |
| type | string | Filter by entity type. Omitted returns all types. |
| state | string | Filter by state abbreviation or province name. |
| address | string | Filter by street address. |
| country | string | Filter by country name as listed on the OFAC site (e.g. 'Russia', 'Iran', 'China'). Omitted returns all countries. |
| program | string | Filter by sanctions program code (e.g. 'RUSSIA-EO14024', 'IRAN', 'SDGT'). The site supports many program codes; omitted returns all programs. |
| id_number | string | ID number or digital currency address to search for. At least one of name or id_number must be provided. |
| min_score | integer | Minimum fuzzy match score (0-100). Lower values return more approximate matches. |
{
"type": "object",
"fields": {
"results": "Array of matching sanctions entries, each with entity_id, name, address, type, programs, list, and score",
"total_found": "Total number of matches found by OFAC"
},
"sample": {
"data": {
"results": [
{
"list": "SDN",
"name": "John Doe",
"type": "Individual",
"score": 100,
"address": "123 Main St, Springfield, IL 62704",
"programs": "RUSSIA-EO14024",
"entity_id": "35096"
},
{
"list": "SDN",
"name": "Jane Doe",
"type": "Individual",
"score": 90,
"address": "123 Main St, Springfield, IL 62704",
"programs": "TCO",
"entity_id": "23229"
}
],
"total_found": 14
},
"status": "success"
}
}About the Treas API
Searching the OFAC Sanctions Database
The search_sanctions endpoint accepts a name or id_number as the primary search term and returns an array of matching entries with fuzzy scoring. Each result includes entity_id, name, address, type, programs, list, and a score indicating match quality. You can narrow results using optional filters: country (e.g. Russia, Iran), program (e.g. RUSSIA-EO14024, SDGT, IRAN), type for entity classification, and geographic filters city, state, and address. The total_found field reports the total match count from OFAC regardless of how many entries are returned in the current response.
Retrieving Full Entity Records
Once you have an entity_id from search results, get_entity_details returns a structured record in a single call. The details object includes type, last_name, first_name, title, date_of_birth, place_of_birth, list, program, nationality, citizenship, and remark. The aliases array provides each known name variant with a type, category (strong or weak), and the alias name itself. The identifications array lists known documents with type, id_number, country, issue_date, and expire_date. The addresses array covers all known locations with address, city, state_province, postal_code, and country.
Coverage and List Scope
The API covers the two main OFAC screening surfaces: the SDN list and the consolidated non-SDN lists. The list parameter in search_sanctions lets you restrict queries to one of these sources. Program codes on OFAC span dozens of sanctions regimes — passing a specific program code like IRAN or SDGT narrows results to entities designated under that regime. Scores are fuzzy-match thresholds, so you can tune sensitivity to reduce false positives in automated screening pipelines.
The Treas API is a managed, monitored endpoint for sanctionssearch.ofac.treas.gov — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when sanctionssearch.ofac.treas.gov changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.
This isn't an official sanctionssearch.ofac.treas.gov API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.
Will this API break when the source site changes?+
Is this an official API from the source site?+
Can I fix or extend this API myself if I need a new endpoint or field?+
What happens if I call an endpoint that has an issue?+
- KYC screening of customers or counterparties against OFAC SDN and non-SDN lists before onboarding
- Automated transaction monitoring that flags payments to entities matching known aliases or ID numbers
- Compliance dashboards that surface entity nationality, citizenship, and program details for review workflows
- Sanctions research on a specific program (e.g. RUSSIA-EO14024) to enumerate all designated entities and addresses
- Document verification pipelines that cross-reference passport or national ID numbers against the identifications array
- Vessel or aircraft name checks using the name search with type filtering for maritime or aviation compliance
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 200 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
| Team | $300/mo | 20,000 | 300 req/min |
| Company | $1,000/mo | 100,000 | 500 req/min |
Each endpoint has a fixed posted price per successful call — most fall between 1 and 10 credits — shown on this API's page before you run it. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.
Does OFAC publish an official developer API for sanctions search?+
What does the score field in search_sanctions results represent?+
score reflects how closely a result's name matches the query string under fuzzy matching. Higher scores indicate stronger name similarity. You can use this to filter results in your application — for example, surfacing only results above a threshold like 85 to reduce false positives in automated screening.Does search_sanctions return results from both the SDN list and consolidated non-SDN lists by default?+
list parameter is omitted, the endpoint queries across all available lists. You can restrict to a specific list by passing the list parameter with the relevant list type identifier.Does the API return historical or delisted entities, or enforcement actions and penalties?+
Are there pagination controls for large result sets from search_sanctions?+
total_found field indicates the full count of matches OFAC found, but the current endpoint does not expose explicit pagination parameters like page number or offset. If your query returns a high match count, applying additional filters such as country, program, or type is the practical way to reduce and segment results.