---
title: "Validate contact data in Salesloft"
url: "https://lookvalid.com/integrations/salesloft.md"
canonical_url: "https://lookvalid.com/integrations/salesloft"
last_updated: "2026-10-22"
type: "how-to"
summary: "Subscribe to Salesloft events on your own endpoint and check each person's phone, then store the answer in a person custom field."
related: ["https://lookvalid.com/integrations.md", "https://lookvalid.com/docs/api/phone.md", "https://lookvalid.com/docs/quickstart.md"]
---

# Validate contact data in Salesloft

Subscribe to Salesloft events on your own endpoint and check each person's phone, then store the answer in a person custom field.

Salesloft cadences give reps a daily queue of calls and tasks, so a person whose phone number is in the wrong format or the wrong country occupies a slot in that queue that a rep cannot use. With large teams the cost is not one lost call but a queue that stops being trusted, because reps learn that some phone tasks lead nowhere.

## What LookValid checks

- [Phone Numbering-Plan Validation](https://lookvalid.com/products/phone.md): Normalizes a person's phone number to E.164 and returns the country and the number type the numbering plan assigns. It cannot say whether the line is active. (1 credit per valid number)
- [Phone Spam Check](https://lookvalid.com/products/phone-spam.md): Returns the count of consumer complaints on file for a number, reported by callers and not checked, so a rep sees a number with a history before the call task opens. (1 credit per number with complaints on record)
- [Country Calling Codes](https://lookvalid.com/products/country-code.md): Returns the dialing rules for a country calling code, which helps when one cadence covers people in several regions. (1 credit per lookup (an unknown code, country or name is free))
- [Email Domain Check](https://lookvalid.com/products/email-domain-check.md): Checks the email domain of a person for mail servers and throwaway providers before an email step runs. It never confirms a mailbox. (1 credit per address checked)

## Connect it in four steps

1. Create a LookValid account and generate an API key.
2. Keep the key in the LOOKVALID_API_KEY environment variable of the webhook receiver, and authenticate your own calls to Salesloft with an API key, which Salesloft provides for customers, held in a separate variable.
3. On each person event, pass the person phone to the function: it posts to the phone endpoint, returns null if nothing was found and throws the error code and fix if the API refuses the call.
4. Create person custom fields with the three names and write the returned values into them through the Salesloft People API so cadence rules can filter on the phone type.

the HTTPS endpoint that a Salesloft webhook subscription sends person events to The call is `POST https://YOUR_API_HOST/v1/phone`.

```js
const API_URL = "https://YOUR_API_HOST/v1/phone";

export async function validateSalesloftPersonPhone(value) {
  const response = await fetch(API_URL, {
    method: "POST",
    headers: {
      Authorization: `Bearer ${process.env.LOOKVALID_API_KEY}`,
      "Content-Type": "application/json",
    },
    body: JSON.stringify({
      "phone": value,
    }),
  });
  const result = await response.json();
  if (!response.ok) throw new Error(`${result.error.code}: ${result.error.fix}`);
  if (!result.found) return null;
  return {
      "Phone E164": result.data?.e164 ?? null,
      "Phone Type": result.data?.number_type ?? null,
      "Phone Country": result.data?.country ?? null,
  };
}
```

| Response field | Goes into |
| --- | --- |
| `data.e164` | Phone E164 |
| `data.number_type` | Phone Type |
| `data.country` | Phone Country |

## Without code

Because a webhook subscription posts events to any URL, an automation platform with a generic HTTP request step can receive them without a dedicated app. After the catch trigger, send the person phone to the phone endpoint with your key in a bearer header, and add one more HTTP step that updates the person custom fields in Salesloft.

## Questions

### How are credits used when people sync in bulk?

One credit-bearing lookup runs per phone you check. The pricing page shows the amount for the phone check, so you can estimate a batch.

### What will the check not show on a Salesloft person?

Whether the number is connected, who the carrier is now or who owns it. It reads the numbering plan only.

### Where do both keys live in the receiver?

Two environment variables: LOOKVALID_API_KEY for this check and a separate one for the Salesloft API key. A script that you run for your own team can use that API key.

## Sources

- [Salesloft developers: platform introduction](https://developers.salesloft.com/docs/platform/intro/), read 2026-10-18
- [Salesloft developers: API basics](https://developers.salesloft.com/docs/platform/api-basics/), read 2026-10-18
- [Salesloft developers: webhooks](https://developers.salesloft.com/docs/platform/webhooks/), read 2026-10-18
- [Salesloft developers: API reference index](https://developers.salesloft.com/docs/api/), 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)
