Why three-way matching is more complex in practice than it appears
On paper, three-way matching is clear: the purchase order states what you ordered, the supplier confirmation states what is being delivered, and the invoice states what you owe. If all three align, you approve. If something does not, it goes to a staff member. What you see in manufacturing companies is that exceptions are the norm. Suppliers use their own item codes that do not map one-to-one to your internal material numbers. The purchase order has three lines, the invoice has five, and one of those lines covers an express delivery surcharge that never existed in the system. The result: a match rate that stays low, and a staff member manually clearing exceptions every week, which is exactly the work you wanted to eliminate.
Lesson 1: item codes are not a universal language
The first obstacle is the item code. Your ERP uses internal material numbers. The supplier invoices using its own codes, sometimes accompanied by a description in its own language. A direct comparison will always fail. The solution is not to force an exact match, but to build a translation table: a mapping between the supplier's item numbers and your internal numbers. That table does not exist anywhere when you start; it has to be extracted from historical purchase orders, order confirmations, and previous invoices. This is a one-time task that must be completed at the start of the project, not midway through. Make sure the table is maintained whenever a supplier changes its product range or introduces a new item. If the translation table is not kept current, the number of exceptions grows steadily, and no one notices until the backlog is substantial.
Lesson 2: partial deliveries and consolidated invoices break the automated pattern
Partial deliveries are common in manufacturing. A purchase order for one thousand units is fulfilled in three shipments, but the supplier sends a single invoice at the end of the month covering everything shipped that month. Sometimes the reverse happens: one delivery, but three invoice lines because the supplier wants to trace different batch numbers. Any system built around one-to-one matches fails here systematically. What works is implementing partial matching logic, where each incoming invoice is checked against which portion of the open purchase orders it covers. This requires a sound accounting structure on the front end, not just smart software on the back end. If a purchase order is not correctly marked as partially received in the ERP, no matching algorithm will work. The process design and data entry at the front end determine whether the automation at the back end functions.
Lesson 3: price differences from currency and surcharges are the silent killers
The third lesson concerns prices. A purchase order is created in euros based on the exchange rate of that day. The supplier invoices in dollars, and payment is processed three weeks later. That gap introduces a currency difference. On top of that come fuel surcharges, packaging costs, or tolls that were not in the original order but do appear on the invoice. A system that only approves on an exact price match will accumulate a large stack of exceptions. The practical approach: define an acceptable tolerance band for price deviations per supplier category and per type of surcharge. Deviations within that band are approved automatically; deviations outside it are routed to the buyer with a clear explanation of the cause, not just the size of the discrepancy. That last point is critical: if the buyer can see at a glance that the difference stems from a currency correction, the decision is fast. If they have to investigate the source themselves, the time saving disappears.
What do you need to arrange upfront to make automated invoice matching possible?
Automating three-way matching does not start with invoice processing; it starts with the quality of your purchasing process. Purchase orders must be complete and unambiguous: correct supplier item numbers, clear quantities, agreed prices including any applicable surcharges, and accurate recording of partial receipts. Without that foundation, you are only shifting the manual work to a different point in the process. It is worth building a short profile for each supplier: how they invoice, what surcharges they charge, whether they use their own codes, and whether they always deliver in full. With that knowledge, you can configure matching rules per supplier rather than applying one generic rule to everyone. This requires more preparation, but it produces a sustainably higher match rate. AI tooling, such as a document processing layer that reads and structures invoices, helps with extraction. But the decision rules and process design are human work, and those must be in order first.
