Linekeeper

Every order line, checked.

Suppliers send PDFs. Linekeeper reads them, checks every line against your order, and flags only what's wrong. Confirm the exceptions and a clean record goes to your system.

Three of your own documents free, no card. The demos are always free, with no account.

No ad trackers, nothing sold, and your documents never train anything. Visits are counted with Cloudflare's cookie-free analytics. Privacy policy.

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

One real line, off one real supplier PDF, against PO-10432. The 39.00 was written on by hand.

Your supplier has no API. They send a PDF.

Someone checks each one by eye: quantities, prices, ship dates. Most match, so the time is wasted. The few that don't get caught late, as a short shipment or a price you never agreed to.

Text extractors pull the words off the page and stop. Linekeeper checks them against your order. On that document, two lines matched and never reached a person. The gasket line was $48 over and another line was missing, both caught before an invoice.

Four steps. A person touches only one of them.

Every document takes the same path from a supplier's inbox to your order book.

01

The document arrives

Upload it, or have suppliers email an intake address. Every file is kept and hashed.

02

It's read into fields

Every field, header to line items. Unclear values come back empty with a confidence score, never a guess.

03

It's matched against your order

Matched to your open order by PO number, row by row, within a tolerance you set.

04

You confirm the exceptions

Clean documents pass straight through. Only flagged lines need a look, and corrections are remembered for that supplier.

0
Demo documents, each from a different country, in a different currency
0
Purchasing and storefront platforms you can connect
$0.000
The lowest price per document, on the Volume plan
0%
Default price tolerance before a line is flagged

What a person actually sees.

Every row flagged, every field editable. A correction re-matches the document and teaches that 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.

Your order book fills itself.

Import orders from a CSV, paste them as JSON, or connect a purchasing system that already has them.

Cin7 CoreCin7 Core
KatanaKatana
UnleashedUnleashed
ShopifyShopify
BigCommerceBigCommerce
WooCommerceWooCommerce
EcwidEcwid
SquarespaceSquarespace
WixWix
Adobe CommerceAdobe Commerce

Cin7 Core, Katana and Unleashed bring your open orders. The rest lend their catalogue.

XeroXero
QuickBooksQuickBooks
MYOBMYOB

Connect your accounting system and each confirmed document goes straight in as a Bill. Volume plan.

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 the same shape of record 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.

$9 to $249per month, by document volume

Three free documents, no card, demos never count. One workspace, unlimited suppliers. If it doesn't save real time in the first week, don't pay.