Guide

Why AI agents get tables wrong — and what to do instead

Hand a model a screenshot of a table and it will return something table-shaped. Some rows will be merged, some will be missing, and a few numbers will belong to the wrong column — and none of that is visible in the output, because the output still looks like a table. The failure is not the model. It is that the file already knew the answer and somebody threw it away.

By Stipple Research10 min readUpdated 28 August 2026
Key takeaways
  • A native PDF records the position of every word. Rasterising it to an image discards that, then asks a model to infer from pixels what the file already stated exactly.
  • The failure is invisible. A dropped row or a value shifted one column left still produces well-formed output, so nothing downstream can tell that it is wrong.
  • Reading the PDF’s own geometry is deterministic and repeatable: the same document returns the same table every time, with no model call for the table pass.
  • Scans and photographs have no geometry to read. They fall back to a vision model, return rows without cell coordinates, and the result says which path it took.
  • Merged cells are the honest edge: a vertical merge is reported as rowspan 1 rather than guessed at.
  • Ask any extraction tool three questions: what does it do on a scan versus a native PDF, what does it explicitly NOT detect, and which of its features has it actually measured.
  • A capability that has not been measured should say so. Four of our ten options are marked unmeasured in the machine-readable contract.
Evidence path
  1. 01

    What actually goes wrong

    Start with the material.

  2. 02

    What rasterising throws away

    Add one more signal.

  3. 03

    Reading the geometry instead

    Add one more signal.

  4. 04

    When there is no geometry

    Add one more signal.

  5. 05

    The capability contract

    Add one more signal.

  6. 06

    What it will not do

    Add one more signal.

  7. 07

    How to test any tool

    Make a careful call.

01

What actually goes wrong

Short answer

The output is well-formed and quietly incorrect. Rows merge, rows vanish, and values land one column left — and none of it is detectable from the result.

Give an agent a table and ask for the line items. It returns JSON. The JSON parses, the keys are right, the numbers look like numbers. The pipeline continues. Nothing raises an error, because nothing went wrong in a way software can notice.

What went wrong is in the content. Two rows with a shared cell became one row. A row whose text sat slightly low against a rule got dropped. A column with a blank cell shifted every value in that row one position left, so the amount is now sitting under the tax column. Each of those produces output that is structurally perfect and factually wrong.

This is the specific danger of table work for agents, as opposed to prose. A model that misreads a sentence usually produces something visibly odd. A model that misreads a table produces a table. The failure has no signature, so it propagates — into a reconciliation, a total, a decision — and surfaces much later as a number nobody can explain.

02

What rasterising throws away

Short answer

A native PDF is not a picture. It is a set of instructions recording exactly where every word is placed. Converting it to an image deletes that, permanently.

A PDF stores glyphs with coordinates. For every word on the page the file knows its position, its size and its font. Columns are not something a reader infers from a PDF — they are a consequence of x-coordinates that the document states outright.

Rasterising renders those instructions into a grid of pixels and discards the instructions. The column boundary that was an exact number becomes something to be inferred from whitespace. The row that was a y-coordinate becomes an alignment judgement. Every question the file could answer precisely is converted into a question that must be estimated.

And that is the standard pipeline: PDF, to image, to vision model, to JSON. Each step is reasonable on its own and the sequence throws away the answer before asking the question. Improving the model at the end does not recover the coordinates deleted at the start — it just produces a more confident estimate of something that was known exactly two steps earlier.

03

Reading the geometry instead

Short answer

On a native PDF the table pass reads the document’s own word positions, offline and deterministically. No model call, no inference, and the same document returns the same table every time.

The table extraction reads the PDF’s word geometry directly. Column boundaries come from the x-coordinates the file already records; rows come from y-coordinates; a merged cell that spans two columns is read as spanning two columns because the geometry says so, not because a model decided it looked that way.

Two properties follow, and both matter more than accuracy claims. It is DETERMINISTIC: the same file produces the same table on every run, which means a discrepancy in your pipeline is a real change in the document rather than sampling noise. And it is FREE of a model call for the table pass, which is why it can run on every page rather than only where somebody is willing to pay for a vision call.

Tables come back as JSON rows with a header, and optionally as markdown or HTML, with cell geometry available. The geometry is the part worth keeping: it lets a reviewer jump from an extracted number straight to the region of the page it came from, which turns a disputed figure into a thirty-second check instead of a re-read.

Native PDFScan or photograph
Where columns come fromThe file’s own x-coordinatesInferred by a vision model
Cell geometryExact, returned with the resultNone — rows only
Merged cellsReal colspans from the geometryNot reconstructed
RepeatabilityDeterministic — identical every runModel output, varies
Model call for the table passNoneRequired
04

When there is no geometry

Short answer

A scan or a photo has no word coordinates to read, so it falls back to a vision model — rows without cell geometry, and the result says that is what happened.

Somebody photographs a payslip on their desk, or a document arrives as a flatbed scan. There are no glyph coordinates in a picture of a page; there is only the picture. The deterministic path is not available, and pretending otherwise would be the worst possible answer.

So the fallback is explicit. A vision model reads the table and returns rows. There is no cell geometry, because there is nothing to derive it from. The response records which path ran, so a caller can distinguish "exact, from the file" from "read from an image" rather than treating both as the same fact.

