Quick-Start Guide

Name Validation 3 (NV3) for Snowflake: Quick-Start Guide

From install to your first validated name in under 10 minutes. Validate, classify, and parse names directly in SQL, inside your own Snowflake account.

🕑 Time to first validated name: under 10 minutes
📝 6 steps, SQL only
✅ No credit card required

Get NV3 on the Snowflake Marketplace →

What this guide covers

Name Validation 3 is a Snowflake Native App from Service Objects that validates, classifies, and parses names directly from SQL, without exports, CSV files, or re-imports. In this quick start you will:

  • Install NV3 from the Snowflake Marketplace and start a free 20 day trial, covering 1,000 name validations with full ValidateName output.
  • Grant the app the privileges it needs on your own database and schema.
  • Run NV3_VALIDATE_NAME on a SELECT query and specify where the results should be saved.
  • Read the classification, confidence score, parsed name components, and notes back in SQL.

Before you start

You need:

  • A Snowflake account on a supported cloud and region.
  • The ACCOUNTADMIN role, or a role that can install a Native App and grant an external access integration.
  • A running virtual compute cluster you can use for the session.
  • A table containing the names you want to validate, or permission to create one.

1

Get the app from the Snowflake Marketplace

Already installed Name Validation 3 and started your trial? Skip to Step 2.

If not: open the Name Validation 3 listing on the Snowflake Marketplace and select Try Now to start the free trial.

The trial is for 20 days and includes 1,000 name validations with full output — including parsed name components, name type, and confidence scoring. No credit card required.

Snowflake will ask you to name the installed application. The examples below use the application schema APP_CODE exactly as it appears in the listing’s own quick-start examples.

2

Grant the external access integration

After installation, grant the application permission to reach the database and schema you are working in, and to create the table it writes results to.

SQL
GRANT USAGE ON DATABASE MY_DB
  TO APPLICATION SERVICE_OBJECTS_NV3_APP;

GRANT USAGE ON SCHEMA MY_DB.PUBLIC
  TO APPLICATION SERVICE_OBJECTS_NV3_APP;

GRANT CREATE TABLE ON SCHEMA MY_DB.PUBLIC
  TO APPLICATION SERVICE_OBJECTS_NV3_APP;

Substitute your own database and schema for MY_DB and MY_DB.PUBLIC.

NV3 reaches the Service Objects validation service through a single external access integration. This is the only external connection the app requires. You can see exactly what it accesses in the app manifest, and you can revoke it at any time.

What this connection does. The app sends name data to the Service Objects API through this one integration, and nothing is stored, logged, or retained by Service Objects. Data is encrypted in transit over HTTPS.

3

Prepare your name data

You can validate any table containing names. The input should include the following columns. If your table uses different names, create a VIEW that maps your columns to these names and pass that query to the procedure.

Column Required Example
CONSUMER_ROW_ID Recommended 1
FULLNAME Conditional jonathan r. mcallister jr
PREFIX Optional Ms
FIRSTNAME Conditional Robert
MIDDLENAME Optional A
LASTNAME Conditional Smith
SUFFIX Optional Jr
OPTIONS Optional

Supply a complete name in FULLNAME, or supply the parts separately in PREFIX through SUFFIX. Every column must appear in the SELECT statement in the order shown, even when a record has no value for it. Pass an empty string rather than dropping the column.

CONSUMER_ROW_ID is your unique identifier for each record. It is carried through to the output so you can join validated results back to your source table.

Sample data to test with

If you want to test before using your own data, create a sample table. These records break in the ways real name data breaks: casing and punctuation noise, a multi part surname, a business name sitting in a person name column, keyboard junk, and a name supplied already split.

SQL
CREATE OR REPLACE TABLE MY_SCHEMA.TEST_NAMES (
  CONSUMER_ROW_ID INT,
  FULLNAME        VARCHAR,
  PREFIX          VARCHAR,
  FIRSTNAME       VARCHAR,
  MIDDLENAME      VARCHAR,
  LASTNAME        VARCHAR,
  SUFFIX          VARCHAR,
  OPTIONS         VARCHAR
);

INSERT INTO MY_SCHEMA.TEST_NAMES VALUES
  (1, 'jonathan r. mcallister jr', '', '',       '',  '',      '',   ''),
  (2, 'MARIA DE LA CRUZ',          '', '',       '',  '',      '',   ''),
  (3, 'Acme Logistics LLC',        '', '',       '',  '',      '',   ''),
  (4, 'asdfgh qwerty',             '', '',       '',  '',      '',   ''),
  (5, '',                          '', 'Robert', 'A', 'Smith', '',   '');

4

Run your first validation

Call NV3_VALIDATE_NAME with two inputs: a SELECT query containing the names you want to validate, and the schema and base table name where you want the results written.

SQL
CALL SERVICE_OBJECTS_NV3_APP.APP_CODE.NV3_VALIDATE_NAME(
  'SELECT CONSUMER_ROW_ID, FULLNAME, PREFIX, FIRSTNAME,
          MIDDLENAME, LASTNAME, SUFFIX, OPTIONS
   FROM MY_SCHEMA.TEST_NAMES',
  'MY_DB.PUBLIC.NV3_RESULTS'
);

