---
title: "Validate contact data in ZoomInfo"
url: "https://lookvalid.com/integrations/zoominfo.md"
canonical_url: "https://lookvalid.com/integrations/zoominfo"
last_updated: "2026-10-22"
type: "how-to"
summary: "Take the phone numbers on records you export from ZoomInfo and add a numbering-plan check, so reps work lists with numbers in a usable format."
related: ["https://lookvalid.com/integrations.md", "https://lookvalid.com/docs/api/phone.md", "https://lookvalid.com/docs/quickstart.md"]
---

# Validate contact data in ZoomInfo

Take the phone numbers on records you export from ZoomInfo and add a numbering-plan check, so reps work lists with numbers in a usable format.

ZoomInfo offers named exports that you run against sets of person or company records, and the contact data that comes out still has direct dials in mixed formats, missing country codes and the occasional number that does not fit its country plan. When reps load those into a dialer or sequence the bad ones surface one call at a time, so checking the numbers in the export before anyone starts dialing saves the list from a slow clean-up later.

## What LookValid checks

- [Phone Numbering-Plan Validation](https://lookvalid.com/products/phone.md): Checks each number against its country numbering plan and returns international and national formats plus the type the plan assigns. It cannot say whether a direct dial is answered or still belongs to the person. (1 credit per valid number)
- [Carrier Lookup (original carrier)](https://lookvalid.com/products/carrier-lookup.md): For US numbers, returns the carrier originally assigned the number block with its rate center and state. A number ported since then still shows its original carrier. (1 credit per lookup (numbers outside the covered numbering plan areas are free))
- [Email Domain Check](https://lookvalid.com/products/email-domain-check.md): Flags free-mail and role-based addresses on exported contacts, judged at the domain level without contacting any mail server. (1 credit per address checked)

## Connect it in four steps

1. Create a LookValid account and add an API key to it.
2. Take the contacts you are licensed to use out of ZoomInfo through one of its exports and save the result as a file, then set LOOKVALID_API_KEY in the shell or job runner that executes the script, kept apart from your ZoomInfo credentials.
3. Check every direct dial with the phone product; a found value of false means the number could not be parsed, so leave its new columns blank, and an error answer should stop the run with the returned code.
4. Write the formatted number, type and country into the new columns Direct Phone (formatted), Phone Type and Phone Country, then import or merge that file into your CRM or dialer list.

A script that reads a contact export file row by row, checks each direct dial and writes the extra columns to a new file for import. The call is `POST https://YOUR_API_HOST/v1/phone`.

```python
import json
import os
import urllib.error
import urllib.request

API_URL = "https://YOUR_API_HOST/v1/phone"


def validate_zoominfo_export(value):
    request = urllib.request.Request(
        API_URL,
        data=json.dumps({
            "phone": value,
        }).encode(),
        headers={
            "Authorization": "Bearer " + os.environ["LOOKVALID_API_KEY"],
            "Content-Type": "application/json",
        },
        method="POST",
    )
    try:
        with urllib.request.urlopen(request, timeout=30) as response:
            result = json.load(response)
    except urllib.error.HTTPError as error:
        failure = json.load(error)["error"]
        raise RuntimeError(failure["code"] + ": " + failure["fix"])
    if not result["found"]:
        return None
    return {
        "Direct Phone (formatted)": result.get("data", {}).get("international_format"),
        "Phone Type": result.get("data", {}).get("number_type"),
        "Phone Country": result.get("data", {}).get("country"),
    }
```

| Response field | Goes into |
| --- | --- |
| `data.international_format` | Direct Phone (formatted) |
| `data.number_type` | Phone Type |
| `data.country` | Phone Country |

## Without code

To avoid a script, use the generic HTTP request step of an automation platform: trigger when a ZoomInfo-sourced record lands in your CRM, post the phone number to the LookValid endpoint with the key in the Authorization header, and add an action that updates the record's phone fields from the reply. It needs no dedicated LookValid app.

## Questions

### What does a ZoomInfo export check cost in credits?

Each number spends credits from your LookValid balance at the rate on the pricing page. Multiply it by the rows in your file for the total.

### Can this tell me whether the direct dial is still correct?

No. It checks the number against the numbering plan only. It cannot tell if the person still answers it or if the line is active.

### Where does the key go?

In the environment where the script runs, as LOOKVALID_API_KEY. Do not paste it into the export file or into a shared spreadsheet.

## Sources

- [ZoomInfo API docs: execute export](https://docs.gtm.ai/reference/exportscontroller_executeexport.md), read 2026-10-18
- [ZoomInfo API docs: list exports](https://docs.gtm.ai/reference/exportscontroller_listexports.md), read 2026-10-18

## Related

- [LookValid integrations](https://lookvalid.com/integrations.md)
- [Phone Numbering-Plan Validation reference](https://lookvalid.com/docs/api/phone.md)
- [Quickstart](https://lookvalid.com/docs/quickstart.md)
