# Crypto Address Sanctions Screening | OFAC SDN Batch Check (`spendpreflight/crypto-address-sanctions-screener`) Actor

Screen 1–100 public crypto addresses for exact matches in the daily OFAC SDN snapshot. Export JSON with source timestamps and match flags. EVM matching ignores case; other formats preserve case. A non-match is not clearance or compliance certification.

- **URL**: https://apify.com/spendpreflight/crypto-address-sanctions-screener.md
- **Developed by:** [SpendPreflight](https://apify.com/spendpreflight) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$3.00 / 1,000 address screeneds

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Crypto Address Sanctions Screener — OFAC SDN

SpendPreflight — trust and verification tools for stablecoin payments, built for AI agents and the people who run them.

Operated by SpendPreflight. Batch exact-match public crypto addresses against the same OFAC SDN address engine used by our API. No wallet, private key or USDC payment is required for this Apify channel.

### Input

```json
{"addresses":["0x0000000000000000000000000000000000000000"]}
```

Accepts 1–100 public addresses. EVM hexadecimal addresses compare without case; other address strings preserve case. This is exact address screening, with the currency label recorded by OFAC; it is not a claim that every chain, sanctioned party or indirect exposure is covered. Invalid or excessive input fails before address events are charged.

### Output and freshness

Each result contains `address`, `address_match` (OFAC entity/programs/currency label, or null), `data_as_of`, `scope` and `disclaimer`. The source snapshot is refreshed daily by our existing pipeline. `data_as_of` is the snapshot build/observation timestamp, not OFAC's legal effective date. Data older than 26 hours, missing data or an unavailable channel fails closed. No stale result is labelled clear.

Download the default dataset as JSON or CSV. The zero address above is a public synthetic example, not a customer or sanctioned entity claim. An illustrative non-match has `address_match: null`; use the actual timestamp returned by your run.

### Price

**$0.003 per delivered address observation**, using the `address-screened` event. There is no startup event. Set your run's maximum total charge; if its remaining budget is exhausted, no additional results are delivered. Apify controls platform/post-run storage charges and any discounts; check the Store pricing panel before running. Owner tests, free-plan runs and SMTP acceptance do not establish revenue.

### Privacy and permissions

Limited permissions only. No proxies, other Actors, request queues, extra stores or external account credentials. The owner deployment token is used only in GitHub Actions; it is never embedded in this Actor. The Actor passes only its live run ID, a one-use random nonce and the requested public addresses to SpendPreflight. A body digest served by its live Apify container authenticates that pending request. No Apify API token is sent to SpendPreflight.

The default run `INPUT` is removed after reading; query values/results are never logged by our code. SpendPreflight processes the request in memory without retaining bodies, run IDs, addresses or results. **Apify independently retains user-owned output datasets, run metadata, and any saved tasks under its platform retention policy.** Do not submit private data or assume platform-wide zero retention. No additional data store is created by this Actor. Output may be downloaded/deleted by the user through Apify.

### Limits

Informational screening, **not legal or tax advice**, not a compliance certification or safety guarantee. A non-match is not sanctions clearance. This tool does not assess ownership, indirect exposure, non-OFAC lists or transaction history. Verify a match against the [official OFAC source](https://ofac.treasury.gov/sanctions-list-service) before acting. No custody, signing, payment or transfer occurs. No automatic retry on ambiguous billing/output failures.

Public service [privacy](https://spendpreflight.com/privacy/) and [status history](https://status.spendpreflight.com/) apply. Questions: contact@spendpreflight.com.

### Private-run channel authentication

An Actor-specific application signing key is encrypted in the Actor's private runtime settings and excluded from builds and public source. Only a signature over the public run/build identity, short-lived timestamp, requested-input digest and one-use nonce is sent to SpendPreflight. The backend holds the public key and checks the current official build and live proof endpoint. Customer runs, output stores and logs keep their existing access restrictions. No owner/customer Apify API token or RPC credential is forwarded. CI authorization checks produce only a SELFTEST receipt, no product lookup or chargeable event.

# Actor input Schema

## `addresses` (type: `array`):

1–100 public digital-currency addresses. Exact OFAC SDN matches only. EVM is case-insensitive; other formats preserve case. $0.003 per delivered address. Do not submit private data. INPUT is removed after reading; Apify independently retains output under its platform policy.

## Actor input object example

```json
{
  "addresses": [
    "0x0000000000000000000000000000000000000000"
  ]
}
```

# Actor output Schema

## `results` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "addresses": [
        "0x0000000000000000000000000000000000000000"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("spendpreflight/crypto-address-sanctions-screener").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = { "addresses": ["0x0000000000000000000000000000000000000000"] }

# Run the Actor and wait for it to finish
run = client.actor("spendpreflight/crypto-address-sanctions-screener").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "addresses": [
    "0x0000000000000000000000000000000000000000"
  ]
}' |
apify call spendpreflight/crypto-address-sanctions-screener --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,spendpreflight/crypto-address-sanctions-screener"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/hNJhO0occ4FYdhUyx/builds/siUpPlAFqh6ea9Vi2/openapi.json
