Stop switching models to fix your scanner
Quality gates at capture set the accuracy ceiling before any model runs

Introduction
An eleven-dollar courier invoice posted to the ledger as eleven thousand dollars, and the automation was proud of it. Confidence score: 0.96. The document had been photographed on a warehouse desk, at an angle, under a ceiling light that put a glare stripe straight through the amount box. A human squinting at it would have asked for a better copy. The pipeline did what pipelines do: it extracted something, attached a confident number to it, and moved on.
That invoice became the exhibit in a familiar internal argument. The document AI was "stuck at 82 percent," the annual contract was up for renewal, and the team was two demos deep into evaluating a third extraction vendor in two years. Each switch had cost a migration, a re-integration, and a quarter of attention. Each had moved the headline number a point or two, and each time the complaints came back within a month.
Nobody had yet split the accuracy number by what was being fed in.
One model, three realities
When someone finally did, the mystery dissolved in an afternoon. On clean digital PDFs, the system was reading at 98 percent. On flatbed scans, low 90s. On phone photos and re-scanned faxes-of-printouts, it was hitting 61, and that band was a third of the volume and growing, because the suppliers sending the ugliest documents were also the busiest.
The blended 82 was not a model score. It was an average across three different jobs, only one of which the model was actually failing at, and that one was unwinnable. Perspective distortion, motion blur, 150-dpi compression, a glare stripe through the one field that matters: the information is not degraded in those pixels. It is absent. A model cannot read what the lens never recorded, and no vendor on any shortlist can either.
Every model switch was re-running the same experiment against the same ceiling and billing it as strategy.
Gate the input, not just the output
The fix is a quality gate at ingestion, and it is document-AI plumbing that specialist teams treat as non-negotiable while everyone else discovers it the expensive way.
Score every incoming document before extraction ever runs: resolution, skew angle, contrast, blur, compression artifacts, glare coverage. The signals are cheap to compute and none of them require a model to have an opinion yet. Then route on the score. Good captures flow straight through. Marginal ones get automated repair first, deskew, denoise, binarize, which quietly rescues a surprising share. Genuinely bad ones do not enter the pipeline at all: they bounce back to the source with a specific, actionable reason, the way a bank's deposit app makes you retake the photo of a check before it will even say thank you. Your bank does not run a frontier model on your blurry first attempt. It refuses the blur.
The second half of the method is stratified measurement: report accuracy per quality band, never blended. That one change reframes every conversation that follows. The model stops being 82 percent. It becomes 98 on what it can see and a capture problem on the rest, and capture problems have owners, budgets, and fixes that cost less than any vendor migration. We built exactly this gate into a document platform whose error queue had been blamed on four different models in sequence; the queue dropped by more than half without touching the extraction layer, because the worst third of the inputs stopped being inputs.
Stratify the accuracy number once and the vendor debate usually ends the same week.
The fair pushback: sometimes you cannot bounce a document, because the counterparty sending it is a customer you will not inconvenience. True, and the gate handles it: those documents route to human review immediately, because at 61 percent, pretending is more expensive than reading.
Read your worst band
Pull twenty documents from your lowest-quality tier and open them next to the extraction output, side by side. Most teams have never inspected their own intake at its worst, and the reaction is usually a quiet reordering of the roadmap.
TensorLabs builds document pipelines from the capture gate forward, because that is where the accuracy ceiling gets set. If your extraction number has been stuck for two vendors in a row, write to us and describe what your documents look like on their worst day. That description usually contains the diagnosis.
You might also like
Keep reading from the journal.
July 15, 2026Engineering
Replace Tool Loops with GPT-5.6 Native Tool Calling
On July 9, 2026, OpenAI moved the GPT-5.6 family (Sol, Terra, and Luna) to general availability across ChatGPT, Codex, and the API, and the Responses API picked up the feature that matters most for builders: Programmatic Tool Calling.
July 13, 2026Engineering
A third of your ad spend reports to nobody
Server-side first-party collection makes the budget follow real numbers
July 13, 2026Extensions
You are paying to hire people you already employ
A canonical skills graph makes the payroll a queryable pipeline