ScamVerify
Use Cases

Mail and Document Fraud Prevention

Use the ScamVerify™ API to detect fake court notices, toll letters, IRS scams, and utility shutoff notices through AI-powered document analysis and entity verification.

Mail fraud targeting vulnerable populations has escalated dramatically. Government impersonation scams generated $789 million in losses in 2023, and elder fraud losses reached $2.4 billion, a 4x increase over 5 years. Organizations that serve these populations need automated tools to verify suspicious documents before victims act on them. The ScamVerify™ Document Analysis API provides AI-powered document scanning with multi-source entity verification to catch fraudulent mail at the point of intake.

The Problem

In March 2026, a wave of fake court summons targeted residents across Virginia, Maryland, Ohio, Pennsylvania, Colorado, and Washington D.C. The documents looked authentic, complete with case numbers, judge names, legal citations, and court addresses. Victims were instructed to call a phone number or visit a URL to "resolve" their case, where they were pressured into making payments via gift cards or wire transfers.

These documents are increasingly sophisticated. AI-generated scam letters now include proper formatting, official-looking seals, and plausible legal language. Traditional visual inspection by caseworkers is no longer reliable. The signals that distinguish a real court order from a fake one are verifiable facts: Does this judge exist? Is this address a real courthouse? Does this statute actually apply?

How ScamVerify™ Helps

The ScamVerify™ Document Analysis API accepts a photo or PDF of a suspicious document and runs a multi-stage verification pipeline:

  1. Vision AI extraction identifies the document type and extracts all structured entities (addresses, official names, legal citations, phone numbers, URLs, dollar amounts, dates)
  2. Address verification checks each address against the Smarty API for deliverability and CMRA (Commercial Mail Receiving Agency) status. A court using a UPS Store mailbox is a strong fraud signal.
  3. Institution verification looks up claimed institutions through Google Places to confirm they exist at the stated address
  4. Official verification checks named judges against the CourtListener database of federal and state judges
  5. Citation verification validates legal statute references through the GovInfo API for federal statutes
  6. AI synthesis combines all verification results into a single risk score, verdict, and plain-English explanation

Code Example: Document Intake Processor

import requests
import os
from pathlib import Path

SCAMVERIFY_API_KEY = os.environ["SCAMVERIFY_API_KEY"]
BASE_URL = "https://scamverify.ai/api/v1"


def analyze_document(file_path: str) -> dict:
    """
    Analyze a suspicious document image or PDF.
    Accepts JPG, PNG, WebP, HEIC, or PDF (max 4.5 MB).
    """
    path = Path(file_path)
    mime_types = {
        ".jpg": "image/jpeg",
        ".jpeg": "image/jpeg",
        ".png": "image/png",
        ".webp": "image/webp",
        ".heic": "image/heic",
        ".pdf": "application/pdf",
    }
    mime = mime_types.get(path.suffix.lower(), "application/octet-stream")

    with open(file_path, "rb") as f:
        response = requests.post(
            f"{BASE_URL}/document/analyze",
            headers={
                "Authorization": f"Bearer {SCAMVERIFY_API_KEY}",
            },
            files={"file": (path.name, f, mime)},
        )

    response.raise_for_status()
    return response.json()


def process_intake_batch(file_paths: list[str]) -> list[dict]:
    """
    Process a batch of document images from an intake form.
    Returns results sorted by risk score (highest first).
    """
    results = []

    for file_path in file_paths:
        try:
            result = analyze_document(file_path)
            results.append({
                "file": file_path,
                "document_type": result["document_type"],
                "risk_score": result["risk_score"],
                "verdict": result["verdict"],
                "explanation": result["explanation"],
                "red_flags": result["red_flags"],
                "entity_verifications": result["entity_verifications"],
                "recommended_action": result["recommended_action"],
                "needs_escalation": result["risk_score"] >= 60,
            })
        except requests.HTTPError as e:
            results.append({
                "file": file_path,
                "error": str(e),
                "needs_escalation": True,
            })

    # Sort by risk score, highest first
    results.sort(
        key=lambda r: r.get("risk_score", 0),
        reverse=True,
    )
    return results


# Usage: process documents from an elder care intake form
intake_files = [
    "/uploads/intake/court-summons-scan.jpg",
    "/uploads/intake/irs-notice.png",
    "/uploads/intake/toll-letter.pdf",
]

