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 / SKU | Qty | Unit price | Actions |
|---|
2. Goods receipt
What actually arrived at the dock.
| Item / SKU | Qty received | Actions |
|---|
3. Invoice
What the supplier is billing you for.
| Item / SKU | Qty | Unit price | Actions |
|---|
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.
- PO total
- —
- Received total
- —
- Invoiced total
- —
- Over-invoiced
- —
- Exceptions
- —
- Severity
- —
| Item | PO qty | PO price | Received | Inv. qty | Inv. price | Price var. | Qty var. | Status |
|---|
You just checked 0 lines by hand.
ininvoice runs this same cross-check automatically on the invoices arriving in your inbox, against your purchase orders and goods receipts, and tells you only about the lines that do not agree.
Automate this check →How to read the result
| Status | What it means | What to do |
|---|---|---|
| Price variance | Invoiced unit price exceeds the PO price beyond tolerance | Query with procurement before approving |
| Quantity variance | Invoiced quantity exceeds the ordered quantity | Confirm the order was amended |
| Over-invoiced | Billed for more than was received | Hold. Check the dock before paying |
| No goods receipt | Invoiced with nothing recorded as received | Did it arrive and go unrecorded? |
| No PO line | Invoice line with no matching order line | Who authorised it? Common for surcharges |
| Not invoiced | Received but not on this invoice | Accrue it — this is GRNI |
| Under-invoiced | Billed less than received or ordered | Expect 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.56or1.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.
Related reading
- Invoice matching software
- Invoice reconciliation software
- Three-way matching: complete guide
- GRNI reconciliation
- How to calculate price variance
- Invoice exception management
- Three-way matching Excel template — the same comparison as a downloadable spreadsheet
- Duplicate invoice detection software — the check this tool cannot do
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 cardFree: 20 documents/month, no card · Starter 49 EUR/mo, 200 documents · Pro 149 EUR/mo, 750 documents