NV3 processes the selected records and writes the results to exactly the table you name in the second argument. If that table already exists, the call replaces its contents, so use a distinct output path when you want to keep an earlier run.

Use the SELECT query to control exactly which records are processed. Add a WHERE clause or a LIMIT when testing the app on a subset of your data.

SQL
CALL SERVICE_OBJECTS_NV3_APP.APP_CODE.NV3_VALIDATE_NAME(
  'SELECT CONSUMER_ROW_ID, FULLNAME, PREFIX, FIRSTNAME,
          MIDDLENAME, LASTNAME, SUFFIX, OPTIONS
   FROM MY_SCHEMA.CUSTOMERS
   LIMIT 100',
  'MY_DB.PUBLIC.NV3_RESULTS'
);

5

Read the results

Results land in the table path you passed in the call. When the output path is MY_DB.PUBLIC.NV3_RESULTS, that is the table to query. There is no generated suffix to look up.

SQL
SELECT * FROM MY_DB.PUBLIC.NV3_RESULTS;

What the results include

These are the columns you act on. The full response carries considerably more, and a developer will see all of it in testing.

Column What it tells you
CONSUMER_ROW_ID Your original row identifier, for joining back to source.
NAMERESULT_ISVALIDNAME Whether the input reads as a real name at all.
NAMERESULT_CLASSIFICATION What the input actually is: a person name, a business, a dictionary word, or garbage.
NAMERESULT_CONFIDENCE How confident the service is in the result for this record.
NAMERESULT_TEXTIN The name exactly as you supplied it.
NAMERESULT_TEXTOUT The cleaned and standardized name.
NAMERESULT_PARSEDNAME_FIRST Parsed given name.
NAMERESULT_PARSEDNAME_MIDDLE Parsed middle name or initial.
NAMERESULT_PARSEDNAME_LAST Parsed surname, with multi part surnames kept intact.
NAMERESULT_NOTES What was observed or changed for this record.
NAMERESULT_WARNINGS Anything the service wants to flag, including negative sentiment.

Each record also carries the parsed prefix and suffix, up to two alternate interpretations of the name with their own confidence and parse, flags for whether the first and last names were found and whether they are common, lists of similar and related names, and a status message. Full field descriptions are in the ValidateName documentation.

How the decision is made. Name Validation 3 uses machine learning to assess and classify the input rather than checking it against a fixed list. That is why it can distinguish a real name it has never seen from a business, a dictionary word, or keyboard junk, and why it returns alternate interpretations when a name can be read more than one way.

Join the results back to your source data to see the before and after together:

SQL
SELECT s.FULLNAME,
       r.NAMERESULT_CLASSIFICATION,
       r.NAMERESULT_TEXTOUT,
       r.NAMERESULT_CONFIDENCE
FROM MY_SCHEMA.TEST_NAMES s
JOIN MY_DB.PUBLIC.NV3_RESULTS r
  ON s.CONSUMER_ROW_ID = r.CONSUMER_ROW_ID;

A common first pass is to separate the records you can trust from the ones a person should look at:

SQL
SELECT *
FROM MY_DB.PUBLIC.NV3_RESULTS
WHERE NAMERESULT_CLASSIFICATION <> 'Person'
   OR NAMERESULT_ISVALIDNAME = FALSE;

6

Use the output in your workflows

With validated results in a Snowflake table, you can:

  • Join validated names back to your source table by row ID.
  • Filter on the classification to separate people from businesses, dictionary words, and junk before the data reaches a campaign or a CRM sync.
  • Route records on the notes and warnings: accept, flag for manual review, or suppress.
  • Feed standardized, parsed names into downstream pipelines, matching logic, or ML models.
  • Schedule recurring validation by running the procedure from a Snowflake task.

Frequently asked questions

What does the NV3 free trial include?
1,000 name validations over 20 days with full ValidateName output. No credit card is required, and there are no automatic charges when the trial ends.
Which Snowflake regions are supported?
AWS US East (N. Virginia), AWS US East (Ohio), AWS US West (Oregon), and Azure Central US (Iowa), among others listed on the Marketplace.
Does Service Objects store or retain my name data?
No. NV3 uses a single external access integration to reach the Service Objects API, and no data is stored, logged, or retained. You grant the integration explicitly and can revoke it at any time.
What if my table columns are named differently?
Create a VIEW that maps them to the expected names, then pass that SELECT query to NV3_VALIDATE_NAME.
Can I pass first and last name separately?
Yes. Supply a complete name in FULLNAME, or supply the parts in PREFIX, FIRSTNAME, MIDDLENAME, LASTNAME and SUFFIX. Columns you do not use still have to appear in the query, with an empty string as the value.
Where do the results go?
To the exact table path you pass as the second argument. Query that table directly. Note that the AV3 app behaves differently and creates a timestamped table, so do not carry the AV3 pattern across to NV3.
Can I schedule validation to run automatically?
Yes. Run the procedure from a Snowflake task to validate on a schedule.