Skip to content
Adaptive Systems
Menu

Dossier · by Adaptive Systems

Live

Applicant documents, checked.

Bank statements, bills, payslips and IDs. A model reads them; code examines each file for edits, adds up every balance, checks the passport's machine-readable zone and compares every name, address and date with what the applicant told you. A raised salary, a retyped amount or someone else's statement is caught, boxed on the page, with the reason.

The app runs real models, so it is password-protected. The numbers here come from it live.

How it works: the case study on GitHub

Bank statement

Utility bill

Passport

  1. Reada model reads every value with its words
  2. The file itselfedits, hidden text, fonts, producer
  3. The numbersbalances, bank details, MRZ check digits
  4. The applicantname, address, date of birth vs declared
Failed checksthe statement was edited · a person decides, with the page boxed
Applicants checked
cases, all documents compared
Documents processed
statements, bills, payslips, IDs
Failed checks
cases with a forged or mismatched document
Per document
median: read, examined and checked

Show your working

A forged statement, caught by the file itself.

A synthetic applicant's bank statement with the salary retyped over a white box, and Dossier's real reading of it. The amount looks right on screen; the file still holds the original underneath, and the new one is set in another font. Hover a row to see where it is.

A synthetic bank statement with a salary amount retyped over a white box
synthetic statement · read by gemini-3.5-flash-lite in 4.2 s · file examined in 36 ms

Issuer: Northbank plc — read by the model, found on the page by code.

Failed checks · 2 reasons on the page

Do the sum yourself: 666.64 + 4,855.28 is 5,521.92, yet the next balance reads 4,021.92 = 666.64 + 3,355.28, the value hidden under the box.

Declared details compared with each document
DeclaredBank statementUtility billPassport
NamePriya Grace Pereiramatcheswritten differentlymatches
Address59 Station Road, Bristol BS8 1XEmatchesmatchesnot on it
Date of birth24 July 1981not on itnot on itmatches

The utility bill says “Ms P Pereira”: initials, so a person is not needed for that. The applicant is the same person on all three; the statement itself is what failed.

What it checks

The model reads. Code decides.

A model is good at reading a statement and bad at noticing that it was edited. So the model only reads; every check below is code, and every finding points to the place on the page.

  • Edited after issue

    A PDF saved again after it was issued keeps its first version inside. Dossier compares them and shows the change: 3,820.97 → 5,820.97.

  • Text under a box

    A white box painted over an amount hides it from the eye, not from the file. The original value is quoted.

  • Another font, out of line

    An amount typed in a PDF editor rarely matches the bank's font or its column's right edge.

  • Balances that don't add up

    Opening balance + money in − money out must equal every printed balance. One raised salary breaks the chain.

  • Passport MRZ

    The machine-readable zone's check digits (ICAO 9303) and its agreement with the printed page.

  • Who and where

    Names (initials, order, accents allowed; one changed letter is not), addresses by postcode and house number, dates of birth.

  • Used by someone else

    The same statement in another applicant's case, and documents unlike an issuer's earlier ones.

  • Fresh and valid

    Proof of address within your recency window, IDs not expired, payslips consistent with the declared income.

Measured, not promised

Every forgery type, through the real model.

The eval builds synthetic applicants, forges one document the way fraudsters do (a raised salary, recalculated balances, a retyped amount, a remade statement, a changed name, an altered passport date, a stale bill) and runs every pack through the production model and the checks. Genuine packs are in the same run, so false alarms count too.

Detection, published eval

Live

Caught so far

Live

Live

What Dossier is doing right now.

Counted from the app as it runs: applicants checked per day, outcomes, and each step as it happens. Only fixed wording and counts leave the server; no names, amounts or file names.

Applicants per day · 14 days

