ScamVerify™
Use Cases

Insurance Claims Fraud Detection

Use the ScamVerify™ API to detect fraud in insurance claims through phone number analysis, URL verification for submitted links, and email analysis for phishing in claims communications.

Insurance claims fraud costs the industry over $80 billion annually. The ScamVerify™ API helps claims teams identify suspicious phone numbers, verify URLs submitted as evidence, and detect phishing attempts in claims correspondence.

Fraud Patterns in Insurance Claims

Phone Number Fraud

Fraudulent claims often involve phone numbers that share common characteristics:

  • Disposable VoIP numbers used to file multiple claims under different identities
  • Numbers with FTC complaint histories linked to known scam operations
  • High-risk carrier patterns where the same VoIP providers appear across related fraudulent claims

URL Fraud

Claimants sometimes submit URLs as evidence (photos hosted on cloud services, repair estimates, medical records). Fraudsters use:

  • Phishing pages that mimic legitimate services
  • Malware-hosting domains that attempt to compromise adjuster workstations
  • Newly registered domains created specifically for the fraudulent claim

Email Phishing

Claims correspondence is a prime target for phishing. Attackers impersonate insurers, adjusters, or repair shops to redirect claim payments or steal credentials.

Claims Intake Screening

Screen phone numbers and contact information at the point of claims intake.

async function screenClaimIntake(claimData) {
  const results = {
    phoneRisk: null,
    urlRisks: [],
    overallRisk: 'low',
    flags: [],
  };

  // Check the claimant's phone number
  const phoneResponse = 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: claimData.phoneNumber }),
  });

  const phoneResult = await phoneResponse.json();
  results.phoneRisk = {
    score: phoneResult.risk_score,
    verdict: phoneResult.verdict,
    lineType: phoneResult.signals.line_type,
    carrier: phoneResult.signals.carrier,
    ftcComplaints: phoneResult.signals.ftc_complaints,
  };

  if (phoneResult.signals.line_type === 'voip') {
    results.flags.push('VOIP_NUMBER');
  }
  if (phoneResult.signals.ftc_complaints > 0) {
    results.flags.push('FTC_COMPLAINTS_ON_FILE');
  }
  if (phoneResult.signals.robocall_detected) {
    results.flags.push('ROBOCALL_ASSOCIATION');
  }

  // Check any URLs submitted as evidence
  for (const url of claimData.evidenceUrls || []) {
    const urlResponse = await fetch('https://scamverify.ai/api/v1/url/lookup', {
      method: 'POST',
      headers: {
        'Authorization': `Bearer ${process.env.SCAMVERIFY_API_KEY}`,
        'Content-Type': 'application/json',
      },
      body: JSON.stringify({ url }),
    });

    const urlResult = await urlResponse.json();
    results.urlRisks.push({
      url,
      score: urlResult.risk_score,
      verdict: urlResult.verdict,
      threats: urlResult.signals,
    });

    if (urlResult.risk_score >= 50) {
      results.flags.push(`SUSPICIOUS_URL:${url}`);
    }
  }

  // Calculate overall risk
  const maxScore = Math.max(
    results.phoneRisk.score,
    ...results.urlRisks.map(u => u.score),
    0
  );

  if (maxScore >= 70 || results.flags.length >= 3) {
    results.overallRisk = 'high';
  } else if (maxScore >= 40 || results.flags.length >= 1) {
    results.overallRisk = 'medium';
  }

  return results;
}

Claims Email Monitoring

Screen emails in the claims communication thread for phishing attempts.

