Document Data Extractor
Returns the fields it can actually read, and says so about the rest
- 8hard rules
- Things it must never do, enforced in every run
- 5handover rules
- Conditions where it stops and gives the work to a person
- 6output fields
- A structured result, not a paragraph you have to re-read
- ≤5steps per run
- Bounded work: at most 4 tool calls, enforced by the runtime
Read-only by design. This agent has no path to sending, spending, publishing or committing anything. Where that limit is the product, removing it would remove the reason to trust the output.
Overview
Turning documents into rows is the most-copied automation on every platform, and almost all of it fails the same way: every field comes back filled. A total it could not read becomes a plausible number, a date it guessed becomes a date, and the row enters your ledger looking identical to the rows that were read correctly.
Extraction is only worth anything if you know which fields to trust. This agent scores every field it returns, refuses to supply a value it cannot support, and distinguishes a field that is absent from the document from one that is present and unreadable — because the first needs a question and the second needs a better scan.
It also checks the document against itself: lines that do not sum to the stated total, a date after the document's own issue date, a currency that changes mid-page. Those are the errors that survive every confidence score, because each individual field looked fine.
Benefits
Only review what needs it
Low-confidence fields are flagged; the rest pass.
Nothing silently wrong
The failure mode of every other extractor is a wrong number that looks right.
Catches the sender's mistakes too
Internal inconsistencies are found on the way through.
What it does
A confidence on every field
You know which values to trust before they reach a ledger, not after an audit.
Blank rather than plausible
A field it cannot read comes back empty. A guessed total is worse than a missing one.
Absent and unreadable are different
One needs a question to the sender, the other needs a better scan.
Checks the document against itself
Lines that do not sum, a date after the issue date, a currency that changes mid-page — errors every field-level score misses.
Your schema, not ours
It extracts the fields you asked for, and says which of them the document does not contain.
Writes nowhere
It returns data. Putting it into your systems is a step you control.
What this changes
What this changes about your week
- It takes over
- Typing documents into a system, field by field.
- Done today by
- Whoever is cheapest, which is why the errors are found late.
- How often
- Every invoice, form and statement that arrives.
- Typical manual effort
- A few minutes per document, multiplied by everything that comes in.
Why Operations in particular. It leaves blank what it cannot read. Every other extractor returns a plausible number that looks exactly like a correct one, and nobody checks.
Runs unattended
Started by you or by an event, and it finishes on its own. Nothing waits for someone to be at a desk.
The same standard every time
The two-hundredth item is held to the bar the first one was. Consistency is the part people cannot sustain.
It cannot act on its own
Document Data Extractor has no path to sending, spending or committing. That limit is why its output is safe to act on.
How it runs
This agent runs server-side through the PROMIVO runtime. Each run is logged step by step and every tool call is permission-checked before it executes.
- 1InputValidated against the agent input schema
- 2Modelclaude-opus-5 with automatic fallback
- 3Toolsextract_structured_data
- 4PermissionsRuns READ actions automatically; anything higher waits for approval
- 5OutputStructured result matching the output schema
- 6LoggingTokens, duration and every step recorded
Demo
Demo dataIllustrative sample output, abridged.
Input
{
"text": "…",
"fields": [
{
"name": "total",
"type": "currency",
"required": true
}
],
"documentType": "invoice"
}Output
{
"fields": [
{
"name": "total",
"basis": "Labelled 'Total due' in the summary block.",
"value": "4180.00",
"status": "read",
"confidence": "high"
},
{
"name": "purchaseOrder",
"basis": "No PO reference anywhere in the document.",
"value": "",
"status": "absent",
"confidence": "low"
},
{
"name": "dueDate",
"basis": "Reads '03/04/2026'. Day-first and month-first give different dates and the document states no convention.",
"value": "",
"status": "ambiguous",
"confidence": "low"
}
],
"escalate": true,
"disclaimer": "Every field carries the confidence behind it. Nothing has been inferred from typical documents of this kind or from the rest of the batch, a blank is a value that could not be read, and inconsistencies are reported rather than quietly corrected.",
"inconsistencies": [
{
"issue": "Line items sum to 4,120.00 but the stated total is 4,180.00.",
"values": [
"4120.00",
"4180.00"
]
}
],
"escalationReason": "The document does not add up to its own stated total.",
"needsHumanReview": [
"dueDate — ambiguous format",
"total — does not match the line items"
]
}Requirements
Integrations
No integrations required.
Before you start
- The document text
- The fields you want, as a schema
- Requires the Starter plan or higher
Use cases
Supplier invoices
Into rows, with the ones needing a human marked.
Forms and applications
Structured, with missing fields listed rather than invented.
Statements and remittances
Reconciled against their own totals as they are read.
Pricing
Starter
Billed monthly through your PROMIVO subscription. Cancel at any time.
Runs consume your plan allowance for agent executions and tokens. See plan limits
FAQ
Does it read scanned images?
It works from the text you supply, including text produced by your own scanning. Where that text is garbled it reports the field as unreadable rather than guessing what it probably said.
Why leave fields blank?
Because a plausible wrong value is the expensive failure. A blank field asks a question; a guessed one answers it wrongly and nobody checks.
Can it write into our system?
No. It returns structured data with confidences. What you do with a low-confidence row is a decision, and it should be yours.
Reviews
Reviews open once customers have run this agent.
Need this agent to work differently?
Tell us what to change and our team will scope a customised version for your business.
Customize this agent