Lead data and prospecting
Check phone numbers, carriers and email domains 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.
Why the data matters in ZoomInfo
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
| Product | What it does here | Credits |
|---|---|---|
| Phone Numbering-Plan Validation | 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) | 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 | 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
- Create a LookValid account and add an API key to it.
- 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.
- 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.
- 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 and costs 1 credit per valid number.
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 |
The recipe returns nothing when the lookup finds nothing, which costs no credits for this product, and stops with the error code and fix on a failed request.
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
- LookValid API reference: Phone Numbering-Plan Validation https://lookvalid.com/docs/api/phone, read 2026-10-18
LookValid is run by Meralume Labs. It is not connected to, endorsed by or a partner of any company or product named on this page, and every product name belongs to its owner.
Related pages
LookValid bills every lookup in credits from one shared balance, so the same key works for each check above.
See Phone Numbering-Plan Validation