Sales lead validation and channel routing
The most expensive minute of a sales operation is the one a rep spends dialing a disconnected
number, leaving voicemail on a fax line, or texting a landline. The signals to avoid every one
of those minutes are visible at the moment the lead enters your system — line type, current
carrier, deliverability, and timezone — and they are all returned by a single
POST /v1/lookup.
Lead validation isn't a fraud problem. It's a routing problem: given what the API just told us, which channel, which rep, and which urgency tier should this lead get? The fields below answer that question.
The fields that drive routing
-
deliverable/blackList/litigator— gate fields. If any of these flags a problem, the lead never enters the queue. Cheaper than paying a rep to find out. -
nanpType—"mobile","landline", or"not-mobile". This is the channel decision: text-first vs call-first vs email-only. Treating a landline as if it were a mobile is the single most common waste of SDR cycles. -
dipCarrierSubType— finer-grained carrier classification."WIRELESS"is a real mobile network;"ILEC"/"RBOC"is a residential landline;"IPES"is VoIP (Twilio, Bandwidth, Telnyx, etc.) — often a business soft-phone or a personal Google Voice number, not the rep's typical inbound lead profile. -
geoState/timezone— round-robin within timezone, not across it. A 9am EST lead routed to a PST rep at 6am loses the speed-to-lead advantage.
See the full field reference for every signal returned per lookup.
A complete request
One lookup per lead — no add-ons required for routing:
curl --request POST \
--url 'https://api.checkthatphone.com/v1/lookup' \
--header 'Authorization: Bearer YOUR_API_KEY' \
--header 'Content-Type: application/json' \
--data '{
"phone": "8182925409",
"ip": "136.38.145.14"
}' A mobile lead — SMS-first, queue normally, assign to a rep in the timezone surfaced by the IP geo (the example below resolves to Mountain time):
{
"success": true,
"credits_used": 1,
"data": {
"subscriber": "8182925409",
"optDate": "2026-05-23T21:56:26.108Z",
"action": "send",
"deliverable": "true",
"nanpType": "mobile",
"blackList": "false",
"ipResult": "valid-v4",
"dip": "success",
"dipLrn": "8182925409",
"dipPorted": "false",
"dipOcn": "6010",
"dipCarrier": "AT&T",
"dipCarrierSubType": "WIRELESS",
"dipCarrierType": "mobile",
"dipMessagingLookup": "false",
"dipMessagingEnabled": "false",
"geoCountry": "US",
"geoState": "UT",
"geoCity": "Salt Lake City",
"geoMetro": 770,
"geoSource": "ip",
"timezone": "America/Denver",
"tzOffset": 7,
"error": "false"
}
} A landline lead — same demand signal, completely different channel: call-first, no SMS attempt:
{
"success": true,
"credits_used": 1,
"data": {
"subscriber": "2024561111",
"optDate": "2026-05-23T22:01:38.691Z",
"action": "unsubscribe",
"deliverable": "false",
"reason": "Not a valid mobile number",
"nanpType": "not-mobile",
"blackList": "false",
"ipResult": "valid-v4",
"dip": "success",
"dipLrn": "2024561111",
"dipPorted": "false",
"dipOcn": "9211",
"dipCarrier": "Verizon",
"dipCarrierSubType": "RBOC",
"dipCarrierType": "landline",
"dipMessagingLookup": "false",
"dipMessagingEnabled": "false",
"geoCountry": "US",
"geoState": "UT",
"geoCity": "Salt Lake City",
"geoMetro": 770,
"geoSource": "ip",
"timezone": "America/Denver",
"tzOffset": 7,
"error": "false"
}
} The two responses look almost identical to a human glance, but the resulting SDR workflow is different. The point of the validation step is to make that branch automatic before the lead ever lands in someone's queue.
How to wire it up
1. Webhook-time validation (inbound)
Highest-leverage pattern. Every inbound lead — form submit, demo-request, ad-platform
callback — fires a webhook into your lead-routing service. Call /v1/lookup from
that webhook handler, attach the response fields to the lead record, and route in one pass.
Speed-to-lead is the entire game; you do not want to wait for a nightly job.
2. Pre-handoff batch validation (outbound)
For purchased or scraped outbound lists, run the lookup on every row before the list ever enters your dialer. Drop undeliverables, drop litigators, tag landlines so the call-cadence is correct, and split by timezone so each rep gets a list calibrated to their working hours.
3. SLA-tier scoring
Combine multiple fields into a numeric lead score and use it to decide which SLA tier the lead belongs to: fast-lane (mobile + clean + on-shift timezone, route to best closer in under 60 seconds), normal (anything reachable that doesn't meet fast-lane criteria), slow lane (landlines and VoIP, batched call-back queue), dead (gate fields flagged, no rep contact). Tune from your own conversion data.
Inline FAQ
How do we use this to decide between SMS and a phone call?
Branch on nanpType. "mobile" means SMS is the natural first touch — it is the cheapest, fastest, and best-tolerated channel for cold outreach to a personal device. "landline" means SMS will not deliver; call instead. "not-mobile" is usually VoIP or a non-routable line — try email first.
Is there a way to skip dead leads before they hit our SDR queue?
Yes — gate routing on deliverable === "true" AND blackList === "false" AND litigator === "false". Anything that fails should never reach a rep, period. Cheaper than a single rep-minute spent on a disconnected number.
Can we use this on inbound demo-request leads or only outbound lists?
Both. Inbound is where the highest value of this lookup actually sits — you only get one shot at a demo-request lead, and validating that the phone number on the form is reachable, mobile, and in your target geo before the round-robin assignment usually pays back the credit cost in one prevented bad assignment.
What this isn't
Phone validation isn't a substitute for firmographic enrichment or intent data. A reachable mobile number tells you the channel is live; it doesn't tell you that the person on the other end matches your ICP or is in-market. Most teams stack this lookup before the more expensive enrichment APIs — cheap to validate, expensive to enrich, run the cheap check first.
Pricing for this use case
One credit per lead — no add-on charges. Lead volume tends to be lower than the marketing and CRM use cases, so most teams sit on the 1K, 10K, or 100K plan rather than going metered.
- 500 inbound leads/month on the Free plan — 500 credits, all included. $0/month.
- 5,000 inbound leads/month on the 10K plan — 5,000 credits, all included. $30/month flat.
- 20,000 inbound + outbound leads/month on the 100K plan — 20,000 credits, all included. $100/month flat.
See the pricing page for the full grid, or contact us about enterprise volume if you're putting more than 500K leads through per month.
Related
- Field reference: all API response fields
- Companion use case: Contact list hygiene
- Companion use case: KYC phone verification
- Companion use case: Affiliate and lead-gen marketplace validation
- Background reading: Understanding line types
- Back to all use cases