Phone Validation for AI Voice Agents: Carrier Lookup, Fraud Screening, and Call Routing
AI voice agents on platforms like Vapi, Retell, Bland AI, and Twilio make and receive thousands of calls. Without phone validation, they dial dead numbers, connect to VoIP fraud, and burn per-minute costs on unreachable lines. Here's how to add pre-call validation to your voice agent stack.
What Happens When Voice Agents Skip Phone Validation
AI voice agents have changed outbound calling. A single agent can handle hundreds of calls per hour, qualifying leads, booking meetings, and collecting information. But the economics break fast when the agent calls numbers that can't connect.
Wasted per-minute costs on disconnected numbers
Voice agent platforms charge per minute of call time. When an agent dials a disconnected number, the platform still charges for the connection attempt, the ringing period, and the failed-call handling. Across thousands of calls, invalid numbers add up to significant waste.
VoIP fraud targets voice agent endpoints
Inbound voice agents that handle customer calls are targets for VoIP-based fraud. Burner numbers, disposable VoIP lines, and premium-rate number scams can exploit voice agent endpoints if there's no caller screening.
Timezone-agnostic calling hurts answer rates
A voice agent calling a lead in Tokyo at 3 PM EST is calling at 4 AM local time. Without timezone data, agents burn calls during off-hours and damage brand perception. Carrier and timezone enrichment prevents this.
Pre-Call Validation: The Flow
Phone validation happens before the voice agent initiates a call. The flow runs in your server logic (a serverless function, API route, or webhook handler) between when the agent decides to call and when the call actually connects. Response time is 50ms, so it adds negligible latency to the call initiation.
# Pre-call validation: Check the number before dialing
curl -X GET \
"https://api.phone-check.app/v1/phone/validate?phone=+14155552671" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json"
# Response
{
"valid": true,
"phone": "+14155552671",
"line_type": "mobile",
"carrier": "T-Mobile USA",
"country": "US",
"region": "California",
"timezone": "America/Los_Angeles",
"ported": false,
"risk_score": "low",
"connectivity": "active"
}Decision logic after validation
Server-Side Implementation
The validation runs in your server before the call reaches the voice agent platform. Here is a TypeScript implementation that integrates with Vapi, Retell, or any webhook-based voice agent:
// Pre-call validation middleware for AI voice agents
interface ValidationResult {
valid: boolean;
lineType: string;
carrier: string;
country: string;
timezone: string;
riskScore: string;
connectivity: string;
}
async function validatePhone(phone: string): Promise<ValidationResult> {
const response = await fetch(
"https://api.phone-check.app/v1/phone/validate?" +
new URLSearchParams({ phone }),
{
headers: {
Authorization: "Bearer YOUR_API_KEY",
"Content-Type": "application/json",
},
}
);
const data = await response.json();
return {
valid: data.valid,
lineType: data.line_type,
carrier: data.carrier,
country: data.country,
timezone: data.timezone,
riskScore: data.risk_score,
connectivity: data.connectivity,
};
}
// Call routing decision based on validation
type CallDecision = "connect" | "sms_fallback" | "block" | "skip";
function routeCall(result: ValidationResult): CallDecision {
if (!result.valid || result.connectivity === "disconnected") {
return "skip";
}
if (result.lineType === "voip" && result.riskScore === "high") {
return "block";
}
if (result.lineType === "landline") {
return "sms_fallback";
}
return "connect";
}
// Use in your voice agent webhook handler
async function handleOutboundCall(phone: string) {
const validation = await validatePhone(phone);
const decision = routeCall(validation);
switch (decision) {
case "connect":
// Initiate voice agent call via Vapi/Retell/Twilio
return { action: "call", data: validation };
case "sms_fallback":
// Queue SMS instead of voice call
return { action: "sms", data: validation };
case "block":
// Log fraud attempt, do not contact
return { action: "block", reason: "high_risk_voip" };
case "skip":
// Mark as unreachable, skip entirely
return { action: "skip", reason: validation.connectivity };
}
}This pattern works across all major voice agent platforms because the validation happens before the call reaches the platform. Whether you use Vapi's REST API, Retell's Python SDK, or Twilio's Programmable Voice, the validation call is a standard HTTP request your server makes before initiating the outbound call.
Inbound Call Fraud Screening
Voice agents that handle inbound calls — customer support bots, appointment schedulers, order status systems — face a different problem. Fraudsters and bots call these endpoints to probe for vulnerabilities, overwhelm the system, or exploit premium-rate number schemes.
Phone validation adds a screening layer before the voice agent engages:
// Inbound call screening for voice agents
async function screenInboundCall(callerPhone: string) {
const result = await validatePhone(callerPhone);
// Flag high-risk callers
if (result.riskScore === "high") {
return {
allow: false,
reason: "high_risk_caller",
fallback: "voicemail",
};
}
// Block known disposable/burner numbers
if (result.lineType === "voip" && result.riskScore === "medium") {
return {
allow: false,
reason: "voip_caller",
fallback: "ivR_menu",
};
}
// Detect premium-rate number fraud attempts
if (result.lineType === "premium_rate") {
return {
allow: false,
reason: "premium_rate_detected",
fallback: "block",
};
}
// Enrich legitimate callers with carrier/timezone
return {
allow: true,
callerData: {
carrier: result.carrier,
country: result.country,
timezone: result.timezone,
lineType: result.lineType,
},
};
}This screening adds 50ms of latency to the call connection — imperceptible to the caller but effective at filtering out bad traffic. High-risk callers go to voicemail or an IVR menu instead of consuming voice agent conversation minutes.
Timezone-Aware Call Scheduling
Voice agents that call across time zones need to know when the lead is reachable. The timezone field from the validation response enables scheduling logic that respects local business hours across all 232 covered countries.
// Timezone-aware call scheduling for voice agents
function shouldCallNow(
timezone: string,
businessStart: number = 9,
businessEnd: number = 17
): boolean {
const now = new Date();
// Get the local hour in the lead's timezone
const localTime = new Date(
now.toLocaleString("en-US", { timeZone: timezone })
);
const localHour = localTime.getHours();
return localHour >= businessStart && localHour < businessEnd;
}
// Batch scheduling: Sort call queue by timezone
function scheduleCallQueue(contacts: Array<{
phone: string;
timezone: string;
}>) {
const nowCallable = contacts.filter(c =>
shouldCallNow(c.timezone)
);
const laterCallable = contacts.filter(c =>
!shouldCallNow(c.timezone)
);
return {
callNow: nowCallable,
callLater: laterCallable,
};
}This scheduling prevents your voice agent from calling leads at 2 AM local time. It also lets you batch calls into windows — process US-East leads in the morning, US-West in the afternoon, APAC leads the next day. Your agent only talks to people who are awake.
MCP Integration: Phone Validation as a Voice Agent Tool
The Model Context Protocol (MCP) lets AI agents use external tools through a standardized interface. Exposing phone validation as an MCP tool means any MCP-compatible voice agent can validate numbers during its reasoning loop — for example, an agent that manages a call queue can check each number before adding it to the active dial list.
// MCP tool definition for voice agent phone validation
{
"name": "validate_phone_for_call",
"description": "Validate a phone number before a voice agent "
+ "initiates a call. Returns validity, line type, carrier, "
+ "timezone, risk score, and connectivity status.",
"inputSchema": {
"type": "object",
"properties": {
"phone": {
"type": "string",
"description": "Phone number in E.164 or local format"
}
},
"required": ["phone"]
}
}
// The voice agent uses this tool in its decision loop:
// 1. Agent receives a list of numbers to call
// 2. For each number, agent calls validate_phone_for_call
// 3. Based on response, agent decides: call, SMS, skip, or block
// 4. Agent initiates calls only for validated mobile numbersWhen to use MCP vs. server-side validation
Use MCP when the voice agent itself needs to make the validation decision — for example, a conversational agent that decides in real-time whether to call a lead. Use server-side pre-call validation when you want to enforce rules at the infrastructure level, before the agent even sees the number. Both approaches can coexist.
Voice Agent Platforms and Validation Integration
Phone validation integrates with every major voice agent platform through the same HTTP API. The integration point differs by platform:
| Platform | Integration Point | Validation Use Case |
|---|---|---|
| Vapi | Server function before call creation | Outbound pre-call screening, inbound fraud filter |
| Retell | Webhook handler before call initiation | Outbound validation, timezone scheduling |
| Bland AI | API middleware before call creation | Batch call validation, VoIP filtering |
| Twilio AI | Twilio Function or Studio before Dial verb | Inbound caller screening, outbound routing |
| Custom agents | MCP tool or direct HTTP in agent loop | Any validation decision the agent needs |
Cost Impact: Validation vs. Wasted Call Minutes
The economics favor validation. Phone validation costs a fraction of a cent per lookup. Wasted call minutes on voice agent platforms cost significantly more.
| Metric | Without Validation | With Validation |
|---|---|---|
| Invalid call attempts | 15-25% of calls | Near zero (filtered before dial) |
| Cost per wasted call | $0.02 - $0.08 (platform cost) | $0.00093 (validation only) |
| VoIP fraud exposure | Unfiltered | Blocked at API layer |
| Off-hours call waste | 30-40% of international calls | Scheduled by timezone |
For a voice agent making 50,000 outbound calls per month with 20% invalid numbers: without validation, 10,000 calls waste $200-$800 in platform costs. With validation, those 10,000 calls cost $9.30 to filter and never reach the platform. The validation pays for itself on the first run.
Frequently Asked Questions
Why do AI voice agents need phone validation?
AI voice agents initiate outbound calls and receive inbound calls. Phone validation tells the agent whether a number is reachable, what carrier and line type it uses, and whether it poses a fraud risk. This prevents wasted calls, blocks toll fraud, and ensures the agent only talks to reachable contacts.
How do I add phone validation to a Vapi or Retell voice agent?
Add a pre-call validation step in your server logic. Before the agent initiates a call, send a GET request to the phone validation API. Parse the response for validity, line_type, risk_score, and connectivity. If the number fails validation, cancel the call or route to an alternative channel.
What is the cost of validating every call an AI voice agent makes?
Phone validation costs $0.00055 to $0.00093 per lookup. For an agent making 10,000 calls per month, that adds $5.50 to $9.30 — negligible compared to the per-minute calling costs that validation prevents on invalid numbers.
Can phone validation block VoIP fraud on AI voice agent inbound calls?
Yes. Validate the caller's phone number before connecting to the voice agent. If the number is VoIP, disposable, or high-risk, route to a different flow (IVR menu, voicemail, or block). This prevents bot-driven calls and spam.
Does phone validation work with MCP for voice agents?
Yes. Define phone validation as an MCP tool and the voice agent can call it during its reasoning loop. The MCP standard works across Vapi, Retell, Bland AI, and custom voice agent frameworks.
Related Resources
Phone Validation for AI Agents and MCP
MCP server setup for text-based AI agents
AI Sales Agents: Phone Intelligence for Outreach
How autonomous agents use phone data for lead scoring
Phone Validation Workflows: Zapier, n8n, Make
No-code automation for validation pipelines
Carrier Lookup API Guide
Deep dive into carrier detection and line type identification
Add Pre-Call Validation to Your Voice Agent
Test the API with your own phone numbers. See the response format, try different line types, and plan your voice agent integration.