Live
…max … a day
0000-00-0: Consistent 0, Needs a person 0, Failed checks 000-00000-00-1: Consistent 0, Needs a person 0, Failed checks 00000-00-2: Consistent 0, Needs a person 0, Failed checks 00000-00-3: Consistent 0, Needs a person 0, Failed checks 000-30000-00-4: Consistent 0, Needs a person 0, Failed checks 00000-00-5: Consistent 0, Needs a person 0, Failed checks 00000-00-6: Consistent 0, Needs a person 0, Failed checks 000-60000-00-7: Consistent 0, Needs a person 0, Failed checks 00000-00-8: Consistent 0, Needs a person 0, Failed checks 00000-00-9: Consistent 0, Needs a person 0, Failed checks 000-90000-00-10: Consistent 0, Needs a person 0, Failed checks 00000-00-11: Consistent 0, Needs a person 0, Failed checks 00000-00-12: Consistent 0, Needs a person 0, Failed checks 000-120000-00-13: Consistent 0, Needs a person 0, Failed checks 000-13
  • Consistent
  • Needs a person
  • Failed checks

Outcomes

—
  • Consistent—
  • Needs a person—
  • Failed checks—

Dossier · live activity

Live

Who it is for

Wherever a document stands between you and a loss.

Lenders and brokers

Bank statements and payslips behind an affordability check: an edited salary or a remade statement stops before the money goes out.

Letting agents

Proof of address and income for a tenancy: every document of the pack compared with what the applicant told you, and with each other.

Firms with AML duties

Proof of address for customer due diligence: fresh enough, the right person, the right address, the file not edited, every check recorded.

Ask the applicant

Send a private link: the applicant uploads straight into their case after a quick human check, and sees only which documents are needed and what they sent, never the findings.

Upload or drop

Drop files onto a case, or onto the list to start a new applicant with them. PDFs, scans and phone photos.

By email

Forward an applicant's email to the intake address: a case is opened for it, or the documents join the case its reference names.

Team notifications

Slack, Telegram or email when a case fails a check or needs a person: the case reference and initials only, never names or addresses.

Webhooks and export

Signed events when a case is opened, gets documents, changes outcome or is decided (n8n, Zapier, your CRM); every case as CSV or JSON.

Retention and erasure

Documents erased after your retention period, or one applicant's at once on request; the decision log keeps no personal data.

What it deliberately doesn't do

  • It checks documents, never scores people: the outcome says what is wrong with a document, and a person decides.
  • No face matching or liveness checks: no biometric data is processed.
  • A passport's MRZ is checked, but genuineness needs the chip or security features: that is a certified identity partner's job.
  • Not a consumer report: no US tenant screening (FCRA) and no automated refusals.

Questions

Asked before every rollout.

What is the second opinion?

After the checks, a separate decision model (TypeSafe Jev) is asked how likely a forgery is. It sees only the evidence: the kinds of documents and the reason codes the checks raised, never the applicant's name, address, numbers or files. It can only make a case stricter: a strong high risk on a case whose checks all passed sends it to a person; it can never clear a failed check. On the published eval it agreed with the checks on 42 of 44 packs and sent no genuine pack to a person.

Does Dossier decide whether to lend or let to someone?

No. It checks documents and says what is wrong with them, with the reasons on the page. The business decides about the person. It never scores an applicant (that is a high-risk use under the EU AI Act; document fraud detection is not).

Does it verify passports?

It reads the data page and checks the machine-readable zone's check digits and its agreement with the printed details. It does not claim a passport is genuine: that needs the chip or security features, which a certified identity partner checks.

Can it catch a statement made from scratch?

A perfect forgery made from nothing is the hardest case. Dossier still compares it with the issuer's earlier documents, checks every balance and identifier and looks for the same file in other cases; for high stakes, add open banking or confirmation from the issuer.

Where do the documents go?

To your own server (or ours, separated per business). Models are called only through providers that neither store nor train on them; names and addresses never appear in Slack, Telegram or email alerts. Documents can be erased on request or after a retention period.

How accurate is it?

Measured, not claimed: the published evaluation runs every forgery type and genuine packs through the real model. The current numbers are on this page and on the live page.

Same engine, for invoices: Docket

See them run on real data.

The apps run real models on every click, so they sit behind a password. Ask for a login or a guided walkthrough: talk to our AI receptionist in Front Desk, drop invoices into Docket, or load forged applicants into Dossier. Or try them in public: score a lead, read your invoice, forge an applicant, or connect Docket and Dossier to Claude. Or hire us to build yours.