Watch someone start an investor onboarding form.
They upload their passport. Then the form asks for their full name. Then their date of birth. Then their address — which is printed on the utility bill they attached two screens ago.
At some point, usually around the fourth field, a reasonable person thinks: you have this. I just sent it to you.
Then they leave the tab open, intending to come back. Your ops team chases them for eleven days.
The fix is an inversion, not a feature
The conventional order is: fill in the form, then upload documents to prove what you filled in.
We turned it around. Upload the documents first. The agent reads them, fills in the matching fields, and the investor's job becomes review and confirm rather than transcribe.
That's the whole idea. Everything else is making it trustworthy enough to leave on.
Four rules that keep it honest
One request per document, not one per field. Extraction rules are grouped by the document they read, so if five fields come from a tax document, that's a single request asking for all five at once — not five separate reads of the same file that could each return something slightly different.
Never overwrite what a human typed. The default mode fills blank fields only. If the investor has already entered something, the agent skips it and says why: "Field already has a value." The investor's own entry is authoritative over the machine's reading, always, without anybody having to think about it.
Every field reports its own outcome. Not a single success/failure for the run — a per-field result. Extracted. Skipped, because the document wasn't uploaded. Skipped, because there was already a value. Error, because the response couldn't be read. When something doesn't fill in, you know which of those four things happened.
A half-finished form can still be saved. The final write deliberately bypasses the form's normal validation, so a KYC that's been partially pre-filled saves cleanly mid-wizard instead of erroring on fields the investor hasn't reached yet. Small thing. It's the difference between a wizard that works and one that fights you at step two.
An onboarding form that asks for what the uploaded document already contains isn't collecting information. It's charging the investor a transcription fee.
⚙️ Under the hood: extraction is the easy half
If the story stopped at pre-filling, this would be OCR with better marketing. The part that makes it usable for a compliance team is what happens after the investor says they're done.
A second agent picks up every KYC record the investor has marked complete — and only those; work in progress is left alone — and audits it.
Are the required fields actually filled in? Including your own custom required fields. And here's the check I like most: a value that is placeholder junk doesn't count. "N/A". "TEST". "--". Every ops team has seen a KYC pass a completeness check because the field technically contained characters. Dropdown answers are validated too — the selected value must genuinely be one of the allowed options, not a stale value left over from a form that has since changed.
Are the required documents uploaded? The ones the form fields call for, plus any extra documents your firm requires.
Is each document actually the document it claims to be? This is the check nobody expects. The agent shows the AI each uploaded file together with the label it was filed under — "Passport" — and asks whether the file is that. Mismatches get flagged, as do files that can't be read or downloaded.
That failure is extremely common and almost invisible to a checklist: a completed form, a document in every slot, and one of them is the wrong file. A green tick against "Passport uploaded" says nothing about whether a passport was uploaded.
Do the typed values match the documents? For fields you've configured for cross-checking, the agent reads the value out of the corresponding document and compares it to what's on the form. A typed ID number that disagrees with the ID document gets flagged rather than filed.
Is it expired, or about to be? Expiry is checked against configurable warning windows — 60, 30 and 15 days by default — with expired treated as blocking and approaching expiry as a warning. Anything expiring triggers reminder emails to the team.
Then a report is saved, ready or blocked. And when nothing is blocking, AML screening is kicked off automatically — the record moves to the next stage without someone remembering to push it.
A completed KYC form and a verified KYC record are different things. Most systems only measure the first, then treat it as the second.
An honest note about the toggles
Worth saying plainly, because it affects anyone who'd actually use this: several of these audit checks — field validation, document validation, the reminder email, AML kick-off — are off unless explicitly switched on. Anything not set to "on" behaves as off.
That's not ideal, and we've stopped pretending otherwise: the agent's own page now shows a warning banner naming every toggle that has never been given a value, and flags the case where the expiry warning window has been blanked out (which silently disables advance warnings entirely).
The general principle applies well beyond us: a check that is silently off looks exactly like a check that passed. If your compliance tooling can't tell you which of its checks are currently active, that's the first thing to fix — before adding any new ones.
| Form-first onboarding | Document-first + audit | |
|---|---|---|
| What the investor does | Transcribes their own documents | Uploads, then confirms |
| Where abandonment happens | Mid-form, at the fourth redundant field | Materially less to abandon |
| "Complete" means | Fields contain characters | Fields contain real values, docs match labels |
| Wrong file in the right slot | Passes | Flagged |
| Expiry | Noticed when someone looks | Checked, with 60/30/15-day warnings |
| Next step after complete | Someone remembers to start AML | Kicked off automatically when clear |
📊 The impact
Before: a long form asking investors to retype documents they'd already uploaded, "completed" records containing "N/A" in required fields, wrong files sitting in correctly-labelled slots, and expiry discovered when someone happened to look.
After: one AI request per document pre-fills the form, the investor's own entries are never overwritten, and a second agent checks completeness, placeholder junk, document identity, form-to-document consistency and expiry before the record is relied on — then starts AML screening when nothing is blocking.
The number to measure in your own firm: how long between an investor starting onboarding and your team being able to act on a verified record? Most of that duration isn't work. It's waiting for someone to return to a form.
What to take from this
- Ask for documents before you ask for data. If you can read it from what they've uploaded, don't make them type it. This applies to every form your firm sends, not just KYC.
- Treat placeholder text as an empty field. "N/A", "TEST", "--", a single hyphen. Add these to your completeness checks today — it's a one-line rule that catches a surprising number of records.
- Verify that a document is the document. A tick against "Passport uploaded" tells you a file exists in a slot. Nothing more.
- Never let extraction overwrite human input. The person is authoritative. Fill blanks; leave their answers alone.
- Audit what you can currently check. Before adding a new control, list which of your existing checks are actually switched on. A silently disabled check is indistinguishable from a passing one.
See it on your own structure
Pick five KYC records your team marked complete last quarter and ask two questions: does every required field contain a real value, and is every uploaded file actually the document its label claims?
If either answer is "probably", DM me — that gap is exactly what the audit agent is for.
Question for operations and compliance teams: what's the worst thing you've found sitting in a correctly-labelled document slot? I've heard a boarding pass, and I'd like to believe that's the record.