---
title: "Validate contact data in Klenty"
url: "https://lookvalid.com/integrations/klenty.md"
canonical_url: "https://lookvalid.com/integrations/klenty"
last_updated: "2026-10-22"
type: "how-to"
summary: "Check each phone number before it enters a Klenty cadence and send the format and number type along as custom fields on the prospect."
related: ["https://lookvalid.com/integrations.md", "https://lookvalid.com/docs/api/phone.md", "https://lookvalid.com/docs/quickstart.md"]
---

# Validate contact data in Klenty

Check each phone number before it enters a Klenty cadence and send the format and number type along as custom fields on the prospect.

Klenty cadences mix email with calls, so a phone field that holds a loose format, a toll-free line where a direct number was expected or a number from the wrong country sends a rep to the wrong step. Reps then spend dial time on numbers the numbering plan already marks as the wrong kind, and personalization built from the custom fields drifts out of sync with the record.

## What LookValid checks

- [Phone Numbering-Plan Validation](https://lookvalid.com/products/phone.md): Normalizes a prospect phone number to E.164 plus national and international formats, and reports the country and the number type the numbering plan assigns. It does not say whether the line is active or who the carrier is. (1 credit per valid number)
- [Country Calling Codes](https://lookvalid.com/products/country-code.md): Resolves a calling code or country name into the dialing rules that apply, which helps when a list mixes formats from several regions. (1 credit per lookup (an unknown code, country or name is free))
- [Carrier Lookup (original carrier)](https://lookvalid.com/products/carrier-lookup.md): For US numbers, returns the carrier originally assigned the number block, with state and rate center. A number that has since moved to another carrier still shows the original one. (1 credit per lookup (numbers outside the covered numbering plan areas are free))
- [Phone Spam Check](https://lookvalid.com/products/phone-spam.md): Returns how many consumer complaints are on file for a number, as reports nobody has checked, so reps can see a number with a history before they call. (1 credit per number with complaints on record)

## Connect it in four steps

1. Create your LookValid account and an API key in the dashboard.
2. Export the key as the LOOKVALID_API_KEY environment variable of the job that builds your Klenty prospect payloads, and keep the Klenty key in its own separate variable.
3. Call the function with each prospect phone: it posts to the phone endpoint, returns None when the lookup found nothing, and raises with the error code and fix if the API refuses.
4. Add the returned values to the CustomFields array of the create-prospect body as key and value pairs, for example PhoneType, then branch cadence steps on those fields.

a script that prepares prospects before it posts them to the Klenty create-prospect endpoint 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 check_klenty_prospect_phone(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 {
        "PhoneE164": result.get("data", {}).get("e164"),
        "PhoneType": result.get("data", {}).get("number_type"),
        "PhoneCountry": result.get("data", {}).get("country"),
    }
```

| Response field | Goes into |
| --- | --- |
| `data.e164` | PhoneE164 |
| `data.number_type` | PhoneType |
| `data.country` | PhoneCountry |

## Without code

Klenty can notify a URL when a prospect starts a cadence, and an automation platform with a generic HTTP request step can receive that call without a dedicated app. Send the prospect phone to the phone endpoint with your key in a bearer header, then add a second HTTP step that posts the returned fields back as custom fields on the prospect through the Klenty API.

## Questions

### What does checking one phone number cost?

A lookup draws credits from your LookValid balance. The pricing page shows the amount for the phone check.

### Will the check tell reps if a number is turned off?

No. It reads the numbering plan, so it confirms format, country and number type. It cannot see whether the line is connected.

### Where does the key live in a Klenty prep script?

In the LOOKVALID_API_KEY environment variable of the job that creates prospects. Klenty has its own credential, which should be a different variable.

## Sources

- [Klenty support: POST APIs](https://support.klenty.com/en/articles/8193937-klenty-s-post-apis), 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)
