Linekeeper

Every order line, checked.

A supplier sends a PO confirmation, invoice, or quote as a PDF. Linekeeper reads it, matches every line against your open order, and surfaces only the lines that don't agree. A person confirms the exceptions — a clean structured record goes to your system.

Open the app See how it works Walk the whole flow on a built-in demo document.

The problem

Your supplier has no API. They send a PDF.

Someone on your team opens every confirmation, reads down the lines, and checks them by eye against what was ordered — quantities, unit prices, the promised ship date. Most of the time it all matches and the work was pointless. When it doesn't match, catching it late means a short shipment, a price you never agreed to, or a re-key error that rides the order all the way through.

Text extractors and Zapier-style flows pull the words off the page. They don't do the part that matters — reconcile the document against the order it belongs to, and tell you what changed.

A worked line

This is the whole job.

One line off a supplier's PDF, set against the matching line on your order PO-10432.

GSK-22 — gasket set, vitonqty 12
SourceUnit priceLine totalVerdict
Your order35.00420.00expected
Their PDF39.00468.00PRICE_MISMATCH

The other three lines on this order matched and never reached a person. This one did — a $48 difference that would otherwise have been found at invoice time, or not at all.

The review screen

What a person actually sees.

The whole document, with the two rows that need attention marked. Every field here is editable — correcting one re-matches the document and teaches this supplier's layout.

Supplier document KC-88213-confirmation.pdf
order_confirmation
PO-10432
Kaimai Components Ltd
NZD
2026-09-09
0.74

TOTAL_MISMATCH LOW_CONFIDENCE_LINE

MatchSKUDescription QtyUnitLine total
OKBRK-14A Bracket, 14mm, zinc406.50260.00
PRICE_MISMATCHGSK-22 Gasket set, viton12 39.00exp 35.00468.00
OKPLT-09 Cover plate, powder-coated869.50556.00
MISSING_IN_DOCSHM-03 Shim, 0.5mm stainless exp 100 @ 0.80
Confirm Reject Note from the reader: unit price on line 2 was handwritten.

Two of four lines need a person. The other two are already done.

How it works

Four steps. A person only touches the last one.

01

The document arrives

Upload the PDF, or have the supplier reply to an intake address and it lands on its own. Every file is kept and addressable by hash.

02

It's read into fields

PO number, supplier, currency, totals, promised ship date, and every line — SKU, description, quantity, unit price. Illegible fields come back empty with a confidence score, not a guess.

03

It's matched against your order

Linekeeper finds the open order by PO number, lines up each row by SKU — falling back to description when the codes don't agree — and compares quantity, price, and totals within a tolerance you set.

04

You confirm the exceptions

Clean documents pass straight through. Only the ones with a flagged line need a look. Edit anything on screen — your correction re-matches the document and is remembered for that supplier.

What you see

The flags are the product.

Every line lands in one of these. Green passes without you. Amber and red are the only rows that need a person.

OK QTY_MISMATCH PRICE_MISMATCH LOW_CONFIDENCE MISSING_IN_DOC UNEXPECTED_IN_DOC PO_UNMATCHED TOTAL_MISMATCH CURRENCY_MISMATCH

On confirm, your system gets one record with the same shape every time — whatever the PDF looked like:

{
  "po_number": "PO-10432",
  "supplier": "Kaimai Components Ltd",
  "matched_order_id": "ord_e0185346d66f",
  "currency": "NZD",
  "promised_ship_date": "2026-09-09",
  "totals": { "subtotal": 1284.00, "tax": 192.60, "grand_total": 1521.60 },
  "lines": [
    { "sku": "GSK-22", "quantity": 12, "unit_price": 39.00,
      "match": "PRICE_MISMATCH", "expected": { "unit_price": 35.00 } }
  ],
  "exceptions": ["TOTAL_MISMATCH"],
  "match_status": "NEEDS_REVIEW",
  "review_status": "confirmed"
}

Pull it from GET /api/export/:id, or have it posted to your webhook the moment someone clicks confirm. Payload reference.

Who it's for

Drop-shippers and distributors

Dozens of supplier confirmations a week, every one a slightly different layout, every one checked by hand.

Small manufacturers

Buying components against POs, where a wrong quantity on line 7 becomes a line-down problem three weeks later.

Pricing

$50–200per month, by document volume

One workspace, unlimited suppliers, the full pipeline. If it doesn't save someone real time in the first week, it isn't for you and you don't pay.

What it doesn't do yet

Stated plainly.

  • One order per documentNo partial shipments, multi-PO documents, or back-order splits.
  • Single workspaceNo multi-tenant accounts or per-user roles.

The full list, and what's next, is on the changelog.