Skip to main content

Invoice discrepancy checker

Paste the lines from a purchase order, a goods receipt and the supplier invoice. This checker compares all three line by line and reports every discrepancy it finds: price variance, quantity variance, over-invoicing, lines billed with no PO, and goods billed but never received. It is free, needs no signup, and runs entirely in your browser.

Nothing is uploaded. The whole calculation runs in your browser. No line, price, quantity or supplier name is sent to any server, and the tool area is excluded from analytics capture. You can disconnect from the internet and it will still work.

Checker

1. Purchase order

What you ordered, at the agreed unit price.

Item / SKUQtyUnit priceActions

2. Goods receipt

What actually arrived at the dock.

Item / SKUQty receivedActions

3. Invoice

What the supplier is billing you for.

Item / SKUQtyUnit priceActions

Tolerances

Example values, not an accounting standard. Set both to your own policy and to what you agreed with each supplier. A line is flagged when it exceeds either threshold.

Enter at least one item to see the result.

How to read the result

Status What it means What to do
Price varianceInvoiced unit price exceeds the PO price beyond toleranceQuery with procurement before approving
Quantity varianceInvoiced quantity exceeds the ordered quantityConfirm the order was amended
Over-invoicedBilled for more than was receivedHold. Check the dock before paying
No goods receiptInvoiced with nothing recorded as receivedDid it arrive and go unrecorded?
No PO lineInvoice line with no matching order lineWho authorised it? Common for surcharges
Not invoicedReceived but not on this invoiceAccrue it — this is GRNI
Under-invoicedBilled less than received or orderedExpect a catch-up invoice later

The math it runs

price_variance = (invoice_unit_price − po_unit_price) × invoice_qty

quantity_variance = (invoice_qty − po_qty) × po_unit_price

Both on pre-tax unit prices, line by line. Never on document totals: totals include tax, cannot represent partial delivery or partial invoicing, and let two opposite errors cancel out into a figure that looks correct.

A line is flagged when it exceeds either the absolute or the percentage threshold. Comparison is strict, so a value exactly equal to the threshold sits inside tolerance. This is the same logic ininvoice runs in production.

Notes and limits

  • Lines are matched by item description, normalised for case and accents. If your PO says "Pallet 48x40 HT" and the invoice says "EUR pallet heat treated", this tool will treat them as different items. That mismatch is itself the most common real-world matching failure.
  • The tool handles one PO, one receipt and one invoice at a time. Consolidated invoices spanning several orders need to be checked per order.
  • Tax is out of scope by design. Enter pre-tax unit prices.
  • The example dataset is illustrative and uses US units and dollar formatting. Numbers can be entered as 1,234.56 or 1.234,56 — both parse correctly.
  • It checks one invoice against its own documents. It cannot tell you whether the same invoice already arrived last month — that is duplicate invoice detection, which needs your invoice history rather than a single document set.

Frequently asked questions

Is my invoice data uploaded anywhere?
No. The entire calculation runs in your browser in JavaScript. No line, price, quantity or supplier name is sent to any server. The tool area also carries an analytics exclusion so its contents are never captured.
Do I need an account?
No. It is free and needs no signup. The CSV export is generated locally in your browser too.
What tolerance should I use?
The defaults are examples, not a standard. Start loose enough that your team can clear the exception queue, then tighten. A tolerance nobody has time to action is the same as no control at all.
Can I use it for 2-way matching?
Yes. Leave the goods receipt table empty and it compares invoice against PO only. You will see "No goods receipt" flags, which is the honest result: without the receipt leg you cannot detect being billed for a short delivery.
What counts as a discrepancy here?
Five things: a unit price above the PO price beyond tolerance, a billed quantity above what was ordered, a billed quantity above what was received, a line on the invoice with no matching PO line, and a PO line received but not yet billed. Each is reported separately, because each one is a different conversation with a different person.
Will it find duplicate invoices?
No. This checker looks at one invoice against its own PO and receipt, so it has no way of knowing what else you have received. Finding the same bill twice needs your invoice history — see duplicate invoice detection software.

Stop doing this by hand

ininvoice runs this same discrepancy check on every supplier invoice — uploaded manually or collected from Gmail — against your POs and goods receipts, and surfaces only the exceptions.

Start free — 20 documents, no card

Free: 20 documents/month, no card · Starter 49 EUR/mo, 200 documents · Pro 149 EUR/mo, 750 documents