The PO ⇄ GRN ⇄ invoice three-way match, explained for site teams
Generic spend tools handle expenses. Construction handles commitments — and that's where the money quietly slips out the back door. Here's the boring discipline that catches it.
The three documents
Every euro spent on a building goes through three forms:
- PO (Purchase Order) — the commitment. "We will buy 2,400 kg of rebar from Sidenor for €4,128."
- GRN (Goods Received Note) — the proof. "We physically received 2,400 kg of rebar on site at 14:32, signed by A. Petrou."
- Invoice — the bill. "Pay us €4,128 for 2,400 kg of rebar."
If all three line up — same supplier, same item, same quantity, same price — finance approves the payment. That's the three-way match. When generic tools skip the GRN, the match collapses into a two-way "PO vs invoice", which only catches price errors, not phantom deliveries.
Where the €40k goes
In the AGC Construction quarterly audit that started Operis, here's what 90 days of mismatches looked like:
- Ready-mix concrete: ordered 38 m³, delivered 32 m³ (truck couldn't unload, never re-scheduled). Invoiced for 38 m³. €570 overpaid.
- Crane operator: PO for 16 h, actual 12 h (job finished early). Invoice came for 16 h. €220 overpaid.
- Formwork hire: 12 panels missing on return — supplier billed for "lost" panels that were on site B, not B. €840 overpaid.
Multiply that across 12 active sites and you arrive at the €30–50k per quarter the introduction promised. None of it is fraud. It's just the absence of a paper trail that ties what was ordered to what physically arrived.
Why generic ERPs miss it
Coupa, Procurify, Spendesk — all excellent products. They were built for office spend: laptops, software subscriptions, the lunch tab. In office spend, the invoice is the proof of delivery. There's no "the truck only unloaded part of it" scenario.
Construction is the opposite. Partial deliveries are the norm. Damage notes are weekly. Supplier price lists change mid-PO. The two-way match misses all of it.
The fix, in one paragraph
The foreman signs the GRN at the gate, before the truck leaves. Photo of the load, quantity received, damage notes. The GRN is bound 1:1 to the PO line — partial deliveries reduce the open balance instead of overwriting the order. When the invoice arrives, the system auto-matches against the GRN, not the PO. Mismatches surface in a list, not buried in a folder.
That's it. The technology is uninteresting. The discipline is everything.
"After three quarters on Operis, our finance manager said the most surprising thing wasn't the cost savings — it was that she stopped being the bottleneck."
The boring playbook
- Make GRN signature mandatory before the next PO can be cut to the same supplier. No GRN, no new PO.
- Set a price tolerance (e.g. ±2%) and quantity tolerance (e.g. ±1 unit) on auto-match. Anything outside surfaces for manual review.
- Push the matched invoice to your ERP via API — no re-keying. Re-keying is where 30% of human errors enter the ledger.
- Run a monthly "unmatched" report. It should be 0–3 lines, not a folder full of "we'll figure it out".
If your spreadsheet is the system of record for any of those three documents, you're probably the contractor we want to talk to. Book a demo — we'll walk you through a real PO flow on a test instance loaded with your activity codes.