KYB Evaluation Guide

Introduction

In order to assist you in running further KYB evaluations on your own via a self-service model, we’ve created a mock KYB evaluation to mimic the process. To run this evaluation, we will be using public government data from the usaspending.gov website, available at the Award Data Archive. The data represents all contract awards between U.S. suppliers and their U.S. government agency clients, and it can be used as a standard data set for testing data match and fill rates across multiple vendors. We currently offer two methods of running KYB evaluations:

  1. (Non technical users) Upload a CSV Through Console
    1. Please contact our sales team if you would like access.
  2. (Technical users) Download the code & build with the API
    1. Python3

Prepare your Input File or Download Test File

To create your own input file of businesses you are interested in evaluating with Enigma KYB, follow instructions here.

Alternatively, download the test file we have prepared here:

  1. Go to our KYB Evaluation repository in Github.
  2. Download sample_file.csv
  3. Open the file to preview.

We’ll run this data through Enigma’s KYB endpoint and get:

Enigma KYB's Advantages

Enigma’s best-in-class KYB solution surfaces registration filings resulting in >70% instant approvals on most customer data sets. Click here to view the final output of the batch append job on the Award Data Archive mentioned above.

Legal and DBA inputs

You can submit requests containing legal names and addresses, as well as 'doing business as' (DBA) names, assumed names, aliases, or operating names and addresses. Enigma's KYB endpoint can provide registration details, industries, and numerous other attributes based on either a legal name or a DBA name as input

State-only matching

The KYB endpoint leverages an optimized search algorithm that only needs the Business Name + State input combination. Even in cases where complete addresses for the queried businesses are unavailable, we can still provide a response based on a precise name + state combination.

Further Resources

Create a Console Account

  1. Create an account on our Console. Once signed up, you’ll see a dashboard on the home screen. You may explore the dashboard and site to become familiar with our resources.

  2. If you are running an API evaluation, this dashboard is where you’ll find your API key. You will need this when running the code to call the API.

  1. We have prepared an API mock evaluation here below. For the full API documentation, please refer to this section of the documentation.

API Evaluation

For an API evaluation, we will walk you through how to test our API via Quickstart on the Enigma Console so that you can familiarize yourself with the product. We will also provide a python script below that will enable you to test our API at higher volumes.

