Linehaul above the rate card
OpenRate card version 2 sets Linehaul at $5,343.60; billed $6,145.14.
Live demo
Every carrier charge checked against your rate card. AI reads the invoice; code does the math; a person approves.
97.4% overcharge recall on 98 synthetic test invoicesClaude first, measured November 2, 2026
Sample invoice 76644482
Bramblewood Express
Rate card version 2 sets Linehaul at $5,343.60; billed $6,145.14.
| On 98 synthetic test invoices | Claude firstNovember 2, 2026 | Free models onlyOctober 27, 2026 |
|---|---|---|
| Overcharge recall | 97.4%Met | 94.9%Met |
| Overcharge precision | 100%Met | 100%Met |
| Cost per invoice, paid-equivalent (digital / scanned) | $0.0079 / $0.0105Met | $0.0007 / $0.002Met |
Three steps, each one recorded in the audit trail the reviewer sees.
The invoice arrives, and the model reads it into structured lines.
Each line is matched to its shipment and checked against the rate card.
A reviewer approves or disputes each finding.
Until November 10, 2026, the live demo reads with Claude Sonnet first. See one sample invoice take each step.
Each card is a piece of the app, filled from the demo set's synthetic invoices.
Open the sample invoiceSample invoice 76644482, October 17, 2026, in seconds from receipt. Recorded before Claude first went live, so Gemini 3.5 Flash-Lite read it.
shipment has no miles
A job that uses up its retries waits with its error, ready to replay once the cause is fixed.
Each finding names its line and what it costs, before anyone pays.
$0.0105
per scanned invoice, Claude first, measured November 2, 2026
Per invoice at paid rates on 98 test invoices; the targets are $0.02 / $0.05.
finding = { type: 'rate_mismatch', expectedCents: rate, evidence };}if (amountCents > finding.expectedCents) discrepancies.push({ ...finding, lineNumber, billedCents: amountCents });if (code !== null) billed.add(code);The model only reads the invoice; plain code checks each charge against the rate card.
Each decision goes into the audit trail with its note, and an invoice is approved only once every finding is decided.
{ "headers": { "x-api-key": [Redacted], "cookie": [Redacted] } }The demo holds only generated invoices from fictional carriers, and every service redacts keys and cookies from what it logs.
98 synthetic invoices with known ground truth, read two ways. Claude first is Claude Sonnet 5.5 reading first, with the free models behind it (measured November 2, 2026). The free models alone are what CI checks on every change to extraction, and what reads once Claude's credits end (measured October 27, 2026).
| Metric | Target | Claude firstNovember 2, 2026 | Free models onlyOctober 27, 2026 |
|---|---|---|---|
| Header field accuracy (digital) | Target98% | Claude first, November 2, 2026100%Met | Free models only, October 27, 202699.4%Met |
| Header field accuracy (scanned) | Target93% | Claude first, November 2, 202693.4%Met | Free models only, October 27, 202694.3%Met |
| Line-item F1 (scanned) | Target0.88 | Claude first, November 2, 20260.968Met | Free models only, October 27, 20260.95Met |
| Overcharge recall | Target90% | Claude first, November 2, 202697.4%Met | Free models only, October 27, 202694.9%Met |
| Overcharge precision | Target95% | Claude first, November 2, 2026100%Met | Free models only, October 27, 2026100%Met |
| False flag rate | Target≤ 3% | Claude first, November 2, 20260%Met | Free models only, October 27, 20260%Met |
| Extraction latency p50 / p95 (3 pages or fewer) | Target≤ 5 s / 12 s | Claude first, November 2, 20262.9 s / 7.1 sMet | Free models only, October 27, 20262.4 s / 10.7 sMet |
| Cost per invoice, paid-equivalent (digital / scanned) | Target≤ $0.02 / $0.05 | Claude first, November 2, 2026$0.0079 / $0.0105Met | Free models only, October 27, 2026$0.0007 / $0.002Met |
On these runs Claude first is ahead on header field accuracy (digital), line-item F1 (scanned) and overcharge recall, and the free models alone on header field accuracy (scanned) and cost per invoice, paid-equivalent (digital / scanned).
Complete results with 95% confidence intervals are in the eval reports: Claude first and free models only.
Each claim links to the file that proves it.
Integer cents in pure functions, with no I/O. 5 property-based test suites run 1,000 cases each on a fixed seed.
k6 sent 6,000 uploads an hour, 3x the design rate: 1,083 accepted, 0 lost, upload p95 86 ms (October 15, 2026). Failed jobs retry, then wait in a replayable dead-letter queue.
OpenAPI and GraphQL schemas come before the code, with generated clients. Every pull request is checked for breaking REST changes against its base.
20 of the 98 golden invoices run on every pull request that changes extraction, against quality floors; all 98 run weekly.
evals/golden/v2/manifest.json.github/workflows/nightly-eval.yml
OpenTelemetry follows each upload across the API, the queue and every model call, into a Grafana dashboard with alert rules.
gitleaks scans every commit, in CI and in the pre-commit hook. The browser never calls the API, and only synthetic data reaches model providers.
Built with TypeScript, Fastify, GraphQL Yoga, BullMQ, Redis, PostgreSQL, Drizzle, MinIO, Next.js, Playwright, OpenTelemetry, Grafana, k6, Gemini, Groq, Claude.
Open the live demo and decide a finding yourself.
Open the demo