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:
- Formatting varies wildly: every utility company, bank, and government agency has a different layout
- Multiple languages and scripts: a Bulgarian electricity bill in Cyrillic, an Arabic bank statement, a Japanese government letter
- Name variations: "John A. Doe" vs "Doe, John" vs "J. Doe"
- Address inconsistencies: "123 Main St" vs "123 Main Street, Apt 4B"
- Multiple addresses on one document: billing address vs service address vs the issuer's HQ address
- Date formats: DD/MM/YYYY in Europe, MM/DD/YYYY in the US, and everything in between
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:
- Upload the document: PDF, JPG, or PNG of a utility bill, bank statement, or government letter
- AI extracts structured data: names, addresses (with transliteration for non-Latin scripts), document type, and dates
- Cross-check against expected values: fuzzy matching compares the extracted name, address, and postcode against what you provided
- 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:
- verify_document: submit a document with name, address, and file paths
- get_verification_result: check the status and match scores
- download_verification_report: save the PDF audit report locally
What documents are supported
trusqo processes all common proof of address document types:
- Utility bills (gas, electricity, water, internet)
- Bank statements
- Government letters (tax, benefits, municipal)
- Medical and pharmacy bills
- Post office letters
- Life insurance documents
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
- Match scores: 0–1 similarity score for name, address, and postcode
- Pass/fail verdicts: based on your configured thresholds
- Extracted data: all names, addresses, and dates found in the document
- Document type detection: automatically classifies the document
- Date validation: rejects expired documents based on your date range
- PDF audit report: downloadable compliance-ready report with full reasoning
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.