KYB Quickstart

  1. To get started with the KYB API, go to Quick Start in the menu on the left.
  1. From the Quick Start Menu click Make a Request to the KYB Endpoint.
  1. This takes you to the KYB API console. Here, you will see fields and system parameters on the left that you can enter and adjust, and on the right is the corresponding request JSON, which is sent to the KYB endpoint to process the request. We expose the JSON so that you can learn how a request can be formed and submitted in a more programmatic fashion once you become a client and are provided with direct access to the KYB API endpoint. To learn more about how our API endpoint works, please refer to our KYB API guide.
  1. The first step is to select a package which determines which set of attributes you will receive from the API. Read more about packages in the KYB Attribute Dictionary.
  1. Next, we provide information about the business we want to evaluate for KYB. You must provide at least one business name and one address. Include up to 2 business names, 2 addresses, 1 website, and 1 person. If providing a person to screen against watchlists, both the first and last name are required.
  1. Our KYB service allows you to specify how many business entities you want returned in "top_n" and a match confidence threshold in "match_threshold". If not specified, then these fields will default to 1 for top_n and 0.5 for match_threshold. A match_threshold of 0.5 means that match precision is >95%. Most clients use the default values for these parameters.
  1. Once you have completed your request, you will get back a response similar to the example below. For more details on the attributes returned by KYB, see our KYB attribute dictionary. Our API guide has additional details how to use the API.
{
  "response_id": "aweradf972d-2ksf-8h85-097s-fasd54h3fhg8",
  "risk_summary": {
    "legal_existence_risk_rating": "low",
    "activity_risk_rating": "low",
    "watchlist_risk_rating": "high",
    "overall_risk_rating": "high",
    "tasks": [
            {
                "task_name": "address_verification",
                "status": "success",
                "reason": "An input address and an address we identified match exactly"
            },
            {
                "task_name": "name_verification",
                "status": "success",
                "reason": "An input name and a name we identified match exactly"
            },
            {
                "task_name": "tin_verification",
                "status": "success",
                "result": "tin_verified",
                "reason": "TIN and Name combination matches IRS records"
            }
        ]
    },
  },
  "data": {
    "best_match": {
      "match_confidence": 1.0,
      "matched_fields": {
        "name": "Example Company",
        "street_address1": "720 Main Blvd",
        "street_address2": "",
        "city": "Alamogordo",
        "state": "NM",
        "postal_code": "88310"
      }
    },
    "legal_entities": [{
      "enigma_id": "L1238700000",
      "data_sources": ["Corporate Registrations"],
      "match_confidence": 1.0,
      "matched_fields": {
        "name": "Example Company",
        "street_address1": "720 Main Blvd",
        "street_address2": "",
        "city": "Alamogordo",
        "state": "NM",
        "postal_code": "88310"
     },
     "registrations": [{
       "issue_date": "2010-10-20",
       "registration_state": "NM",
       "file_number": "0931830",
       "registered_name": "Example Company LLC",
       "jurisdiction_type": "domestic",
       "home_jurisdiction_state": "NM",
       "standardized_status": "active",
       "registration_status": "in existence",
       "persons": [{
          "name": "Joe Smith",
          "titles": ["member"]
       },
       {
          "name": "UNITED STATES CORPORATION AGENTS, INC",
          "titles": ["registered agent"]
       }
       ],
       "addresses": [{
          "type": "headquarters",
          "street_address1": "720 MAIN BLVD",
          "street_adress2": null,
          "city": "CLOUDCROFT",
          "state": "NM",
          "postal_code": "88317",
          "country": "US"
       },
       {
         "type": "registered_agent",
         "street_address1": "4801 LANG AVE NE STE 110",
         "street_address2": null,
         "city": "ALBUQUERQUE",
         "state": "NM",
         "postal_code": "87109",
         "country": "US"
       }
      ]
     }]
    }],
    "brands": [{
      "enigma_id": "B002528db000016900",
      "data_sources": ["Corporate Registrations"],
      "match_confidence": 0.99,
      "matched_fields": {
        "name": "Example Company LLC",
        "street_address1": "720 MAIN BLVD",
        "city": "Cloudcroft",
        "state": "NM",
        "postal_code": "88317"
     },
     "activities": {
       "compliance_risk_level": "high",
       "activity_types": [
         {
           "activity_type": "Gambling and Sports Betting"
         }
       ]
     },
      "names": [{
        "name": "Example Company LLC"
      }],
      "addresses": [{
        "street_address1": "720 MAIN BLVD",
        "street_adress2": null,
        "city": "CLOUDCROFT",
        "state": "NM",
        "postal_code": "88317",
        "country": "US",
        "type": null
      }],
      "industries": [{
        "classification_description": "gambling house",
        "classification_type": "enigma_description"
      },
      {
        "classification_code": "713290",
        "classification_description": "Other Gambling Industries",
        "classification_type": "NAICS_2017"
      }],
      "websites": ["examplecompanyurl.site"]
    }],
    "watchlists": [{
      "enigma_id": "11161737",
      "match_confidence": 1.0,
      "matched_fields": {
        "person.first_name": "John",
        "person.last_name": "Doe"
      },
      "watchlist_entity": {
        "watchlist_name": "djw/SIP",
        "entity_type": "person",
        "full_name": "John Doe",
        "organization_name": null,
        "dob": null,
        "full_address": null
      }
    }]
  }
}

