Service
Document intake and extraction
Invoices and forms turned into checked records, with uncertain fields sent to a person.
Document extraction demos well. Ten clean invoices from one supplier come out perfectly. The trouble starts with a scanned fax, a credit note that looks like an invoice, or a supplier who changed their template in March.
We build for those cases. Every field has a confidence score, totals are checked against line items, and anything below the threshold goes to a review queue with the document open beside it. The aim is that nothing wrong reaches your ledger without someone seeing it.
- Inputs
- PDF · Scans · Images · Email attachments
- Document types
- Invoices · Purchase orders · Delivery notes · Forms · Statements
- Extraction
- Header fields plus line items
- Validation
- Arithmetic, supplier, VAT and duplicate checks
- Confidence
- Score per field, with a routing threshold
- Human review
- Queue with document and field side by side
- Destinations
- Accounting system · ERP · Database · Sheet
- Evaluation
- Test set re-run on every prompt or model change
- Audit
- Source document kept and linked to every record
How it runs
The stages of a typical document intake setup. Yours may skip some or add others.
Intake
Documents arrive by mailbox, watched folder or upload, and the original is stored unchanged before processing starts.
Classify
The document type is identified first. An invoice and a credit note need different rules.
Extract
Header fields and line items are pulled into a schema, each with a confidence score.
Validate
Line items must add up to the total, tax must reconcile, and the supplier must exist. A failed check sends the document to review.
Review
Anything below the threshold is queued for a person, with the document and the extracted field side by side.
Post
Approved records are written to your system with the source document linked. A retry can't post the same record twice.
Example output
An example of the format. We agree the exact fields with you before building anything.
{
"document_id": "doc_01HQ8F3M",
"type": "invoice",
"type_confidence": 0.99,
"supplier": { "name": "…", "matched_id": "SUP-2041", "confidence": 0.96 },
"invoice_number": { "value": "INV-88412", "confidence": 0.98 },
"issue_date": { "value": "2026-02-28", "confidence": 0.97 },
"currency": "EUR",
"line_items": [
{ "description": "…", "qty": 12, "unit": 41.5, "net": 498.0, "confidence": 0.94 },
{ "description": "…", "qty": 3, "unit": 88.0, "net": 264.0, "confidence": 0.72 }
],
"totals": { "net": 762.0, "tax": 160.02, "gross": 922.02 },
"checks": { "line_sum_matches_total": true, "tax_reconciles": true,
"duplicate_of": null },
"routing": { "decision": "review", "reason": "line_item_confidence_below_0.85" }
}In detail
Checks that run before anything posts
10- Line items sum to the stated net
- Tax reconciles at the stated rate
- Gross equals net plus tax
- Supplier matches a known record
- Invoice number not already processed
- Purchase order exists and is open
- Quantities within tolerance of the delivery note
- Currency matches the supplier's agreement
- Date within an acceptable window
- Bank details unchanged since the last invoice
What you get
This list goes into the scope document, and we check the finished work against it.
- 1Intake from email, a watched folder or upload
- 2Extraction to your field schema, with confidence per field
- 3Checks on totals, tax, duplicates and supplier match
- 4Review queue for anything under the threshold
- 5Records written into your accounting system or database
- 6Test set built from your own documents
Questions
What accuracy can you commit to?
The accuracy we test on your documents. Before launch we build a test set from your own inputs and report the result. A figure quoted before anyone has seen your documents means nothing.
What happens to documents the system is unsure about?
They go to a review queue with the doubtful fields marked. The system is built so that a wrong value never posts without a person seeing it.
Can it write into our accounting system?
Where the system has an API, yes, and a retry can't double-post. Where it doesn't, we deliver a file in the format it imports.
Do you keep the original documents?
Every record links to its source document, so you can show an auditor where each figure came from.
Start with a scope
We write a short document first: what gets built, what it needs from you and what it costs. You decide whether to go ahead after reading it.