Seven parsing platforms, one private dataset of 120,000 real invoices, and one metric almost nobody publishes: variance across document quality tiers.
We benchmark vendors for a living, sort of — customers ask "how do you compare to X" constantly, and until now our answer was honest but weak: "on our own test set we're better, obviously." So we built something better. This post is the full methodology and results, including the category where a competitor beat us by 2.4 points, because a benchmark that only ever crowns the author is a brochure.
120,000 real invoices from eleven customers who volunteered their documents (with sensitive fields tokenized, and their lawyers' blessing). We split by acquisition type, because that's what actually predicts parsing difficulty:
Ground truth was double-keyed by two annotation teams, with a third pass on disagreements. We paid for this properly — about 900 person-hours — because a benchmark is only as good as its labels, and disagreement between labelers (2.1% initially, 0.4% after adjudication) tells you where the whole task's ceiling is.
Seven platforms: ourselves, three commercial API competitors you've heard of, two cloud-provider services, and the strongest open-source pipeline we could assemble (OCR + layout model + rule-based extraction, tuned by two engineers over two weeks, which is more support than most open-source stacks ever get).
Anonymized names, honest numbers. Category is the acquisition tier; F1 is field-level across the full schema.
| Platform | Born-digital | Scan | Photo | Fax | Spread |
|---|---|---|---|---|---|
| unstructred (ours) | 0.996 | 0.991 | 0.972 | 0.958 | 0.038 |
| Competitor A | 0.994 | 0.955 | 0.931 | 0.902 | 0.092 |
| Competitor B | 0.989 | 0.948 | 0.927 | 0.911 | 0.078 |
| Cloud provider 1 | 0.991 | 0.940 | 0.905 | 0.884 | 0.107 |
| Competitor C | 0.981 | 0.933 | 0.918 | 0.895 | 0.086 |
| Open-source stack | 0.972 | 0.918 | 0.879 | 0.861 | 0.111 |
| Cloud provider 2 | 0.976 | 0.921 | 0.883 | 0.869 | 0.107 |
The pattern: everyone looks basically the same on born-digital PDFs. The field opens up the moment reality gets involved. The spread column is our favorite — the difference between a demo and a production system is almost entirely "how much worse does it get when the input is ugly."
Multi-column German financial statements. Not invoices, technically — the customers' AP teams process them the same way, so they were in the set. Competitor A's table reconstruction beat ours by 2.4 F1 points on these, mostly by handling a particular flavor of merged header cell that German ERP exports love. Our parser split those into ghost rows; theirs didn't.
We're shipping a fix (cell-level provenance landed in v2.3.0, and the column-span handling itself is in the next release). Until then, if your documents are mostly German financial statements, our honest advice is to look at Competitor A too. We'd rather you trust us on the other 95% of the corpus.
We were fastest at p50 (1.9s) and second at p95 (4.1s). Cloud provider 1 won p95 with aggressive batching at high concurrency. Latency differences at this level matter far less than accuracy differences, so we're not going to pretend otherwise with a bar chart.
The eleven customers who lent us documents took a real risk for the community's benefit. The annotation teams did unglamorous work to a standard most labs wouldn't fund. And Competitor A's team, when we told them they'd won a category, asked for our numbers so they could check their own weak spots. That's the right spirit, and it's why this industry is more fun than it looks.