ScamVerify™
Use Cases

Government & Elder Fraud Protection

Equip consumer protection agencies and elder fraud hotlines with instant scam verification.

Elder fraud is a national crisis. The FTC received over 100,000 fraud reports from adults aged 60 and older in 2023, with median losses significantly higher than younger demographics. Over 600 Area Agencies on Aging across the country field thousands of calls from seniors who suspect they have been scammed. State Attorney General offices, Adult Protective Services, and consumer protection hotlines all need fast, reliable scam verification. The ScamVerify™ API turns any of these touchpoints into an instant scam detection tool.

Who This Serves

Area Agencies on Aging (AAAs)

The 622 AAAs nationwide are often the first point of contact for seniors who receive suspicious calls. Caseworkers need to quickly determine whether a phone number or website is associated with known scam activity so they can advise callers and file reports.

State Attorney General Consumer Protection

State AG offices investigate consumer fraud complaints. Phone and URL intelligence enriches incoming complaints, helps prioritize investigations, and identifies patterns across reports.

Adult Protective Services

APS investigators handling financial exploitation cases need to verify whether phone numbers and websites involved in a case are linked to known fraud campaigns.

Benefits Fraud Detection

Government benefits programs (Social Security, Medicare, Medicaid) are targets for impersonation scams. Fraudsters call beneficiaries claiming to be from the SSA or CMS, using spoofed numbers. Verifying the callback numbers in complaints helps identify which are legitimate and which are scam operations.

How ScamVerify™ Helps

  • Phone lookup checks numbers against 2.79M+ FTC complaints, FCC consumer reports, robocall detection databases, and carrier intelligence
  • URL verification identifies phishing domains, government impersonation sites, and known malware URLs
  • Text analysis scans suspicious text messages and emails that seniors bring to caseworkers
  • Structured risk scores translate complex threat data into clear, actionable assessments

Code Example: Caseworker Lookup Tool

class CaseworkerLookupTool {
  constructor(apiKey) {
    this.apiKey = apiKey;
    this.baseUrl = 'https://scamverify.ai/api/v1';
  }

  async callApi(endpoint, body) {
    const response = await fetch(`${this.baseUrl}${endpoint}`, {
      method: 'POST',
      headers: {
        'Authorization': `Bearer ${this.apiKey}`,
        'Content-Type': 'application/json',
      },
      body: JSON.stringify(body),
    });
    if (!response.ok) throw new Error(`API error: ${response.status}`);
    return response.json();
  }

  async lookupPhone(phoneNumber) {
    const result = await this.callApi('/phone/lookup', {
      phone_number: phoneNumber,
    });

    return {
      number: phoneNumber,
      riskScore: result.risk_score,
      verdict: result.verdict,
      summary: result.explanation,
      details: {
        lineType: result.signals.line_type,
        carrier: result.signals.carrier,
        ftcComplaints: result.signals.ftc_complaints,
        robocallDetected: result.signals.robocall_detected,
      },
      // Plain-language recommendation for caseworkers
      recommendation: this.getPhoneRecommendation(result),
    };
  }

  async lookupUrl(url) {
    const result = await this.callApi('/url/lookup', { url });

    return {
      url,
      riskScore: result.risk_score,
      verdict: result.verdict,
      summary: result.explanation,
      recommendation: this.getUrlRecommendation(result),
    };
  }

  async analyzeMessage(messageText) {
    const result = await this.callApi('/text/analyze', {
      text: messageText,
    });

    return {
      riskScore: result.risk_score,
      verdict: result.verdict,
      summary: result.explanation,
      extractedPhones: result.signals.extracted_phones,
      extractedUrls: result.signals.extracted_urls,
      recommendation: this.getTextRecommendation(result),
    };
  }