API Evaluation with higher volume

  1. Download the following code and test data from Github.

  2. This package contains 2 files:

    1. sample_file.csv : This is the test asset we’ll be running an evaluation on. Here’s a snapshot of the data.
    2. sample_file_tin.csv : This is the test asset we’ll be running a TIN evaluation on. Please note that the TINS in this file are invalid.
    3. data_test.py : This is a Python script to run the inputs from sample_file.csv through Enigma’s KYB endpoint and generate a results file: unnested_results.csv.
  3. Open data_test.py. In line 9, paste your API key. This is the same key from your Console dashboard (see “Create a Console Account” section).

    1. import requests
      import json
      import csv
      import time
      import random
      import pandas as pd
      
      BASE_URL = 'https://api.enigma.com/v1/kyb/'
      API_KEY = '<YOUR_API_KEY>'
      start_time = time.time()
      
  4. If necessary, don’t forget to install dependencies specified in the file (eg, pandas).

  5. If you'd like to enrich your file with tin, you can run the code as is. However, if you don't want TIN, then you can either call the script via command line and append "-t n" to the end so the command would be data_test.py -t n. You can also manually set the value to "n" within the script on line 185.

  6. Run the script. Once this script has successfully run it will produce a CSV file with the endpoint responses in the root directory called unnested_results.csv.

Batch File Evaluation

  1. Contact our sales team when you are ready to conduct an evaluation using a batch file. You will first need to upload your file to the Enigma console, then an Enigma solutions engineer will append your file with the KYB attributes to run the evaluation.

  2. To upload your input file, go to File Manager in the menu on the left.

  3. If you have an input file of businesses you are interested in, click “Upload a File” to select it from your system’s file manager. Alternatively, you can use the test file downloaded earlier into the window.

  4. Once uploaded successfully, reach out to our sales team and let them know the file has been uploaded. The team will follow up shortly with the results of the evaluation.


Results Summary for Test File

The test file contains 221 total businesses. Of those:

  • 92% match to a business in Enigma's comprehensive SMB data
  • 86% have industry data available
  • 81% match to a registration
  • 1-2% are flagged for either high-risk activities or OFAC
  • 0% had a verified TIN as the TINs are all intentionally invalid

For more information about our KYB attributes, you can find full breakdowns here.

CountPercentage of total file
Total input rows220100%
Records with an Enigma SMB match20492%
Records with Enigma industry available19286%
Records with registrations data18584%
Records flagged in OFAC screening41.8%
Records with high-risk activities detected31.4%

Registrations Coverage

Registrations

Out of 220 businesses, 84% matched to a registration. To determine which input fields were matched, take a look at the following columns:

  • data_legal_entities_matched_fields_0.name
  • data_legal_entities_matched_fields_0.address.street_address1
  • data_legal_entities_matched_fields_0.address.city
  • data_legal_entities_matched_fields_0.address.state
  • data_legal_entities_matched_fields_0.address.postal_code

You'll find all registration matches used name and state matching. Only ~40% used street address, city, and postal code. This is because of the optimized algorithm discussed earlier. If you don’t have full addresses for the businesses you’re querying, we can still return a response on just name and state.

Non-matches

Which businesses didn't match to a registration, and why?

34 records did not have a registration match. The top reasons are:

  • The record is a sole proprietorship. Sole props tend to have less publicly available data.
  • The record is not a business with a registration, but a public institution such as a university or state department.
  • The record is missing a state input.
  • The record is international.
    • Enigma only shows data within the US.

Risky Activities & OFAC

OFAC

4 businesses were flagged through OFAC screening at the organization level. Example:

  • LMI CONSULTING, LLC
  • flagged on name: LMI
  • flag type: organization
  • watchlist: SDN

Risky Activities

We found high-risk activities for 3 businesses, where we show a risk flag "high" and the type of activity they engage in. Example:

  • WEST MARINE, INC.
  • risk flag: high
  • activity type: Firearms, Weapons and Ammunition

Learn More

For more information on our KYB endpoint, integration, and pricing, please contact our sales team.