Three-way matching: the complete guide to reconciling invoices, purchase orders and delivery notes
ininvoice performs three-way matching automatically: it cross-checks purchase order, delivery note and invoice line by line, unit price and quantity, straight from your inbox. It detects overcharges against agreed prices, incorrect quantities and duplicates. Without that cross-check, a company pays what the supplier invoices, not what it actually ordered and received.
If you are a CFO
Tolerances by sector, exception matrix, regulatory risk and supplier payment deadlines.
If you are a controller
Step-by-step variance formulas, worked examples in EUR and the five errors that show up most in SMEs.
If you are an SME CEO
See how touchless AP automates the full process and what the realistic monthly saving looks like.
Most of the duplicate payments and price creep that pile up in a company's accounts payable have a common cause: nobody cross-checked the documents before paying. Or if they did, they compared the invoice total with the PO total, which is a way of checking nothing.
Three-way matching is the process that closes that gap. This guide explains how it works step by step, with the exact formulas, real worked examples in EUR and the errors finance teams make most often when trying to implement it.
What three-way matching is
Three-way matching is the verification that three documents agree before authorising payment of a supplier invoice:
- The purchase order (PO) — what your company agreed to buy.
- The delivery note — what the supplier actually delivered.
- The supplier invoice — what the supplier is charging you.
If all three documents agree, the invoice is paid. If there is a discrepancy, the invoice is held and investigated. It is not rejected outright: only the lines with issues go for review. The rest can flow through.
In English it is known as three-way matching or 3-way matching. In other languages it is sometimes called invoice reconciliation, invoice-PO matching or PO-delivery-invoice cross-check. The concept is the same in every case: verify that what you ordered is what arrived and is what you are being charged, before any money leaves the bank.
What three-way matching is not
It is not bank reconciliation. Bank reconciliation cross-checks bank movements against the accounting ledger and happens after payment. Three-way matching happens before. Its goal is to decide whether to pay, not to confirm that a payment was made.
It is not checking the invoice total. Comparing the invoice total with the PO total is a minimal control. Two lines can offset each other: the supplier overcharges by 50 EUR on one and undercharges by 50 EUR on another, and the total still ties out. The error does not disappear; it is simply hidden. Three-way matching compares line by line.
Want to see line-by-line matching running on your inbox?
ininvoice automates three-way matching from your inbox. Book a demo and try it on your own invoices.
Why total-only matching does not work
A concrete example. Your company issues PO-2025-0884:
| Line | Product | Quantity | Unit price | Total |
|---|---|---|---|---|
| 1 | Cat6 UTP cable (305m reel) | 10 reels | 85.00 EUR | 850.00 EUR |
| 2 | RJ45 connector (box of 100) | 5 boxes | 18.00 EUR | 90.00 EUR |
| 3 | Cable tie 4.8x300 (bag of 100) | 20 bags | 4.00 EUR | 80.00 EUR |
PO total: 1,020.00 EUR
The supplier invoice arrives with a total of 1,020.00 EUR. A total-only control approves payment.
But the invoice lines look like this:
| Line | Product | Quantity | Unit price | Total |
|---|---|---|---|---|
| 1 | Cat6 UTP cable (305m reel) | 10 reels | 87.00 EUR | 870.00 EUR |
| 2 | RJ45 connector (box of 100) | 5 boxes | 16.00 EUR | 80.00 EUR |
| 3 | Cable tie 4.8x300 (bag of 100) | 20 bags | 3.50 EUR | 70.00 EUR |
Invoice total: 1,020.00 EUR
The total ties out perfectly. But line by line there are three discrepancies: the cable price went up by 2 EUR per reel (+20 EUR), the connector price dropped by 2 EUR per box (-10 EUR) and the cable tie price dropped by 0.50 EUR per bag (-10 EUR). Net zero. But the purchase contract specifies concrete prices per SKU. No variation is innocent until its origin is verified.
With a volume of 300 invoices per month, this kind of hidden offsetting can pile up thousands of euros in unauthorised overcharges before anyone notices.
The three documents: PO, delivery note and invoice
1. The purchase order: the agreed truth
The purchase order (PO) is the document your company creates when it agrees a purchase with a supplier. It includes what is ordered, in what quantity, at what unit price and under which terms. It is the starting point of the process.
If there is no formal PO, three-way matching is not possible. Companies that buy by phone, by informal email or with verbal orders have no reference to match against. The first step to implementing three-way matching is formalising purchase orders.
The PO can live in an ERP (SAP, Microsoft Dynamics, Holded, Sage), in a dedicated procurement system or in a disciplined spreadsheet. What matters is that it exists, that it is numbered and that the price and quantity data reflect what was agreed.
2. The delivery note: the received truth
The delivery note (also called goods receipt or GRN) confirms what actually came through the door. The warehouse or receiving department records what arrived, in what quantity and in what condition.
This is where quantity problems surface: 500 units were ordered, 480 arrived. Or they arrived in two partial deliveries of 300 and 200. Without a recorded delivery note, there is no evidence of what was received.
The delivery note closes the gap between what was agreed and what was delivered. Without it, reconciliation can only compare the invoice with the PO (two-way matching), which fails to detect phantom quantity issues.
3. The supplier invoice: what you are charged
The supplier invoice arrives by post, by email or through a supplier portal. It includes lines with description, unit price, quantity, taxes and total. It is what the supplier says you owe. It does not always match what was agreed or what was delivered.
A valid invoice for tax purposes must comply with the applicable invoicing regulations in your jurisdiction. Any mismatch between what the supplier invoices and what you have on record can affect the input tax you can deduct on your VAT return.
When the invoice arrives before the delivery note — which happens often on credit-line orders — the process does not stall. The invoice stays in a pending state until the delivery note confirms receipt. Only then can it be reconciled.
How line-by-line matching works
The core of three-way matching is two formulas applied to each invoice line, compared against the matching PO and delivery note lines.
The formulas always work on pre-tax unit prices. Never on header totals or gross amounts with VAT. The reason is simple: VAT can differ per line depending on product type, and gross totals are not directly comparable.
Price variance formula
price_variance = (invoice_price − po_price) × invoice_quantity
This formula detects whether the supplier is charging more (or less) per unit than agreed on the PO. It is multiplied by the invoiced quantity to obtain the real monetary impact.
Quantity variance formula
qty_variance = (invoice_quantity − delivery_note_quantity) × po_price
This formula detects whether you are being charged for more units than actually arrived. It is multiplied by the PO price (not the invoice price, to avoid amplifying a price error in the quantity calculation).
Worked example: PO-2025-1347
Purchase order:
| Line | Product | Quantity | Unit price (PO) |
|---|---|---|---|
| 1 | M8x40 stainless A2 bolt | 2,000 units | 0.12 EUR |
| 2 | M8 stainless A2 washer | 2,000 units | 0.04 EUR |
| 3 | M8 hex stainless A2 nut | 1,000 units | 0.08 EUR |
Delivery note:
| Line | Product | Quantity received |
|---|---|---|
| 1 | M8x40 stainless A2 bolt | 2,000 units |
| 2 | M8 stainless A2 washer | 1,900 units |
| 3 | M8 hex stainless A2 nut | 1,000 units |
Supplier invoice:
| Line | Product | Quantity | Unit price (INV) | Line total |
|---|---|---|---|---|
| 1 | M8x40 stainless A2 bolt | 2,000 units | 0.12 EUR | 240.00 EUR |
| 2 | M8 stainless A2 washer | 2,000 units | 0.04 EUR | 80.00 EUR |
| 3 | M8 hex stainless A2 nut | 1,000 units | 0.09 EUR | 90.00 EUR |
Line-by-line cross-check result:
| Line | Price variance | Quantity variance | Status |
|---|---|---|---|
| 1 | (0.12 − 0.12) × 2,000 = 0.00 EUR | (2,000 − 2,000) × 0.12 = 0.00 EUR | Matched |
| 2 | (0.04 − 0.04) × 2,000 = 0.00 EUR | (2,000 − 1,900) × 0.04 = +4.00 EUR | Quantity exception |
| 3 | (0.09 − 0.08) × 1,000 = +10.00 EUR | (1,000 − 1,000) × 0.08 = 0.00 EUR | Price exception |
Line 1 matches. Line 2 has a quantity discrepancy: the invoice charges for 2,000 washers but the delivery note only recorded 1,900. The potential overpayment is 4.00 EUR. Line 3 has a price discrepancy: the supplier raised the unit price by 12.5% above the PO. The potential overpayment is 10.00 EUR.
Total unjustified variance: 14.00 EUR on this PO. Multiplied by 200 similar POs per month, that is 2,800 EUR that can pile up without anyone spotting it.
Tolerances: what variance is acceptable
Not every discrepancy is worth holding an invoice over. If a line variance is 0.02 EUR, the cost of investigating it far exceeds the amount at stake.
That is why tolerances are configured. Thresholds below which variance is accepted automatically and the line is flagged as matched. If variance exceeds the tolerance, the line becomes an exception and goes to review.
The industry standard, according to the IOFM (Institute of Finance & Management), points to OR-mode tolerances: variance is accepted if it meets the percentage OR the absolute criterion, whichever is broader:
| Purchase type | Percentage tolerance | Absolute tolerance |
|---|---|---|
| Office supplies, consumables | 5% | 2.00 EUR per line |
| Equipment, machinery | 2% | 1.50 EUR per line |
| Raw material, critical components | 1% | 0.50 EUR per line |
| Professional services | 0% (fixed amount) | — |
In the earlier example, the line 2 quantity variance (4.00 EUR on 80.00 EUR = 5%) would be on the edge if the configured tolerance is 5%. The line 3 price variance (12.5%) exceeds any reasonable tolerance and triggers an exception.
OR-mode tolerance means that if variance is 0.03 EUR on a line with a 0.50 EUR absolute tolerance, it is accepted even though the percentage is high. This avoids stopping invoices over rounding on very low-priced items.
Each company tunes its tolerances based on sector, volume and risk appetite. What matters is that they are a conscious decision, documented and reviewed periodically — not the result of having no policy at all.
Exception matrix: who resolves what
When a line raises an exception, it has to reach the right person to be resolved. If every exception lands in the same inbox, they get mixed up and lost. If there is no assigned owner, they do not get resolved.
The standard is a routing matrix by discrepancy type:
| Discrepancy type | Owner | Maximum lead time |
|---|---|---|
| Price variance | Procurement | Immediate |
| Quantity variance (charged > received) | Warehouse / receiving | 24 hours |
| Missing delivery note | Receiving / logistics | 24 hours |
| Duplicate invoice | Automatic block + finance | Immediate |
| Unknown supplier | Procurement + finance | Immediate |
| Cancelled PO | Procurement | Immediate |
Without this matrix, exceptions die in the inbox. The finance controller spends the day forwarding emails to the warehouse asking whether the material arrived. The warehouse has no idea what they are talking about because they have no access to the invoicing system. The supplier calls because they have not been paid. Meanwhile, the supplier payment deadline keeps running.
Accounts payable automation turns this matrix into automatic routing. When a line raises an exception, the system notifies the assigned owner directly with full context: which invoice, which line, which PO, how big the variance is. No manual searching, no intermediate emails. More on exception handling in our exception management guide.
2-way, 3-way and 4-way matching: when to use each
| Type | Documents cross-checked | When to use it |
|---|---|---|
| 2-way matching | PO + invoice | Intangible services with no physical delivery: consulting, SaaS licences, insurance, subscriptions. There is no delivery note because there is no shipped good. |
| 3-way matching | PO + delivery note + invoice | Physical product purchases with goods receipt. Standard for most industrial, distribution, hospitality and construction companies. |
| 4-way matching | PO + delivery note + invoice + quality inspection | Sectors with strict quality requirements: pharmaceutical, food, aerospace, defence. Receiving the product is not enough; you must certify that it meets technical specifications. |
Most SMEs that buy physical products need 3-way matching. Pure services companies can operate with 2-way. Regulated sectors with mandatory inspection need 4-way. See the practical case in 4-way matching in pharma and chemistry.
Some suppliers send invoices for services that have no delivery note (fixed monthly maintenance, equipment rental). For these cases you can configure an exception rule: if the supplier is on the recurring-services list and the amount matches the contract, the invoice is approved without a delivery note. But this is not three-way matching; it is a separate approval rule that coexists with the main process.
For construction, with its progress certifications and multiple delivery notes per line item, the casuistry has its own quirks. The same is true for distribution, where partial deliveries are the norm. You can see the details in the guides on construction invoices and distribution invoices.
Common errors in SMEs
These are the five errors that show up most often when a finance team tries to do three-way matching without a formal process.
1. Matching the total, not the lines. The most frequent error. The total amount agrees and the team assumes everything is fine. As we saw earlier, the total can agree even when discrepancies between lines offset each other.
2. Excel as the matching system. A spreadsheet works for 30 invoices per month with two disciplined people. With 300 invoices, two people who take turns going on holiday and a shared file on the network drive, it is a system that is broken by design. The 3.6% data-entry error rate reported by the IOFM is not theory; it is what they measure in real departments that work this way.
3. Not recording partial deliveries. The PO is for 1,000 units. 600 arrive in a first shipment. The warehouse does not log the partial delivery note because they are waiting for the full delivery. The invoice for 1,000 units arrives. Without a delivery note saying only 600 arrived, the invoice gets paid in full. When the second shipment arrives, there is no open PO line to link it to.
4. Verbal orders with no written PO. The buyer agrees a special price over the phone with the supplier. The price is not captured anywhere in the system. The invoice arrives at the catalogue price. There is no reference to compare against. The finance team pays without knowing the price was different.
5. Tax mismatches on input VAT. When an invoice is paid for a quantity or price that differs from what was recorded on the PO, there can be a difference in the deductible input VAT. For companies subject to near-real-time VAT reporting, these differences flow through to the tax authority. An inconsistent matching process can generate discrepancies in the received-invoices register that later have to be reconciled with the regulator. Consult your tax adviser for the specific implications in your situation.
How ininvoice automates three-way matching
[Image: ininvoice reconciliation panel with line-level detail: available soon]
ininvoice automates three-way matching from the moment an invoice arrives in the inbox through to notifying the owner of every exception. The process has four phases:
Phase 1: ingestion. ininvoice reads your company inbox (Gmail or Outlook). When an invoice arrives as a PDF attachment, it is captured automatically. Manual upload is also supported if the supplier does not send invoices by email.
Phase 2: line-by-line OCR extraction. The OCR engine extracts every field of every line: description, quantity, unit price, tax, total. It does not extract only the invoice total. It extracts the full structure. Accuracy on standard documents is 95-98%. The remaining 2-5%, typically very degraded or handwritten invoices, requires manual review.
Phase 3: PO fuzzy matching. ininvoice looks up the matching purchase order in your system. If the PO number is on the invoice, it links directly. If not, it uses fuzzy matching: it compares supplier, date, line descriptions and amounts to find the most likely PO. If a high-confidence candidate is found, it is proposed for confirmation. If there is no strong match, the invoice is flagged as PO-less and routed to procurement. More detail on how approximate matching works in the fuzzy matching guide.
Phase 4: reconciliation and scoring. With the invoice extracted and the PO linked, ininvoice applies the line-by-line variance formulas. Lines within tolerance are reconciled automatically. Lines that exceed tolerance generate an exception. Every invoice receives a 0-to-100 score that summarises its risk level: variances, new supplier, PO-less invoice, possible duplicate. High-risk invoices appear first in the review queue. More on the scoring system in how risk scoring works.
The result is that invoices that agree get approved with no human intervention. The ones with issues arrive at the right owner with full context already attached. The finance team stops being the bottleneck and shifts to managing exceptions, which is the work that actually adds value.
ininvoice is not an ERP and does not replace the accounting system. It is the reconciliation layer between the supplier inbox and the ERP. Approved data is exported to Holded, Sage, A3 and other systems as clean accounting entries. You can see the full flow on the features page.
249 EUR/mo. Instant activation. No commitment.
ininvoice automates three-way matching from your inbox. No implementation, no consultant, no ERP swap.
Get startedWhat it costs not to have three-way matching
APQC (American Productivity & Quality Center) publishes AP productivity benchmarks based on data from thousands of companies. According to its reference report, accounts payable departments that operate manually process an average of 6,082 invoices per employee per year. Those that have automated the process reach 23,333 invoices per employee per year: a 3.8x multiplier.
Translated into euros: if an AP employee costs 28,000 EUR per year (gross median salary for this profile), the cost per invoice manually is 4.60 EUR in headcount time alone. With automation it drops to 1.20 EUR. With 300 invoices per month, the annual delta is 12,240 EUR.
And that is before the errors.
According to the IOFM, the duplicate payment rate in non-automated departments is between 0.1% and 0.5% of purchase volume. For a company that pays 2 million EUR per year to suppliers, that is between 2,000 and 10,000 EUR per year in duplicate payments, most of which are recovered late, with processing cost, or not recovered at all.
There is one cost that does not show up in any benchmark: the time the finance manager spends chasing delivery notes, asking the warehouse whether the 500 or only 450 units arrived, calling the supplier to ask for the duplicate of an invoice. That time is not measured, but it takes 2 to 4 hours per day in departments with 300 or more invoices per month.
Implementing three-way matching without changing ERP
The question finance leaders ask most is: «Do we have to change our ERP to do three-way matching?» The answer is no.
Three-way matching needs three types of data: purchase orders, goods-receipt delivery notes and supplier invoices. Those data can live in the current ERP (SAP, Microsoft Dynamics, Holded, Sage, A3), in a dedicated procurement system, in spreadsheets or even in scanned documents. What matters is that they exist and are accessible.
The minimum process to get started:
- Formalise the POs. If POs do not exist as numbered documents with price and quantity, that is where you start. Without a PO there is no reference.
- Log receipts. The warehouse or receiver has to confirm in writing what arrived. It can be a signed delivery note, a note in the system or a confirmation by email with quantity and date.
- Funnel the invoices. All supplier invoices must land in the same place: an invoices inbox, a portal or a dedicated mailbox. The process breaks down if invoices arrive in ten different inboxes.
With those three elements in order, the matching tool does the rest. ininvoice connects to Gmail or Outlook to read incoming invoices. POs are loaded from your existing system (CSV export, API or manual upload). Delivery notes are entered into the system or confirmed by email from receiving. There is no need to migrate historical data or change how the ERP operates. ininvoice acts as a middle layer between the supplier inbox and the accounting system.
For companies that already run SAP or Microsoft Dynamics with a fully-featured AP module, the decision is different: matching can live inside the ERP. But implementing and configuring that module takes months and a consulting team. For mid-sized companies, a specialised tool with instant activation is usually the practical option. You can see the differences in the AP automation software comparison.
Get started this week
249 EUR/mo · up to 300 invoices/mo · no commitment · no implementation fee · instant activation.
Book a demo12 frequently asked questions about three-way matching
- What happens if the invoice arrives before the delivery note?
- The invoice is held in a delivery-note-pending state. It is not rejected or returned to the supplier. When the delivery note confirms receipt, the system resumes the cross-check automatically. If the delivery note does not arrive within a configured window, an alert is sent to the receiving department.
- Does it work with invoices that have no PO number?
- Yes, with limitations. The system tries to identify the PO by supplier, amount, date and line descriptions. If match confidence is high, it is proposed for confirmation. If there is no clear candidate, the invoice is routed to procurement to assign the PO manually. PO-less invoices are the main source of exceptions in teams without a formal PO process.
- What is the default tolerance?
- The ininvoice default tolerance is 2% OR 1.50 EUR per line (OR-mode). Each company can configure it by supplier, by product category or globally. There is no universally correct tolerance: it depends on sector, volume and purchase mix.
- How are duplicates detected?
- A duplicate is detected by cross-referencing four fields: invoice number, supplier tax ID, total amount and a date window (±30 days). If two invoices match across these four fields, the second one is blocked automatically and finance is notified. The duplicate detection system works even when the supplier changes the invoice number format between sends.
- How accurate is the OCR?
- On digitally generated PDF invoices, line-by-line accuracy is 95-98%. On well-scanned invoices, between 90% and 95%. Very degraded, handwritten or non-standard layouts (some construction, hospitality or import formats) may require manual review. ininvoice flags these invoices with a low-confidence indicator on the extraction.
- What about partial deliveries?
- Each partial delivery note is recorded against the original PO. The invoice can only be reconciled against lines for which there is a confirmed delivery note. If the supplier invoices the full amount before delivery is complete, the system detects the quantity discrepancy and raises an exception until the second shipment arrives and is recorded.
- Is three-way matching mandatory by law?
- No regulation explicitly requires three-way matching. But internal control frameworks (COSO, SOX for listed companies or subsidiaries of US groups), external audits and compliance requirements from large customers treat it as a standard practice. Any internal or external auditor expects to see it in companies with meaningful purchase volume.
- How does it affect VAT reporting and e-invoicing?
- Near-real-time VAT reporting regimes require received invoices to be reported to the tax authority within a few days of being booked. A fast and accurate matching process makes it easier to meet that window. As mandatory e-invoicing rolls out, price and quantity data will be structured digitally from the source, which makes automated matching even more precise. Consult your tax adviser on the specific implications for your situation.
- What is the difference with two-way matching?
- Two-way matching only cross-checks the invoice against the PO. It does not include the delivery note. It is appropriate for services with no physical delivery. The risk of two-way is that it does not detect quantity discrepancies: you can end up paying for goods that did not arrive. For tangible purchases, three-way matching is the minimum standard.
- Does it work with e-invoices (FacturaE, Peppol)?
- Yes. E-invoices in FacturaE (XML) or Peppol BIS format already have structured data. OCR is not required. ininvoice can read these formats directly and matching is more precise because the data does not depend on OCR interpretation.
- Can it integrate with Holded, Sage or A3?
- ininvoice exports approved invoice data in formats compatible with Holded, Sage 50/200 and A3 ERP. It does not compete with the ERP; it sits in front of it. The accounting entry reaches the ERP already reconciled and approved, with no further review needed. Native integrations are in development.
- How long does activation take?
- ininvoice activation is plug and play. You connect your inbox and it starts working. There is no implementation project, no mandatory training and no setup fee. Historical POs can be loaded by CSV or manually for the active ones. The system starts processing invoices from day one.
Related content
- Read this guide in Spanish
- Stampli vs ininvoice (comparison)
- Supplier invoice control: 2026 guide
- Supplier invoice automation: 2026 guide for SMEs
- Mandatory e-invoice receipt 2026
- E-invoicing from the receiver side (2027)
- OCR for supplier invoices: line-by-line, no templates
- Comparisons with Tipalti, Stampli, Yooz, Bill, Coupa, Esker, Dost
- Fuzzy matching: how to find the PO even when data does not match exactly
- Exception management in accounts payable: practical guide
- How to detect duplicate invoices before they get paid
- Invoice risk scoring: how it works and what it is for
- OCR for invoices: accuracy by format and where it breaks
- View all AP blog articles
- ininvoice features
Automate three-way matching from your inbox
Connect Gmail or Outlook. ininvoice reads the invoices, finds the PO, cross-checks the delivery note and sends you only the exceptions that need attention.
Get started249 EUR/mo · No commitment · No implementation fee