  getPhoneRecommendation(result) {
    if (result.risk_score >= 70) {
      return 'HIGH RISK: This number has strong indicators of scam activity. Advise the caller not to answer or return calls from this number. Consider filing a report with the FTC.';
    }
    if (result.risk_score >= 40) {
      return 'MODERATE RISK: This number shows some concerning signals. Advise caution. If the caller has already shared personal information, recommend identity monitoring.';
    }
    if (result.signals.ftc_complaints > 0) {
      return `REPORTED: This number has ${result.signals.ftc_complaints} FTC complaint(s). Other consumers have reported it. Exercise caution.`;
    }
    return 'LOW RISK: No significant fraud indicators found for this number. However, the absence of reports does not guarantee safety.';
  }

  getUrlRecommendation(result) {
    if (result.verdict === 'phishing' || result.verdict === 'malware') {
      return 'DANGEROUS: This website has been identified as malicious. Advise the caller to avoid this site entirely and not enter any personal information. If they already have, recommend changing passwords and monitoring accounts.';
    }
    if (result.risk_score >= 50) {
      return 'SUSPICIOUS: This website shows fraud indicators. Advise the caller not to enter personal information or make payments through this site.';
    }
    return 'NO KNOWN THREATS: This website does not appear in our threat databases. This does not guarantee safety, but no known issues were found.';
  }

  getTextRecommendation(result) {
    if (result.risk_score >= 60) {
      return 'LIKELY SCAM: This message contains patterns consistent with known scam campaigns. Advise the caller not to respond and to block the sender.';
    }
    if (result.risk_score >= 30) {
      return 'SUSPICIOUS: This message contains some concerning elements. Advise the caller to verify through official channels before taking any action.';
    }
    return 'LOW RISK: No strong scam indicators detected. However, advise the caller to be cautious about unsolicited messages.';
  }
}

// Simple Express API for internal use
const tool = new CaseworkerLookupTool(process.env.SCAMVERIFY_API_KEY);

// Phone number lookup
app.post('/internal/lookup/phone', async (req, res) => {
  const result = await tool.lookupPhone(req.body.phone);
  res.json(result);
});

// URL lookup
app.post('/internal/lookup/url', async (req, res) => {
  const result = await tool.lookupUrl(req.body.url);
  res.json(result);
});

// Message analysis (text or email content a senior brings in)
app.post('/internal/analyze/message', async (req, res) => {
  const result = await tool.analyzeMessage(req.body.text);
  res.json(result);
});
import requests
import os

class CaseworkerLookupTool:
    def __init__(self, api_key: str):
        self.api_key = api_key
        self.base_url = "https://scamverify.ai/api/v1"

    def _call_api(self, endpoint: str, body: dict) -> dict:
        response = requests.post(
            f"{self.base_url}{endpoint}",
            headers={
                "Authorization": f"Bearer {self.api_key}",
                "Content-Type": "application/json",
            },
            json=body,
        )
        response.raise_for_status()
        return response.json()

    def lookup_phone(self, phone_number: str) -> dict:
        result = self._call_api("/phone/lookup", {"phone_number": phone_number})

        if result["risk_score"] >= 70:
            recommendation = "HIGH RISK: Strong scam indicators. Advise caller to block this number."
        elif result["risk_score"] >= 40:
            recommendation = "MODERATE RISK: Exercise caution. Monitor for identity theft if info was shared."
        elif result["signals"]["ftc_complaints"] > 0:
            recommendation = f"REPORTED: {result['signals']['ftc_complaints']} FTC complaint(s) on file."
        else:
            recommendation = "LOW RISK: No significant fraud indicators found."

        return {
            "number": phone_number,
            "risk_score": result["risk_score"],
            "verdict": result["verdict"],
            "summary": result["explanation"],
            "line_type": result["signals"]["line_type"],
            "ftc_complaints": result["signals"]["ftc_complaints"],
            "recommendation": recommendation,
        }

    def lookup_url(self, url: str) -> dict:
        result = self._call_api("/url/lookup", {"url": url})
        return {
            "url": url,
            "risk_score": result["risk_score"],
            "verdict": result["verdict"],
            "summary": result["explanation"],
        }

    def analyze_message(self, text: str) -> dict:
        result = self._call_api("/text/analyze", {"text": text})
        return {
            "risk_score": result["risk_score"],
            "verdict": result["verdict"],
            "summary": result["explanation"],
            "extracted_phones": result["signals"]["extracted_phones"],
            "extracted_urls": result["signals"]["extracted_urls"],
        }

