# US Export Control Screening: Consolidated Screening List (`veridra/us-export-control-screening`) Actor

Screen companies against the US government's Consolidated Screening List: BIS Entity List, Denied Persons, Unverified, Military End User, ITAR debarred and OFAC sanctions. Fuzzy name matching, one result per company.

- **URL**: https://apify.com/veridra/us-export-control-screening.md
- **Developed by:** [Veridra Computer Technology](https://apify.com/veridra) (community)
- **Categories:** Business, AI, Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $10.50 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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

### What does US Export Control Screening do?

**US Export Control Screening** checks company names against the US government's **Consolidated Screening List**: the Commerce Department's Entity List, Denied Persons, Unverified and Military End User lists, the State Department's ITAR debarred and nonproliferation lists, and the Treasury's OFAC sanctions lists, in one run. Each company gets one result with a risk level and every possible match. It is a screening aid; it does not make legal or licensing decisions.

It collects data from **[Consolidated Screening List, International Trade Administration (trade.gov)](https://www.trade.gov/consolidated-screening-list)** and returns clean, structured results you can download or pull through the **Apify API**.

### Why use US Export Control Screening?

- **Exporters and freight forwarders:** screen customers, consignees and end users before you ship items subject to US export controls.
- **Procurement and supplier onboarding:** check new suppliers against the Entity List and OFAC lists before you sign.
- **Compliance teams:** re-screen your customer list on a schedule and get a result again only when a company's matches change.
- **Banks and fintechs:** add US export control lists to your KYB checks alongside sanctions screening.
- **AI agents:** screen one company per call and get clean JSON with match scores, license requirements and official links.
- Runs on the Apify platform: schedule runs, call it through the API, connect it to integrations, and get notified when a run fails.

### What data can US Export Control Screening extract?

| Field | Type | Description |
| --- | --- | --- |
| `query` | string | The company name you entered. |
| `riskLevel` | string | hit (a listed name scores 95 or more), review (at or above your threshold) or clear. |
| `bestScore` | integer | Similarity of the closest listed name, 0-100. 100 means the same words. |
| `bestMatchName` | string | Name of the closest listed party; empty when the list does not say it is an organisation and the name is withheld. |
| `bestMatchList` | string | The list the closest match is on. |
| `matchCount` | integer | Number of listed parties at or above the threshold (up to 10). |
| `matchedListCodes` | array | Codes of the lists with a match, for example EL or SDN. |
| `exportControlListMatch` | boolean | Whether a match is on a Commerce or State export control list (EL, DPL, UVL, MEU, ITAR debarred or nonproliferation sanctions). |
| `matches` | array | Each possible match: list, listCode, listEntryId, name, matchedName (the name or alias that matched), nameWithheld, score, entityType, programs, countries, listedOn, licenseRequirement, licensePolicy, federalRegisterNotice and official links. |
| `listsChecked` | array | Lists this result was screened against. |
| `listDataAsOf` | string | When trade.gov generated the list file this result was screened against. |
| `resultSignature` | string | Fingerprint of the outcome. It changes when the matches change; monitoring mode uses it to report a company again only then. |
| `scrapedAt` | string | When this result was collected (UTC, ISO 8601). |

### How to use US Export Control Screening

1. Open the actor and select **Try for free**.
2. Fill in **Company names**, **Lists**. The prefilled example works as a first test.
3. Set **Maximum results** to control how much data, and cost, a run produces.
4. Select **Start** and wait for the run to finish.
5. Download the results as JSON, CSV, Excel or HTML, or fetch them through the API.

### How much does it cost to use US Export Control Screening?

You pay per result: **$15.00 per 1,000 results** ($0.015 each), plus Apify's small start fee of $0.0001 per run. For example, 1,000 results cost about $15.00. You can set a maximum cost per run in the run options, and the actor stops cleanly when it is reached.

Subscribers to Apify's paid plans pay less per result: 10% off on Bronze, 20% off on Silver and 30% off on Gold and higher plans.

### Get only new results

Turn on **Only new results** and schedule the actor (for example daily) to use it as a monitor: each run skips what earlier runs already returned, so you get a feed of new records and pay only for those. The first run returns everything that matches. The memory lives in your own Apify account; give runs the same **Monitor name** to share it when you change other inputs.

### Use it from AI agents

AI agents can find and run US Export Control Screening as a tool through Apify's MCP server (mcp.apify.com) or the Apify API, and get the same structured results, billed per result. Without code, Apify's Zapier, Make and n8n integrations can start it and send each new result to a sheet, CRM or chat.

### Input

See the **Input** tab for every option. The main fields:

| Field | Type | Default | Description |
| --- | --- | --- | --- |
| `companyNames` | array | \[] | Companies or organisations to screen, one per line, for example a customer, supplier or end user. Each gets one result. Individuals are not screened. |
| `lists` | array | \["SDN", "SSI", "CMIC", "NS-MBS", "FSE", "PLC", "CAP", "EL", "DPL", "UVL", "MEU", "DTC", "ACN"] | Which lists of the Consolidated Screening List to screen against. All are on by default. |
| `matchThreshold` | integer | 85 | Lowest name similarity (70-100) reported as a possible match. Scores of 95 or more are reported as hits. |
| `maxResults` | integer | 1000 | Stop after this many results. Each result costs $0.015, so this also caps the cost of a run. Use 0 for no limit. Keep it low for a first test. |
| `onlyNew` | boolean | false | Monitoring mode: skip results this monitor returned in earlier runs, so a scheduled run returns, and bills, only what is new. The first run returns everything that matches. |
| `monitorName` | string | "" | Runs with the same name share one memory of returned results, even if you change other inputs. Leave empty to keep a separate memory for each distinct input. |

Example input:

```json
{
  "companyNames": [
    "Huawei Technologies Co., Ltd.",
    "Rosoboronexport",
    "Beijing Institute of Technology",
    "Bank Melli Iran",
    "Siemens AG"
  ],
  "maxResults": 10
}
```

### Output

You can download the dataset in various formats such as JSON, HTML, CSV, or Excel. Example items:

```json
[
  {
    "query": "Huawei Technologies Co., Ltd.",
    "riskLevel": "hit",
    "bestScore": 100,
    "bestMatchName": "HUAWEI TECHNOLOGIES CO., LTD.",
    "bestMatchList": "Non-SDN Chinese Military-Industrial Complex Companies List (CMIC) - Treasury Department",
    "matchCount": 10,
    "matchedListCodes": [
      "CMIC",
      "EL"
    ],
    "exportControlListMatch": true,
    "matches": [
      {
        "list": "Non-SDN Chinese Military-Industrial Complex Companies List (CMIC) - Treasury Department",
        "listCode": "CMIC",
        "listEntryId": "30947",
        "name": "HUAWEI TECHNOLOGIES CO., LTD.",
        "matchedName": "HUAWEI TECHNOLOGIES CO., LTD.",
        "nameWithheld": false,
        "score": 100,
        "entityType": "entity",
        "programs": "CMIC-EO13959",
        "countries": [
          "CN"
        ],
        "listedOn": null,
        "endDate": null,
        "licenseRequirement": null,
        "licensePolicy": null,
        "federalRegisterNotice": null,
        "sourceListUrl": "https://sanctionslist.ofac.treas.gov/Home/ConsolidatedList",
        "sourceInformationUrl": "https://ofac.treasury.gov/other-ofac-sanctions-lists"
      },
      {
        "list": "Entity List (EL) - Bureau of Industry and Security",
        "listCode": "EL",
        "listEntryId": "03af7d6df1cb349107d67791c92fcfba4422eda0c148aad1b730fc89",
        "name": "Huawei Technologies Co., Ltd.",
        "matchedName": "Huawei Technologies Co., Ltd.",
        "nameWithheld": false,
        "score": 100,
        "entityType": "unspecified",
        "programs": "",
        "countries": [
          "CN",
          "HK"
        ],
        "listedOn": "2019-05-21",
        "endDate": null,
        "licenseRequirement": "For All Items Subject to the EAR (See §734.9(e)1, and §744.11 of the EAR)2.",
        "licensePolicy": "Presumption of denial",
        "federalRegisterNotice": "84 FR 22963; 85 FR 29853; 85 FR 36720; 85 FR 51603;  85 FR 83769; 87 FR 6026; 87 FR 55250",
        "sourceListUrl": "https://www.bis.gov/regulations/ear/744#supplement-4-744",
        "sourceInformationUrl": "https://www.bis.gov/licensing/guidance-on-end-user-and-end-use-controls-and-us-person-controls"
      },
      {
        "list": "Entity List (EL) - Bureau of Industry and Security",
        "listCode": "EL",
        "listEntryId": "d39cedb3c858f0854bb219b12b242575696b55fa06157d354692d967",
        "name": "Huawei Technologies Co., Ltd. (Huawei)",
        "matchedName": "Huawei Technologies Co., Ltd. (Huawei)",
        "nameWithheld": false,
        "score": 99,
        "entityType": "unspecified",
        "programs": "",
        "countries": [
          "CN"
        ],
        "listedOn": "2019-05-21",
        "endDate": null,
        "licenseRequirement": "For all items subject to the EAR, see §§ 734.9(e)1 and 744.11 of the EAR2",
        "licensePolicy": "Presumption of denial",
        "federalRegisterNotice": "84 FR 22963, 84 FR 43495, 85 FR 29853, 85 FR 36720,  85 FR 51603, 86 FR 71559, 87 FR 6026, 87 FR 8182, 87 FR 21012, 87 FR 55250",
        "sourceListUrl": "https://www.bis.gov/regulations/ear/744#supplement-4-744",
        "sourceInformationUrl": "https://www.bis.gov/licensing/guidance-on-end-user-and-end-use-controls-and-us-person-controls"
      },
      {
        "list": "Entity List (EL) - Bureau of Industry and Security",
        "listCode": "EL",
        "listEntryId": "cc5159b3481cb318ea1b6783c58cd265deda28470d5c4fafc6d8e6a7",
        "name": "Bel Huawei Technologies LLC",
        "matchedName": "Bel Huawei Technologies LLC",
        "nameWithheld": false,
        "score": 95,
        "entityType": "unspecified",
        "programs": "",
        "countries": [
          "BY"
        ],
        "listedOn": "2019-08-21",
        "endDate": null,
        "licenseRequirement": "For all items subject to the EAR, see §§ 734.9(e)1 and 744.11 of the EAR2",
        "licensePolicy": "Presumption of denial",
        "federalRegisterNotice": "84 FR 43495, 85 FR 29852, 85 FR 36720, 85 FR 51603, 87 FR 6026, 87 FR 55250",
        "sourceListUrl": "https://www.bis.gov/regulations/ear/744#supplement-4-744",
        "sourceInformationUrl": "https://www.bis.gov/licensing/guidance-on-end-user-and-end-use-controls-and-us-person-controls"
      },
      {
        "list": "Entity List (EL) - Bureau of Industry and Security",
        "listCode": "EL",
        "listEntryId": "48f81ca80cd8603d9cf078a896573cefb8cf59c5ef61e83a3f0f785c",
        "name": "Chengdu Huawei Technologies Co., Ltd.",
        "matchedName": "Chengdu Huawei Technologies Co., Ltd.",
        "nameWithheld": false,
        "score": 95,
        "entityType": "unspecified",
        "programs": "",
        "countries": [
          "CN"
        ],
        "listedOn": "2019-05-21",
        "endDate": null,
        "licenseRequirement": "For all items subject to the EAR, see §§ 734.9(e)1 and 744.11 of the EAR2",
        "licensePolicy": "Presumption of denial",
        "federalRegisterNotice": "84 FR 22961, 85 FR 29852, 85 FR 36720, 85 FR 51603, 87 FR 6026, 87 FR 55250  ",
        "sourceListUrl": "https://www.bis.gov/regulations/ear/744#supplement-4-744",
        "sourceInformationUrl": "https://www.bis.gov/licensing/guidance-on-end-user-and-end-use-controls-and-us-person-controls"
      },
      {
        "list": "Entity List (EL) - Bureau of Industry and Security",
        "listCode": "EL",
        "listEntryId": "14eb22cf2943e9cbc561cacbc572ecacca1f3f09ea9ee400a39c363c",
        "name": "Huawei Software Technologies Co., Ltd.",
        "matchedName": "Huawei Software Technologies Co., Ltd.",
        "nameWithheld": false,
        "score": 95,
        "entityType": "unspecified",
        "programs": "",
        "countries": [
          "CN"
        ],
        "listedOn": "2019-05-21",
        "endDate": null,
        "licenseRequirement": "For all items subject to the EAR, see §§ 734.9(e)1 and 744.11 of the EAR2",
        "licensePolicy": "Presumption 
```

### Tips

- Enter names as they appear on contracts or invoices; the matching ignores case, accents, punctuation and legal forms such as Co., Ltd. or GmbH.
- Treat review results as leads for a manual check, and check the official list and Federal Register notice before you act on any match.
- Turn on Only new results and schedule a daily run to monitor a fixed list of counterparties: a company is reported again only when its matches change.
- Schedule the actor to keep a dataset fresh, and use the API or integrations to send new results where you need them.

### FAQ, disclaimers, and support

#### Where does the data come from?

From Consolidated Screening List, International Trade Administration (trade.gov) (data.trade.gov). Data is used under: U.S. federal government data (public domain under 17 U.S.C. 105), published by the International Trade Administration as an aid to industry for export screening. See the source's terms: https://www.trade.gov/consolidated-screening-list

#### Is it legal to use this data?

This actor only collects publicly available data from Consolidated Screening List, International Trade Administration (trade.gov) and does not collect personal data about private individuals. Check that your use complies with the source's terms and the laws that apply to you. This actor is not affiliated with or endorsed by Consolidated Screening List, International Trade Administration (trade.gov).

#### How current are the lists?

trade.gov rebuilds the Consolidated Screening List file at least daily from each agency's lists, and the actor downloads the current file on every run. Each result shows when that file was generated.

#### Does it screen people?

No. Listed individuals are skipped, so people are neither screened nor returned. Some Commerce and State list entries do not say whether they are a company or a person: those are still screened, and when the name does not look like an organisation it is withheld from the result while the list, programs, score and official links are shown.

#### How does the scoring work?

Names are compared word by word after removing legal forms, punctuation and accents. 100 means the same words. 95 or more is a hit, and anything from your threshold up is marked review.

#### Is a clear result enough to export?

No. The Consolidated Screening List is an aid to screening. You still need to check the official lists, the end use and end user, and the licensing rules that apply to your items.

#### Something is not working

Open an issue in the **Issues** tab with your run link and we will look at it. For programmatic access, see the **API** tab.

# Changelog

This Actor's version history is a separate document: https://apify.com/veridra/us-export-control-screening/changelog.md

# Actor input Schema

## `companyNames` (type: `array`):

Companies or organisations to screen, one per line, for example a customer, supplier or end user. Each gets one result. Individuals are not screened.

## `lists` (type: `array`):

Which lists of the Consolidated Screening List to screen against. All are on by default.

## `matchThreshold` (type: `integer`):

Lowest name similarity (70-100) reported as a possible match. Scores of 95 or more are reported as hits.

## `maxResults` (type: `integer`):

Stop after this many results. Each result costs $0.015, so this also caps the cost of a run. Use 0 for no limit. Keep it low for a first test.

## `onlyNew` (type: `boolean`):

Monitoring mode: skip results this monitor returned in earlier runs, so a scheduled run returns, and bills, only what is new. The first run returns everything that matches.

## `monitorName` (type: `string`):

Runs with the same name share one memory of returned results, even if you change other inputs. Leave empty to keep a separate memory for each distinct input.

## Actor input object example

```json
{
  "companyNames": [
    "Huawei Technologies Co., Ltd.",
    "Rosoboronexport",
    "Beijing Institute of Technology",
    "Bank Melli Iran",
    "Siemens AG"
  ],
  "lists": [
    "SDN",
    "SSI",
    "CMIC",
    "NS-MBS",
    "FSE",
    "PLC",
    "CAP",
    "EL",
    "DPL",
    "UVL",
    "MEU",
    "DTC",
    "ACN"
  ],
  "matchThreshold": 85,
  "maxResults": 10,
  "onlyNew": false,
  "monitorName": ""
}
```

# Actor output Schema

## `dataset` (type: `string`):

Dataset containing all results

# 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 = {
    "companyNames": [
        "Huawei Technologies Co., Ltd.",
        "Rosoboronexport",
        "Beijing Institute of Technology",
        "Bank Melli Iran",
        "Siemens AG"
    ],
    "maxResults": 10
};

// Run the Actor and wait for it to finish
const run = await client.actor("veridra/us-export-control-screening").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 = {
    "companyNames": [
        "Huawei Technologies Co., Ltd.",
        "Rosoboronexport",
        "Beijing Institute of Technology",
        "Bank Melli Iran",
        "Siemens AG",
    ],
    "maxResults": 10,
}

# Run the Actor and wait for it to finish
run = client.actor("veridra/us-export-control-screening").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 '{
  "companyNames": [
    "Huawei Technologies Co., Ltd.",
    "Rosoboronexport",
    "Beijing Institute of Technology",
    "Bank Melli Iran",
    "Siemens AG"
  ],
  "maxResults": 10
}' |
apify call veridra/us-export-control-screening --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,veridra/us-export-control-screening"
        }
    }
}
```

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/omoCbBrVFp1xlqgN5/builds/pE2Bj8BJHzZr321Pg/openapi.json