results = process_intake_batch(intake_files)
for r in results:
    if r.get("needs_escalation"):
        print(f"ESCALATE: {r['file']} - Score: {r.get('risk_score', 'N/A')}")
        print(f"  Verdict: {r.get('verdict', 'error')}")
        print(f"  Action: {r.get('recommended_action', 'Review manually')}")

Entity Verification Flow

When a suspicious document is uploaded, ScamVerify™ extracts and verifies every entity it finds. Here is a typical verification chain for a fake court summons:

Document image uploaded
         |
         v
  Vision AI extracts:
  - Address: "1200 Legal Center Blvd, Suite 400, Arlington, VA"
  - Judge: "Hon. Margaret R. Thompson"
  - Citation: "18 U.S.C. § 1341"
  - Phone: "(703) 555-0147"
  - URL: "pay-court-fines.com"
         |
         v
  Entity verification fan-out:
  ├── Smarty: Address is a CMRA (mailbox store) ← RED FLAG
  ├── Google Places: No courthouse at this address ← RED FLAG
  ├── CourtListener: No judge named "Margaret R. Thompson" ← RED FLAG
  ├── GovInfo: 18 U.S.C. § 1341 is the mail fraud statute (ironic, but valid)
  ├── Phone lookup: VoIP number, high-risk carrier ← RED FLAG
  └── URL lookup: Domain registered 3 days ago ← RED FLAG
         |
         v
  AI synthesis: risk_score 94, verdict "scam"
  "This document claims to be a court summons but contains multiple
   fraud indicators. The return address is a commercial mailbox, the
   named judge does not exist in federal or state court records, and
   the payment phone number is a disposable VoIP line."

Risk Scoring for Document Fraud

SignalWeightDescription
CMRA address (mailbox store)HighReal courts and government agencies do not use UPS Stores or PO Box services as their official address
Non-existent officialHighNamed judge, officer, or agent not found in CourtListener or other databases
Payment pressure languageMediumUrgency phrases like "immediate arrest," "respond within 24 hours," or "avoid penalties"
Spelling and grammar errorsMediumMisspelled agency names, inconsistent formatting, wrong state abbreviations
Known scam pattern matchHighDocument matches patterns from previously confirmed scam campaigns (e.g., fake toll notices, IRS impersonation)
Mismatched institutionHighClaimed institution does not exist at the stated address per Google Places verification
Invalid legal citationsMediumReferenced statutes do not exist or do not apply to the claimed jurisdiction
VoIP callback numberMediumPhone number on the document uses a high-risk VoIP carrier
New domain for payment URLHighPayment or "resolution" URL registered within 30 days

Document images may contain personally identifiable information (PII) including names, addresses, Social Security numbers, and financial account numbers. ScamVerify™ does not store the original image after analysis. The extracted text entities and verification results are retained for caching (24 hours) and audit purposes. Organizations handling document images must comply with their own data retention policies and applicable regulations (HIPAA, state privacy laws, elder abuse reporting requirements).

Best Practices for Document Fraud Prevention

  • Train staff to photograph documents, not scan them. Phone cameras produce higher-quality images than flatbed scanners for this purpose. Ensure the entire document is visible with good lighting and minimal glare.
  • Implement intake forms with file upload. Add a document upload field to existing case management or complaint intake forms. Route uploaded images through the ScamVerify™ API before the case is assigned to a caseworker.
  • Set up alerts for high-risk verdicts. Any document with a risk score of 60 or above should trigger an immediate alert to a supervisor. Documents scoring 80 or above should be flagged for law enforcement reporting.
  • Verify before advising. Do not tell a client their document is fake based on visual inspection alone. Use the API verification results, which check verifiable facts (judge existence, address legitimacy, statute validity), to support your assessment.
  • Report confirmed scams. When a document is confirmed fraudulent, file reports with the FTC (reportfraud.ftc.gov), your state Attorney General, and local law enforcement. The ScamVerify™ analysis provides structured evidence for these reports.
  • Track patterns across your organization. Log all document analysis results to identify scam campaigns targeting your service area. Multiple clients receiving similar fake court notices likely indicates a coordinated campaign.

On this page