That distinction is the whole point. A pipeline that silently degrades from measurement to estimation, and reports both identically, has removed the one signal that would let a reviewer know when to look harder.

05

The capability contract

Short answer

A free, machine-readable declaration of every option: what it accepts, what it returns, how it behaves on scans, what it explicitly does not detect, and whether it has been measured.

An agent should not have to discover a tool’s limits by trial and error, and it should not have to trust prose. So the capability list is an endpoint rather than a page: free, no key, and machine-readable.

Ten options are available and seven more are planned. Asking for a planned one returns an error naming it — never a silent no-op, which is the failure mode that quietly produces incomplete output for months before anybody notices. An agent can read the contract, see that an option is not available yet, and plan around it.

Two things in that contract are unusual enough to point at. Every option carries a `not_detected` list — the things it deliberately does not do. For tables that reads: vertical merges are reported as rowspan 1 rather than guessed, and a table split across pages with no repeated header is not stitched. For layout: heading levels come from a font-size heuristic, and more than two columns is not modelled.

And every option carries a `measured` flag. Six of the ten are marked measured. Four are marked not — including tables, the flagship. That is uncomfortable to publish and it is the correct thing to publish: an unmeasured capability that claims measurement is how a tool ends up trusted for something nobody ever tested.

06

What it will not do

Short answer

Vertical merges, cross-page tables without a repeated header, more than ten pages, and anything on a scan that needs coordinates.

VERTICAL MERGES ARE NOT RECONSTRUCTED. A cell spanning three rows is reported as rowspan 1. Guessing the span is possible and would be wrong often enough to poison the rows around it, so the honest answer is the flat one, declared in the contract rather than discovered in production.

CROSS-PAGE TABLES ARE NOT STITCHED unless the header repeats. Without a repeated header there is no reliable way to know that the rows on page four continue the table on page three, as opposed to starting a new one.

THE PAGE LIMIT IS TEN, with fifty fields per call and up to twenty tables of two hundred rows each. These are bounds, not targets — a request past them is rejected rather than silently truncated, because a truncated extraction that looks complete is the same class of failure as a misread column.

AND EXTRACTION IS NOT VERIFICATION. The values returned are what the document shows. Whether the document is genuine is a different question, answered by a different set of checks — a fabricated invoice extracts perfectly.

07

How to test any extraction tool

Short answer

Three questions, all answerable in an afternoon, and all more informative than a published accuracy figure.

ONE: give it the same document twice, once as the native PDF and once as a photograph of the same page. If the two results are identical in quality, the tool is rasterising the PDF and discarding the geometry. If the PDF result is better AND the response says why, it is reading the file.

TWO: ask what it does not detect. A tool that cannot answer has not looked closely at its own edges, and a tool that answers in general terms is answering about the category rather than about itself. Merged cells and cross-page tables are the two that separate careful implementations from confident ones.

THREE: ask which features have been measured, and against what. "Measured" should mean a corpus, a method and a number that somebody could disagree with. Anything else is a claim about intent.

We have not run anyone else’s extraction tool, so this page contains no comparison table. Publishing accuracy numbers for products we have not tested would be exactly the kind of claim the three questions above are designed to catch.

Questions

Frequently asked questions

Why do AI agents get tables wrong?

Because they are usually handed a picture of the table rather than the file. A native PDF records the exact position of every word, so columns are stated rather than inferred. Rasterising to an image deletes those coordinates and forces the model to estimate boundaries from pixels — and the estimate produces well-formed output whether it is right or wrong.

How do I extract a table from a PDF reliably?

Read the PDF’s own word geometry instead of an image of the page. On a native PDF that is deterministic and repeatable — the same file returns the same table every run. Keep the cell coordinates with the result so a disputed value can be traced back to its place on the page.

What happens with a scanned document?

There are no word coordinates in a picture, so a vision model reads it and returns rows without cell geometry. The response says which path ran, so you can tell an exact read from an estimated one rather than treating them as the same fact.

Are merged cells handled?

Horizontal merges are, because the geometry states them. Vertical merges are not reconstructed — a cell spanning three rows is reported as rowspan 1 rather than guessed. That is declared in the capability contract rather than left to be discovered.

How do I know what an extraction API can actually do?

Read its capability contract if it has one. Ours is a free endpoint listing every option, what it accepts, how it behaves on scans versus native PDFs, what it explicitly does not detect, and whether it has been measured. Requesting an unavailable option returns an error naming it rather than quietly doing nothing.

Does extraction tell me the document is genuine?

No. Extraction reports what the document shows; a fabricated invoice extracts perfectly. Whether a document has been tampered with is a separate question answered by forensic checks, not by reading its values.

Sources

Sources and further reading

  1. 01Developer recipe — bank-statement tables, with schemas
  2. 02Developer recipe — invoice line items and GST
  3. 03API reference — /v1/extract and its capability contract
  4. 04How document fraud detection works — extraction is not verification

Educational guidance, not a forensic certification. Detection technologies and standards change; review material decisions against current evidence.

Try it on a real table

Upload a PDF with a table nobody wants to retype. You get the rows, the header, the page each value came from, and — on a native PDF — the exact cell geometry behind every number.

Open the extractor