async function screenClaimsEmail(emailBody, rawHeaders) {
  const response = await fetch('https://scamverify.ai/api/v1/email/analyze', {
    method: 'POST',
    headers: {
      'Authorization': `Bearer ${process.env.SCAMVERIFY_API_KEY}`,
      'Content-Type': 'application/json',
    },
    body: JSON.stringify({
      email_body: emailBody,
      raw_headers: rawHeaders,
    }),
  });

  const result = await response.json();

  const alerts = [];

  // Check for authentication failures (likely spoofed)
  if (result.signals.header_analysis) {
    const headers = result.signals.header_analysis;
    if (headers.spf === 'fail') alerts.push('SPF_FAIL');
    if (headers.dkim === 'fail') alerts.push('DKIM_FAIL');
    if (headers.dmarc === 'fail') alerts.push('DMARC_FAIL');
    if (headers.return_path_mismatch) alerts.push('RETURN_PATH_MISMATCH');
  }

  // Check for brand impersonation
  if (result.signals.brand_impersonation) {
    alerts.push('BRAND_IMPERSONATION');
  }

  // Check embedded URLs
  for (const url of result.signals.extracted_urls || []) {
    if (url.risk_score >= 50) {
      alerts.push(`MALICIOUS_URL:${url.url}`);
    }
  }

  return {
    riskScore: result.risk_score,
    verdict: result.verdict,
    explanation: result.explanation,
    alerts,
    shouldQuarantine: result.risk_score >= 60 || alerts.length >= 2,
  };
}

Fraud Ring Detection

When investigating potential fraud rings, use batch phone lookups to analyze all phone numbers associated with a cluster of suspicious claims.

async function analyzeClaimCluster(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(n => ({ phone_number: n })),
    }),
  });

  const result = await response.json();

  // Look for patterns across the cluster
  const carriers = {};
  const voipCount = result.results.filter(r => r.signals?.line_type === 'voip').length;
  const complaintsTotal = result.results.reduce(
    (sum, r) => sum + (r.signals?.ftc_complaints || 0), 0
  );

  for (const item of result.results) {
    if (item.signals?.carrier) {
      carriers[item.signals.carrier] = (carriers[item.signals.carrier] || 0) + 1;
    }
  }

  // Find the most common carrier
  const topCarrier = Object.entries(carriers).sort((a, b) => b[1] - a[1])[0];

  return {
    totalNumbers: phoneNumbers.length,
    voipPercentage: Math.round((voipCount / phoneNumbers.length) * 100),
    totalFtcComplaints: complaintsTotal,
    dominantCarrier: topCarrier ? { name: topCarrier[0], count: topCarrier[1] } : null,
    riskIndicators: {
      highVoipConcentration: voipCount / phoneNumbers.length > 0.5,
      sharedCarrier: topCarrier && topCarrier[1] / phoneNumbers.length > 0.6,
      ftcHistory: complaintsTotal > 0,
    },
  };
}

Risk Scoring for Claims

Fraud SignalRisk WeightDescription
VoIP phone numberMediumCommon in legitimate use, but overrepresented in fraud
FTC complaints on claimant phoneHighPrior association with reported scam activity
Robocall detection on claimant phoneHighStrongly correlated with fraudulent operations
Evidence URL flagged as maliciousCriticalSubmitted "evidence" is hosted on a known bad domain
Spoofed email (SPF/DKIM fail)CriticalClaims correspondence is being impersonated
Multiple claims sharing a VoIP carrierHighPattern consistent with organized fraud rings
Brand impersonation in emailCriticalAttacker posing as insurer, hospital, or repair shop

ScamVerify™ data provides risk signals to support fraud investigations. It should not be the sole basis for claim denial. Always combine API signals with traditional investigation methods and comply with fair claims settlement regulations.

Best Practices for Insurance

  • Screen at intake, not just investigation. Catching fraud signals early reduces adjuster time spent on fraudulent claims.
  • Build a pattern database. Track which carriers, VoIP providers, and phone number ranges appear across your denied claims. ScamVerify™ carrier data makes this correlation possible.
  • Monitor the full claims thread. Run email analysis on every inbound email in a claims thread, not just the initial filing. Phishing often happens mid-conversation.
  • Batch analyze during SIU investigations. When your Special Investigations Unit pulls a cluster of related claims, use batch phone lookups to find shared infrastructure.

On this page