# Usage in a Flask app for internal caseworker tool
from flask import Flask, request, jsonify

app = Flask(__name__)
tool = CaseworkerLookupTool(os.environ["SCAMVERIFY_API_KEY"])

@app.route("/lookup/phone", methods=["POST"])
def lookup_phone():
    result = tool.lookup_phone(request.json["phone"])
    return jsonify(result)

@app.route("/lookup/url", methods=["POST"])
def lookup_url():
    result = tool.lookup_url(request.json["url"])
    return jsonify(result)

Use Cases by Agency Type

AgencyPrimary UseKey API EndpointsExample
Area Agency on AgingCaller scam verificationPhone lookup, Text analysisSenior calls about a suspicious IRS call. Caseworker checks the callback number instantly.
State Attorney GeneralComplaint enrichment and pattern detectionPhone lookup, URL verificationAG office receives 50 complaints about the same number. Bulk verify and build investigation.
Adult Protective ServicesFinancial exploitation investigationPhone lookup, URL verification, Text analysisInvestigator verifies numbers and websites involved in a financial exploitation case.
Social Security AdministrationBenefits scam detectionPhone lookupVerify callback numbers in reported SSA impersonation calls.
Municipal consumer hotlinesPublic-facing scam checkPhone lookup, URL verificationCity consumer line receives a question: "Is this number a scam?" Instant lookup and answer.

Batch Processing for Complaint Databases

For agencies processing high volumes of complaints, batch verify phone numbers to identify patterns and prioritize investigations.

async function enrichComplaints(complaints) {
  const enriched = [];

  for (const complaint of complaints) {
    const phoneResult = await tool.lookupPhone(complaint.reportedNumber);

    enriched.push({
      ...complaint,
      scamVerify: {
        riskScore: phoneResult.riskScore,
        verdict: phoneResult.verdict,
        lineType: phoneResult.details.lineType,
        carrier: phoneResult.details.carrier,
        ftcComplaints: phoneResult.details.ftcComplaints,
      },
    });
  }

  // Sort by risk score to prioritize investigations
  enriched.sort((a, b) => b.scamVerify.riskScore - a.scamVerify.riskScore);

  return enriched;
}

Government pricing. ScamVerify™ offers volume pricing for government agencies and nonprofits. Contact us for details on plans designed for high-volume lookups at reduced rates.

Plain-Language Output

One of ScamVerify™'s key advantages for government use is the AI-generated explanation. Instead of raw data that requires interpretation, every lookup returns a plain-English summary that caseworkers can read directly to callers or include in reports.

Example response excerpt:

{
  "risk_score": 82,
  "verdict": "high_risk",
  "explanation": "This number is associated with 7 FTC complaints filed between 2024 and 2025. It is a VoIP number operated by a carrier frequently used in robocall campaigns. Multiple consumers reported receiving calls claiming to be from the Social Security Administration."
}

A caseworker can read that explanation to a senior caller without any technical interpretation.

Best Practices

  • Build a simple internal web tool. Caseworkers do not need a complex interface. A single search box that accepts phone numbers, URLs, or message text is ideal. The code examples above provide the backend.
  • Log every lookup. Track which numbers and URLs your agency checks to identify repeat offenders and emerging scam campaigns in your region.
  • Combine with existing reporting. When a lookup confirms a scam, help the caller file reports with the FTC (reportfraud.ftc.gov) and your state AG. The ScamVerify™ data strengthens the report.
  • Train caseworkers on interpreting results. A 15-minute training session on risk scores, line types, and verdicts is enough for most staff to use the tool effectively.

Getting Started

  1. Create an API key and set up your account
  2. Follow the Quickstart guide to make your first lookup
  3. Review the Phone Lookup API, URL Verification API, and Text Analysis API reference docs
  4. Build the internal lookup tool using the code examples above

On this page