Here’s a real dilemma inside every insurance document. The insured’s name is crisp typed text — reading the text layer is fast, cheap, and exact. But the effective date is a rubber stamp over a form line, the “claims-made vs. occurrence” choice is a checkbox, and the loss table’s meaning depends on which column a number sits under. Read those from a flat text dump and you get mush — stamps land in the wrong place, checkboxes vanish, columns collapse. Read everything as images instead and you’re slow, expensive, and worse at the clean fields. Neither “always text” nor “always vision” is right.
So InsightXtract doesn’t pick one. In the plan step of the extraction loop, the agent plans a strategy for — and the document class configures — each field a strategy — text or vision — based on the document’s structure and what the field actually is.
What the trade actually costs
We measured it rather than assumed it. Running the same submissions through the text path instead of page images:
| Page images | Text with coordinates | |
|---|---|---|
| Input tokens | 102,747 | 35 |
| Output tokens | 61,168 | 57,528 |
| Cost | $1.98 | $1.76 (−11%) |
| Wall clock | 364s | 334s (−8%) |
The input column collapses by three orders of magnitude and the bill barely moves. That is the finding worth carrying: this workload is output-bound, not input-bound. What you pay for is the record being written — every field with its evidence and confidence — and that is the same whether the model looked at a picture or read a transcript. Anyone budgeting a switch on input tokens alone will be wrong by a factor of six.
And it is not free. On that same corpus the text path read a carrier’s letterhead as the broker’s name — the letterhead is on every page, the broker is named once, and without the page you cannot see which is which. It also cannot see a tick box: the printed text of a question lists every option whether or not it is selected, so a question with one committee ticked comes back with three. For a schema where a quarter of the fields are yes/no answers, that is not a saving.
Why the choice matters
The agent makes this call using its perception of the document (from the perceive step) crossed with each field’s nature. It also sets an extraction order, so related fields are read together.
type · layout · challenges] --> PLAN{plan
per-field strategy} PLAN -->|typed, clean| T1["text: insured_name"] PLAN -->|typed, clean| T2["text: policy_number · FEIN"] PLAN -->|stamped| V1["vision: effective_date"] PLAN -->|checkbox| V2["vision: claims_made_or_occurrence"] PLAN -->|columnar table| V3["vision: loss_history rows"] T1 & T2 & V1 & V2 & V3 --> EX[extract
each field its own way]
A worked example: one ACORD, two strategies
The same document, routed field by field. Notice the mix — this is a single extraction, not two runs.
| Field | Strategy | Why |
|---|---|---|
| insured_name | text | Crisp typed text in the header — exact and cheap from the text layer. |
| policy_number · fein | text | Structured identifiers, unambiguous as text. |
| effective_date | vision | Rubber-stamped over the form line — the text layer misplaces it; the image reads it in context. |
| claims_made_or_occurrence | vision | A checkbox — meaningless as text, obvious as a mark on the page. |
| loss_history (table) | vision | Column alignment is the data — which number is “paid” vs. “reserved” depends on position. |
Spreadsheets take a third path
Vision-or-text is the choice for documents. Structured files — Excel and CSV exposure workbooks, SOVs, loss registers — don’t need either: the agent perceives the sheets and columns and uses a dedicated structured extractor that reads cells directly. The point is the same: match the reading method to the medium, rather than flattening everything into one lossy pipeline.
Sensible defaults, with control when you want it
The agent’s per-field choice is a strong default that adapts to each document. When a field is known to always need one modality — say a form where the key date is always stamped — you can pin its strategy in the document class so the agent doesn’t have to re-decide every time.
Why it’s a real differentiator
- Higher accuracy on the hard fields. Stamps, checkboxes, and columnar tables — the values that break flat-text IDP — are exactly the ones routed to vision.
- Lower cost and latency. Vision is heavier than text. Using it only where it earns its keep is faster and cheaper than rendering and analyzing every page as an image.
- Cleaner clean fields. Typed identifiers stay exact because they’re read as text, not re-interpreted from pixels.
- It’s judgment, not a pipeline. A fixed OCR-then-parse flow can’t adapt to a document it hasn’t seen; a per-field decision can.
Read next →
This is one move in a larger loop: how an extraction agent actually thinks. See how the agent checks its own output: self-checking extraction & the re-extract loop.