Skip to main content

Demo · synthetic data · Document operations

12 vendor PDFs in,checked rows out.

Demo. Every document here is fake and was made by us. The results come from one real run of claude-haiku-4-5-20251001 on Oct 12, 2026, saved and shown as they came back. Nothing on this page calls a model.

Inbox (demo)

Demo · synthetic data

The sample documents in the order they arrived. Pick one to see what was read from it and why it went where it did.
FileVendorReceivedStatusScore
Quillfeather Supply Co.Oct 1, 9:05 AM CTAuto-approved100
Larkmoor Parts Ltd.Oct 2, 10:40 AM CTAuto-approved100
Brindlewick FreightOct 2, 4:20 PM CTAuto-approved100
Quillfeather Supply Co.Oct 5, 10:10 AM CTNeeds review40
Larkmoor Parts Ltd.Oct 5, 2:30 PM CTNeeds review80
Quillfeather Supply Co.Oct 6, 8:55 AM CTNeeds review40
Brindlewick FreightOct 6, 1:15 PM CTNeeds review85
Wrenfield ServicesOct 7, 11:00 AM CTNeeds review75
Larkmoor Parts Ltd.Oct 7, 3:45 PM CTNeeds review85
Brindlewick Freight (fictional)Oct 8, 10:25 AM CTAuto-approved100
UnreadOct 8, 2:50 PM CTExtraction failedn/a
Larkmoor Parts Ltd.Oct 9, 9:05 AM CTNeeds review40

Document detail (demo)

Demo · synthetic data

Supplies invoice

01-quillfeather-qs-1001.pdf

Status

Auto-approved

Pages

1

Received

Oct 1, 9:05 AM CT

Planted defect

None (clean invoice).

Open the PDF (new tab)

What was read

FieldValueSnippet the model quoted
VendorQuillfeather Supply Co.Quillfeather Supply Co. (fictional)
Invoice numberQS-1001Invoice no. QS-1001
Invoice date2026-09-14Invoice date: Sep 14, 2026
Due date2026-10-14Due date: Oct 14, 2026
PO numberPO-2026-0141PO: PO-2026-0141
Subtotal304.30Subtotal $304.30
Tax24.34Tax (8%) $24.34
Total328.64Total due $328.64
Line items3Nitrile gloves, case of 100 4 48.50 194.00

