Skip to content

March 6, 2026

How to verify proof of address documents with AI

Proof of address (POA) verification is a core part of KYC and onboarding for financial services, property management, crypto exchanges, and any business that needs to confirm where someone lives. Traditionally it's been a manual, slow, and error-prone process: someone uploads a utility bill, a compliance officer reads it, checks the name and address, and makes a judgment call.

AI changes this. With modern document understanding models, you can extract structured data from any proof of address document, utility bills, bank statements, government letters, medical bills, in seconds, in any language, and compare it against expected values automatically.

What makes POA verification hard

The challenge isn't just reading text from a document. It's handling the real-world messiness:

Handling all of this reliably requires more than OCR. You need AI that understands document structure, can distinguish a customer name from a company name, and can match extracted data against expected values with configurable tolerance.

How automated POA verification works

Here's the typical flow for an automated system:

  1. Upload the document: PDF, JPG, or PNG of a utility bill, bank statement, or government letter
  2. AI extracts structured data: names, addresses (with transliteration for non-Latin scripts), document type, and dates
  3. Cross-check against expected values: fuzzy matching compares the extracted name, address, and postcode against what you provided
  4. Return a verdict: approved, declined, or needs review, with match scores and reasoning for every check

The entire process takes under 10 seconds.

Doing it with trusqo

trusqo is a proof of address verification API that handles this entire flow. One REST endpoint, no SDKs, no onboarding calls.

Via API

Submit a document with the expected name and address:

curl -X POST https://app.trusqo.com/api/verify \
  -H "X-API-Key: YOUR_API_KEY" \
  -F "name=Jane Smith" \
  -F "address=42 Oak Lane, London SW1A 1AA" \
  -F "files=@utility-bill.pdf"

You get back a request ID. Poll for the result or set up a webhook:

{
  "status": "approved",
  "extractedName": "Jane Smith",
  "nameMatchScore": 0.97,
  "nameMatchResult": "pass",
  "extractedAddress": "42 Oak Lane, London SW1A 1AA",
  "addressMatchScore": 0.94,
  "addressMatchResult": "pass",
  "extractedDocType": "utility-bill",
  "docTypeResult": "pass",
  "extractedDateOfIssue": "2026-01-15",
  "dateResult": "pass"
}

Every check, name, address, postcode, document type, date, has a configurable threshold so you control how strict the matching is.

Via MCP server (for AI assistants)

If you use Claude, Cursor, or any MCP-compatible AI assistant, you can verify documents without writing code. Install the trusqo MCP server:

{
  "mcpServers": {
    "trusqo": {
      "command": "npx",
      "args": ["-y", "trusqo-mcp"],
      "env": {
        "TRUSQO_API_KEY": "YOUR_API_KEY"
      }
    }
  }
}

Then just ask your AI assistant: "Verify this utility bill for Jane Smith at 42 Oak Lane, London." The assistant calls the API, polls for the result, and shows you the verdict, all without you touching any code.

Three tools are available:

What documents are supported

trusqo processes all common proof of address document types:

Documents in any language or script are supported. Non-Latin text (Cyrillic, Arabic, Chinese, Georgian, and others) is automatically transliterated for cross-script matching.

What you get with every verification

Getting started

Sign up at app.trusqo.com, get an API key, and send your first verification. Plans start at €25/month with 50 checks included. No contracts, no setup fees, no sales calls.

Full API documentation is at trusqo.com/docs.