Contact Center Compliance
Use the ScamVerify™ API for TCPA compliance, DNC list checking, lead quality scoring, and inbound call screening in contact center operations.
Contact centers face regulatory and fraud risks on both inbound and outbound calls. The ScamVerify™ API helps you screen leads before dialing, verify inbound callers, and maintain TCPA compliance with data from 2.79M+ FTC complaint records.
Use Cases
Outbound: Lead List Scoring
Before loading leads into your dialer, score every phone number to avoid calling numbers with active FTC complaints, known robocall associations, or disconnected lines.
Inbound: Caller Screening
When a call comes in, look up the caller's number to identify potential scam callers, spoofed numbers, or known bad actors before routing to an agent.
Compliance: DNC Cross-Reference
Cross-reference your dial lists against FTC Do Not Call complaint data. Numbers with active complaints carry higher regulatory risk.
Batch Processing for Lead Lists
Use the batch endpoint to score an entire lead list in a single request (up to 100 numbers per batch).
async function scoreLeadList(phoneNumbers) {
const response = await fetch('https://scamverify.ai/api/v1/batch/phone', {
method: 'POST',
headers: {
'Authorization': `Bearer ${process.env.SCAMVERIFY_API_KEY}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
items: phoneNumbers.map(number => ({ phone_number: number })),
}),
});
const result = await response.json();
// Categorize leads by risk
const approved = [];
const flagged = [];
const rejected = [];
for (const item of result.results) {
if (item.error) {
flagged.push({ phone: item.phone_number, reason: item.error });
continue;
}
if (item.risk_score >= 60) {
rejected.push({
phone: item.phone_number,
score: item.risk_score,
reason: item.explanation,
});
} else if (item.signals.ftc_complaints > 0 || item.signals.robocall_detected) {
flagged.push({
phone: item.phone_number,
score: item.risk_score,
ftcComplaints: item.signals.ftc_complaints,
});
} else {
approved.push({
phone: item.phone_number,
score: item.risk_score,
lineType: item.signals.line_type,
});
}
}
return { approved, flagged, rejected };
}
// Process a lead file in chunks of 50
async function processLeadFile(allNumbers) {
const results = { approved: [], flagged: [], rejected: [] };
for (let i = 0; i < allNumbers.length; i += 50) {
const chunk = allNumbers.slice(i, i + 50);
const chunkResults = await scoreLeadList(chunk);
results.approved.push(...chunkResults.approved);
results.flagged.push(...chunkResults.flagged);
results.rejected.push(...chunkResults.rejected);
}
return results;
}import requests
import os
def score_lead_list(phone_numbers: list[str]) -> dict:
response = requests.post(
"https://scamverify.ai/api/v1/batch/phone",
headers={
"Authorization": f"Bearer {os.environ['SCAMVERIFY_API_KEY']}",
"Content-Type": "application/json",
},
json={
"items": [{"phone_number": n} for n in phone_numbers]
},
)
response.raise_for_status()
result = response.json()
approved, flagged, rejected = [], [], []
for item in result["results"]:
if "error" in item:
flagged.append({"phone": item["phone_number"], "reason": item["error"]})
continue
if item["risk_score"] >= 60:
rejected.append({
"phone": item["phone_number"],
"score": item["risk_score"],
"reason": item["explanation"],
})
elif item["signals"]["ftc_complaints"] > 0 or item["signals"]["robocall_detected"]:
flagged.append({
"phone": item["phone_number"],
"score": item["risk_score"],
"ftc_complaints": item["signals"]["ftc_complaints"],
})
else:
approved.append({
"phone": item["phone_number"],
"score": item["risk_score"],
"line_type": item["signals"]["line_type"],
})
return {"approved": approved, "flagged": flagged, "rejected": rejected}Inbound Call Screening
For real-time inbound screening, use the single phone lookup endpoint. Cached results return in under 100ms, so you can screen callers before routing.
async function screenInboundCall(callerNumber) {
const response = await fetch('https://scamverify.ai/api/v1/phone/lookup', {
method: 'POST',
headers: {
'Authorization': `Bearer ${process.env.SCAMVERIFY_API_KEY}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({ phone_number: callerNumber }),
});
const result = await response.json();
return {
shouldRoute: result.verdict !== 'critical' && result.verdict !== 'high_risk',
riskLevel: result.verdict,
score: result.risk_score,
isRobocaller: result.signals.robocall_detected,
carrier: result.signals.carrier,
lineType: result.signals.line_type,
};
}Lead Quality Scoring Matrix
| Signal | Quality Impact | Action |
|---|---|---|
line_type: "mobile" | Best. Real person, likely reachable. | Prioritize in dialer queue |
line_type: "landline" | Good. Residential or business line. | Standard priority |
line_type: "voip" | Mixed. Could be legitimate or disposable. | Check other signals before dialing |
ftc_complaints > 0 | Risk. Number has regulatory complaint history. | Remove from outbound lists |
robocall_detected | High risk. Associated with automated calling. | Do not dial |
verdict: "critical" | Confirmed bad actor or heavily reported number. | Block and report to compliance |
TCPA Compliance Considerations
ScamVerify™ data supplements but does not replace your DNC list obligations. You must still maintain your own internal DNC list, honor the National DNC Registry, and follow all TCPA requirements. The FTC complaint data in ScamVerify™ can help identify numbers with regulatory exposure, but it is not a substitute for full DNC compliance.
- FTC complaint data is updated hourly. New complaints sync from the FTC Do Not Call Registry via automated feeds.
- Numbers with FTC complaints carry higher regulatory risk. If someone has filed an FTC complaint about unwanted calls, contacting that number increases your exposure.
- Log all screening decisions. Store the ScamVerify™ response alongside your call disposition records for compliance audits.
Quota Planning for Contact Centers
Contact centers typically process thousands of numbers daily. Choose a plan that matches your volume:
| Volume | Recommended Plan | Monthly Cost |
|---|---|---|
| Up to 1,000 lookups/month | Starter | $149/mo |
| Up to 3,000 lookups/month | Professional | $499/mo |
| Up to 10,000 lookups/month | Business | $1,499/mo |
| Up to 25,000 lookups/month | Scale | $2,999/mo |
| 25,000+ lookups/month | Enterprise | Custom pricing |
Cached lookups are free. If you look up the same number multiple times within 24 hours, subsequent lookups return cached data at no quota cost. This is especially useful for inbound screening where the same callers may call repeatedly.
Related
- Batch Phone Lookup API Reference for full batch endpoint documentation
- Phone Lookup API Reference for single lookup details
- Pricing for full tier comparison
Fintech KYC
Use the ScamVerify™ API to verify customer phone numbers during KYC onboarding, detect VoIP fraud, and flag high-risk carriers.
E-commerce Fraud Prevention
Use the ScamVerify™ API to prevent e-commerce fraud through URL verification, phone verification for customer contacts, and text/email analysis for support ticket screening.