Checks

  • passThe document is an invoice. Read as an invoice.
  • passRequired fields present. Vendor, invoice number, date, total and line items found.
  • passLine items add up to the subtotal. Lines add up to $304.30.
  • passSubtotal plus tax equals the total. $304.30 + $24.34 tax = $328.64.
  • passNot a duplicate of an earlier invoice. No earlier invoice with this vendor and number.
  • passVendor is on the vendor list. On the vendor list (5010 Supplies).
  • passPO number matches an open purchase order. PO-2026-0141 is an open PO.
  • passTax rate between 0% and 12%. Tax rate 8.0%.
  • passDue date after the invoice date, within 120 days. Due 30 days after the invoice date.
  • passInvoice date is not in the future. Dated on or before the run.
  • passEach value appears in the snippet the model quoted. Every value appears in the snippet the model quoted (a check of the model's own snippet, not the PDF text).

Score 100 of 100

Our arithmetic, not the model's opinion of itself: start at 100, take off each warning's points, and cap at 40 if any check fails. 90 or more with no fail is approved without a person; anything lower waits for review.

  • 100 start
  • = 100

Review queue (demo)

Demo · synthetic data

Anything that fails a check or can't be read waits here, and nothing from it is posted. Approve, correct a field, or reject. This review runs only in your browser: nothing is sent or saved, and reloading the page resets it.
Needs review · score 40
  • Fail: Lines add up to $313.80, but the subtotal says $331.80.
Fix the failing check or reject it
Needs review · score 80
  • Warning: Tax rate 15.0% is outside 0% to 12%.
Needs review · score 40
  • Fail: Invoice QS-1001 from this vendor was already received.
Fix the failing check or reject it
Needs review · score 85
  • Warning: No PO number on the invoice.
Needs review · score 75
  • Warning: Wrenfield Services is not on the vendor list.
Needs review · score 85
  • Warning: Due date is 15 days before the invoice date.
Extraction failed
  • The model could not read the page.
Nothing to approve: reject it
Needs review · score 40
  • Fail: The model read this as a statement, not an invoice. Nothing is posted from it.
Fix the failing check or reject it

Rows (demo)

Demo · synthetic data

One row per line item from every approved document, coded to an account from the demo vendor list. This is what would land in your books.
DateVendorInvoice no.POAccountDescriptionQtyUnit priceAmountTaxCurrencySource fileDoc status
2026-09-14Quillfeather Supply Co.QS-1001PO-2026-01415010 SuppliesNitrile gloves, case of 100448.50194.0015.52USD01-quillfeather-qs-1001.pdfAuto-approved
2026-09-14Quillfeather Supply Co.QS-1001PO-2026-01415010 SuppliesShop towels, pack of 25612.2573.505.88USD01-quillfeather-qs-1001.pdfAuto-approved
2026-09-14Quillfeather Supply Co.QS-1001PO-2026-01415010 SuppliesZip ties, 11 in, bag of 500218.4036.802.94USD01-quillfeather-qs-1001.pdfAuto-approved
2026-09-16Larkmoor Parts Ltd.LP-2207PO-2026-01525020 Repair partsCapacitor, 45/5 MFD321.9065.704.11USD02-larkmoor-lp-2207.pdfAuto-approved
2026-09-16Larkmoor Parts Ltd.LP-2207PO-2026-01525020 Repair partsContactor, 2-pole 30A234.7569.504.34USD02-larkmoor-lp-2207.pdfAuto-approved
2026-09-18Brindlewick FreightBF-5530PO-2026-01635300 Freight inLTL freight, Demo City to warehouse1286.00286.000.00USD03-brindlewick-bf-5530.pdfAuto-approved
2026-09-18Brindlewick FreightBF-5530PO-2026-01635300 Freight inLiftgate delivery165.0065.000.00USD03-brindlewick-bf-5530.pdfAuto-approved
2026-10-01Brindlewick Freight (fictional)BF-5550PO-2026-01855300 Freight inPallet move, stop 1 (dock A)142.5042.500.00USD10-brindlewick-bf-5550.pdfAuto-approved
2026-10-01Brindlewick Freight (fictional)BF-5550PO-2026-01855300 Freight inPallet move, stop 2 (dock B)249.7599.500.00USD10-brindlewick-bf-5550.pdfAuto-approved
2026-10-01Brindlewick Freight (fictional)BF-5550PO-2026-01855300 Freight inPallet move, stop 3 (dock C)357.00171.000.00USD10-brindlewick-bf-5550.pdfAuto-approved
2026-10-01Brindlewick Freight (fictional)BF-5550PO-2026-01855300 Freight inPallet move, stop 4 (dock D)164.2564.250.00USD10-brindlewick-bf-5550.pdfAuto-approved
2026-10-01Brindlewick Freight (fictional)BF-5550PO-2026-01855300 Freight inPallet move, stop 5 (dock E)271.50143.000.00USD10-brindlewick-bf-5550.pdfAuto-approved
2026-10-01Brindlewick Freight (fictional)BF-5550PO-2026-01855300 Freight inPallet move, stop 6 (dock F)342.50127.500.00USD10-brindlewick-bf-5550.pdfAuto-approved
2026-10-01Brindlewick Freight (fictional)BF-5550PO-2026-01855300 Freight inPallet move, stop 7 (dock A)149.7549.750.00USD10-brindlewick-bf-5550.pdfAuto-approved
2026-10-01Brindlewick Freight (fictional)BF-5550PO-2026-01855300 Freight inPallet move, stop 8 (dock B)257.00114.000.00USD10-brindlewick-bf-5550.pdfAuto-approved
2026-10-01Brindlewick Freight (fictional)BF-5550PO-2026-01855300 Freight inPallet move, stop 9 (dock C)364.25192.750.00USD10-brindlewick-bf-5550.pdfAuto-approved
2026-10-01Brindlewick Freight (fictional)BF-5550PO-2026-01855300 Freight inPallet move, stop 10 (dock D)171.5071.500.00USD10-brindlewick-bf-5550.pdfAuto-approved
2026-10-01Brindlewick Freight (fictional)BF-5550PO-2026-01855300 Freight inPallet move, stop 11 (dock E)242.5085.000.00USD10-brindlewick-bf-5550.pdfAuto-approved
2026-10-01Brindlewick Freight (fictional)BF-5550PO-2026-01855300 Freight inPallet move, stop 12 (dock F)349.75149.250.00USD10-brindlewick-bf-5550.pdfAuto-approved
2026-10-01Brindlewick Freight (fictional)BF-5550PO-2026-01855300 Freight inPallet move, stop 13 (dock A)157.0057.000.00USD10-brindlewick-bf-5550.pdfAuto-approved
2026-10-01Brindlewick Freight (fictional)BF-5550PO-2026-01855300 Freight inPallet move, stop 14 (dock B)264.25128.500.00USD10-brindlewick-bf-5550.pdfAuto-approved
2026-10-01Brindlewick Freight (fictional)BF-5550PO-2026-01855300 Freight inPallet move, stop 15 (dock C)371.50214.500.00USD10-brindlewick-bf-5550.pdfAuto-approved
2026-10-01Brindlewick Freight (fictional)BF-5550PO-2026-01855300 Freight inPallet move, stop 16 (dock D)142.5042.500.00USD10-brindlewick-bf-5550.pdfAuto-approved
2026-10-01Brindlewick Freight (fictional)BF-5550PO-2026-01855300 Freight inPallet move, stop 17 (dock E)249.7599.500.00USD10-brindlewick-bf-5550.pdfAuto-approved
2026-10-01Brindlewick Freight (fictional)BF-5550PO-2026-01855300 Freight inPallet move, stop 18 (dock F)357.00171.000.00USD10-brindlewick-bf-5550.pdfAuto-approved
2026-10-01Brindlewick Freight (fictional)BF-5550PO-2026-01855300 Freight inPallet move, stop 19 (dock A)164.2564.250.00USD10-brindlewick-bf-5550.pdfAuto-approved
2026-10-01Brindlewick Freight (fictional)BF-5550PO-2026-01855300 Freight inPallet move, stop 20 (dock B)271.50143.000.00USD10-brindlewick-bf-5550.pdfAuto-approved
2026-10-01Brindlewick Freight (fictional)BF-5550PO-2026-01855300 Freight inPallet move, stop 21 (dock C)342.50127.500.00USD10-brindlewick-bf-5550.pdfAuto-approved
2026-10-01Brindlewick Freight (fictional)BF-5550PO-2026-01855300 Freight inPallet move, stop 22 (dock D)149.7549.750.00USD10-brindlewick-bf-5550.pdfAuto-approved
2026-10-01Brindlewick Freight (fictional)BF-5550PO-2026-01855300 Freight inPallet move, stop 23 (dock E)257.00114.000.00USD10-brindlewick-bf-5550.pdfAuto-approved
2026-10-01Brindlewick Freight (fictional)BF-5550PO-2026-01855300 Freight inPallet move, stop 24 (dock F)364.25192.750.00USD10-brindlewick-bf-5550.pdfAuto-approved
2026-10-01Brindlewick Freight (fictional)BF-5550PO-2026-01855300 Freight inPallet move, stop 25 (dock A)171.5071.500.00USD10-brindlewick-bf-5550.pdfAuto-approved
2026-10-01Brindlewick Freight (fictional)BF-5550PO-2026-01855300 Freight inPallet move, stop 26 (dock B)242.5085.000.00USD10-brindlewick-bf-5550.pdfAuto-approved
2026-10-01Brindlewick Freight (fictional)BF-5550PO-2026-01855300 Freight inPallet move, stop 27 (dock C)349.75149.250.00USD10-brindlewick-bf-5550.pdfAuto-approved
2026-10-01Brindlewick Freight (fictional)BF-5550PO-2026-01855300 Freight inPallet move, stop 28 (dock D)157.0057.000.00USD10-brindlewick-bf-5550.pdfAuto-approved
2026-10-01Brindlewick Freight (fictional)BF-5550PO-2026-01855300 Freight inPallet move, stop 29 (dock E)264.25128.500.00USD10-brindlewick-bf-5550.pdfAuto-approved
2026-10-01Brindlewick Freight (fictional)BF-5550PO-2026-01855300 Freight inPallet move, stop 30 (dock F)371.50214.500.00USD10-brindlewick-bf-5550.pdfAuto-approved
2026-10-01Brindlewick Freight (fictional)BF-5550PO-2026-01855300 Freight inPallet move, stop 31 (dock A)142.5042.500.00USD10-brindlewick-bf-5550.pdfAuto-approved
2026-10-01Brindlewick Freight (fictional)BF-5550PO-2026-01855300 Freight inPallet move, stop 32 (dock B)249.7599.500.00USD10-brindlewick-bf-5550.pdfAuto-approved
2026-10-01Brindlewick Freight (fictional)BF-5550PO-2026-01855300 Freight inPallet move, stop 33 (dock C)357.00171.000.00USD10-brindlewick-bf-5550.pdfAuto-approved
2026-10-01Brindlewick Freight (fictional)BF-5550PO-2026-01855300 Freight inPallet move, stop 34 (dock D)164.2564.250.00USD10-brindlewick-bf-5550.pdfAuto-approved

Dashboard (demo)

Demo · synthetic data

Counted from the saved results and your review on this page, each time the page renders. No figure here is typed in by hand.

Documents

12

Auto-approved by the checks

4

Reviewed on this page

0

Waiting for review

8

Rows exported

41

Value approved

$4,620.54

Model cost for the whole run

$0.0711 (29,874 input, 8,245 output tokens)

Checks that did not pass

How many documents did not pass each check (a fail or a warning). One document can trip more than one.

  • Due date after the invoice date, within 120 days: 1
  • Line items add up to the subtotal: 1
  • Not a duplicate of an earlier invoice: 1
  • PO number matches an open purchase order: 1
  • Tax rate between 0% and 12%: 1
  • The document is an invoice: 1
  • The page could be read: 1
  • Vendor is on the vendor list: 1

Webhook (demo)

Demo · synthetic data

Each auto-approved document's rows are posted as one signed JSON payload to the next system. Simulated delivery: nothing leaves this page. The first attempt below gets HTTP 500 and is retried, so you can see a failure handled instead of hidden.

Header

X-Demo-Signature

Signature

t=<unix seconds>,v1=<hex HMAC-SHA256 of `${t}.${body}` keyed with demo-key-not-secret>

Key (public, demo only)

demo-key-not-secret

Delivery log (simulated)

TimeDocumentAttemptResult
Oct 12, 5:00 PM CT01-quillfeather-qs-1001.pdf1HTTP 500 failed · retry in 30s
Oct 12, 5:01 PM CT01-quillfeather-qs-1001.pdf2HTTP 200 delivered
Oct 12, 5:00 PM CT02-larkmoor-lp-2207.pdf1HTTP 200 delivered
Oct 12, 5:00 PM CT03-brindlewick-bf-5530.pdf1HTTP 200 delivered
Oct 12, 5:03 PM CT10-brindlewick-bf-5550.pdf1HTTP 200 delivered

Payload for 01-quillfeather-qs-1001.pdf

X-Demo-Signature: t=1791842439,v1=40f224a1fdfc4dbe7fe8b2477154916a1cda1854b80059c2d8fd2f4f311420dc

{
  "demo": true,
  "event": "row.exported",
  "doc": "01-quillfeather-qs-1001",
  "rows": [
    {
      "date": "2026-09-14",
      "vendor": "Quillfeather Supply Co.",
      "invoiceNumber": "QS-1001",
      "po": "PO-2026-0141",
      "account": "5010 Supplies",
      "description": "Nitrile gloves, case of 100",
      "qty": 4,
      "unitPrice": 48.5,
      "amount": 194,
      "tax": 15.52,
      "currency": "USD",
      "sourceFile": "01-quillfeather-qs-1001.pdf",
      "docStatus": "auto_approved"
    },
    {
      "date": "2026-09-14",
      "vendor": "Quillfeather Supply Co.",
      "invoiceNumber": "QS-1001",
      "po": "PO-2026-0141",
      "account": "5010 Supplies",
      "description": "Shop towels, pack of 25",
      "qty": 6,
      "unitPrice": 12.25,
      "amount": 73.5,
      "tax": 5.88,
      "currency": "USD",
      "sourceFile": "01-quillfeather-qs-1001.pdf",
      "docStatus": "auto_approved"
    },
    {
      "date": "2026-09-14",
      "vendor": "Quillfeather Supply Co.",
      "invoiceNumber": "QS-1001",
      "po": "PO-2026-0141",
      "account": "5010 Supplies",
      "description": "Zip ties, 11 in, bag of 500",
      "qty": 2,
      "unitPrice": 18.4,
      "amount": 36.8,
      "tax": 2.94,
      "currency": "USD",
      "sourceFile": "01-quillfeather-qs-1001.pdf",
      "docStatus": "auto_approved"
    }
  ],
  "signature": {
    "header": "X-Demo-Signature",
    "scheme": "t=<unix seconds>,v1=<hex HMAC-SHA256 of `${t}.${body}` keyed with demo-key-not-secret>",
    "key": "demo-key-not-secret"
  }
}

Audit log (demo)

Demo · synthetic data

Every step for the selected document, oldest first. Entries are only ever added: there is no edit or delete.

01-quillfeather-qs-1001.pdf

  1. Oct 1, 9:05 AM CTReceived 01-quillfeather-qs-1001.pdf (1 page).
  2. Oct 12, 5:00 PM CTExtracted by claude-haiku-4-5-20251001, prompt v1, 2336 in / 607 out tokens, $0.0054.
  3. Oct 12, 5:00 PM CTPASS · The document is an invoice: Read as an invoice.
  4. Oct 12, 5:00 PM CTPASS · Required fields present: Vendor, invoice number, date, total and line items found.
  5. Oct 12, 5:00 PM CTPASS · Line items add up to the subtotal: Lines add up to $304.30.
  6. Oct 12, 5:00 PM CTPASS · Subtotal plus tax equals the total: $304.30 + $24.34 tax = $328.64.
  7. Oct 12, 5:00 PM CTPASS · Not a duplicate of an earlier invoice: No earlier invoice with this vendor and number.
  8. Oct 12, 5:00 PM CTPASS · Vendor is on the vendor list: On the vendor list (5010 Supplies).
  9. Oct 12, 5:00 PM CTPASS · PO number matches an open purchase order: PO-2026-0141 is an open PO.
  10. Oct 12, 5:00 PM CTPASS · Tax rate between 0% and 12%: Tax rate 8.0%.
  11. Oct 12, 5:00 PM CTPASS · Due date after the invoice date, within 120 days: Due 30 days after the invoice date.
  12. Oct 12, 5:00 PM CTPASS · Invoice date is not in the future: Dated on or before the run.
  13. Oct 12, 5:00 PM CTPASS · Each value appears in the snippet the model quoted: Every value appears in the snippet the model quoted (a check of the model's own snippet, not the PDF text).
  14. Oct 12, 5:00 PM CTRouted to auto-approved with score 100.
  15. Oct 12, 5:00 PM CTExported 3 rows.
  16. Oct 12, 5:00 PM CTWebhook attempt 1: HTTP 500, retry in 30s (simulated delivery).
  17. Oct 12, 5:01 PM CTWebhook attempt 2: HTTP 200 (simulated delivery).

What this demo proves.

The problem

Bills arrive as PDFs in an inbox. Someone retypes them, and a wrong total or a bill paid twice shows up a month later, if at all.

What is built

A model reads each PDF into fixed fields and quotes where it found each one. Fixed rules check the math, the vendor, the PO and the dates. Our score, not the model's, decides: clean bills post, anything off waits for a person. Approved bills become rows, a signed webhook, and a log you can read.

Nothing that fails a check sends without your OK

A failed check, a low score or an unreadable page never posts. It waits in the review queue with the reason in plain words.

For your bills

A real setup swaps in your inbox, your vendor list and account codes, and your accounting system in place of the demo table. The checks and the review step stay.

What it is not

A product you can upload to. Visitors can't send files here, and no client uses this demo. The snippet check only compares each value with the snippet the model quoted, not with the PDF's own text.

  • Next.js
  • TypeScript
  • Claude (Anthropic API)
  • Zod
  • React PDF
  • Vitest
  • Playwright

Sample documents generated by STWLTH, a trade name of MXLIS1040 LLC. Every vendor, address and number in them is fictional.

Want this for your bills.

Two or three sentences is plenty: the launch, the system, the thing still done by hand. You'll hear back from the founder, not a sequence.

Prefer email · admin@stwlth.com

No newsletter. No sales sequence.