3-Way Match for Construction Projects (Before Xero): Stop Bad Invoices at Source

September 11, 2025

Xero purchase order approval is straightforward, but construction needs reliable PO matching too. Use a simple 3-way match — PO, delivery/valuation, and invoice — to stop bad bills before they reach accounts. This approach reduces disputes, speeds month-end, and protects project margins.

If you want to see how our software works with Xero purchase orders, visit our Xero construction purchase order software page – Xero construction purchase order software. It explains the integration between Planyard and Xero for construction purchase orders.

How purchase orders work in Xero (quick overview)

  • Create & send POs. In Business → Purchase Orders, you can raise purchase orders from templates, email them to suppliers and track their status.
  • Submit & approve. Submit one or many POs for approval and approve in bulk from Awaiting approval.
  • Convert to bills later. When the goods/services are received and signed off, convert the approved PO to a trackable bill for AP and payment.
  • Important limitation: POs are off-ledger—they don’t hit the general ledger or the tracking summary until copied to a bill. Any tracking you add on a PO is mainly to save time when you create the bill later.

Your options for PO control (and what each really covers)

Native Xero POs (built-in)

Great for creating, approving and converting POs to bills—all inside Xero. Matching an invoice back to the approved PO is typically a manual, line-by-line check performed before posting.

Approvals add-ons (e.g., ApprovalMax)

Useful for multi-step routing and sign-off of bills and documents. However, if the actual PO agreement still lives in Excel, approvals aren’t anchored to the true contract scope/rates—so you can still approve a bill that doesn’t match the original spreadsheet PO. (General capability note; use to strengthen approvals, not to replace project-side contract control.)

AP capture & PO-match tools (e.g., Dext Prepare)

These can auto-extract PO numbers from invoices and try to match against open POs fetched from Xero (daily sync; last 6 months), then publish a note indicating matched items. There are API limitations for Xero, so matching isn’t identical to doing everything in-ledger.

Reality check (downsides of the tools)

Many contractors still draft or maintain the PO/subcontract in spreadsheets. That creates version sprawl, weak audit trails, and no hard link between PO, delivery/valuation, and invoice, regardless of which approval or capture app you use.

What none of these provide: budgeting & commitments

Neither native Xero POs nor the common PO/approval add-ons provide project budgeting or commitment accounting out of the box. Because POs are off-ledger until they become bills, you can’t see committed vs remaining budget in your GL/tracking reports—only actuals after the bill is created.

That gap is why construction teams still end up with budget spreadsheets and late surprises. A proper setup ties POs/subcontracts, deliveries/valuations, invoice capture and approvals to a live project budget, then publishes only the approved, fully coded bill to Xero. (We’ll cover that workflow next, and then show how Planyard closes the budgeting/commitments gap while keeping Xero as the ledger.)

Why “before Xero” is where the control lives

In construction, invoices should match the commitment (PO/subcontract) and the period’s evidence (delivery note or valuation) before they ever reach the ledger.

Once a bill is in accounting, reconciliation becomes slower and errors are more difficult to correct. Xero can create, submit and approve purchase orders (single or in bulk) and later convert approved POs to bills, which is ideal once your upstream checks are done.

What a 3-way match looks like on a job

  • PO / Subcontract — agreed scope, cost codes and rates (your commitment).
  • Delivery note / QS valuation — what was received or certified this period.
  • Invoice — must agree line, rate and quantity with the two items above before it’s approved and copied to Xero as a bill. After approval, converting the PO to a trackable bill is straightforward.

Where Xero POs fit (and what stays manual)

Xero purchase order approval (strengths)

Create POs from templates and references; submit/approve one or many; manage status from Awaiting approval. Later, convert POs into bills to pay.

Xero PO matching (what teams still do themselves)

Matching a supplier invoice to an approved PO is often a manual, line-by-line comparison performed before posting. That’s why many businesses bring in AP tools with PO match features (e.g., Dext Prepare), which can auto-extract PO numbers and sync available open POs from Xero—albeit with noted API limitations for full parity.

Note: Xero POs don’t hit the general ledger or the tracking summary until copied to a bill, so commitments are invisible in GL-level reporting by design. Code POs consistently so the converted bill inherits the right accounts/tracking.

The real culprit: spreadsheets around the PO

Even with good tools, many construction teams still manage the actual PO agreement in Excel. That’s where most problems begin:

  • Version sprawl: multiple PO files per package; no single source of truth.
  • Unapproved scope creep: the invoice becomes the change order because the spreadsheet wasn’t updated.
  • Quantity creep: partial deliveries aren’t recorded; later invoices overstate m²/hr.
  • Rate drift: suppliers invoice at slightly different rates than the PO tab.
  • Duplicate bills: same PDF, different filename; no system-level duplicate check.
  • Missing links: no hard tie between PO ↔ delivery note/valuation ↔ invoice; reviewers rely on email threads.
  • Weak audit trail: you can’t prove what was approved, by whom, and against which budget line.
  • Commitment blindness: finance can’t see committed vs remaining balance until bills are posted (POs don’t post to GL/tracking).
Office worker stressed about the paperwork around him

Construction-specific controls that stop bad invoices at source

Make the PO the contract, not a spreadsheet

Use numbered POs with clear project and cost codes on each line; include delivery location and reference fields that make later searches trivial.

Capture the period’s evidence

Keep delivery notes or QS valuations attached to the purchase package. Treat partial receipts as partial draws against the same PO.

Enforce line-level checks before posting

Compare line, rate, quantity from the invoice to the commitment and evidence. Post only when matched within tolerance; otherwise, query.

Keep Xero as the system of record

Once matched, convert the PO to a bill or publish an approved bill to Xero with correct accounts/tracking—this is where PO coding pays off.

Use add-ons wisely

  • Dext Prepare (PO Match): extracts PO numbers from invoices and checks against open POs in Xero (daily sync / last 6 months), then posts with a note showing matched items. Be aware of Xero API limits that mean the match experience isn’t identical to doing it all inside the accounting system.
  • ApprovalMax: often used to strengthen approval routing for bills; however, if the PO itself lives in Excel, approvals still aren’t tied back to the actual contract terms. (Use a proper PO source of truth first.)
TopicExcel PO + email approvalsNumbered PO + evidence + matched bill into Xero
Single source of truthMultiple spreadsheet versions; hard to know which PO is current.One numbered PO per package; clear references for search and traceability.
Matching & exceptionsManual, line-by-line checks; rate/quantity drift slips through.Compare PO ↔ delivery/valuation ↔ invoice; only matched bills proceed. When satisfied, convert the PO to a trackable bill in Xero.
Approvals & auditEmail trails; unclear who approved what/when.Submit one or many POs for approval; approve from Awaiting approval for a clean audit trail.
Budget & commitments visibilityCommitments invisible to finance until invoices post; spreadsheets try to fill the gap.Understand that POs are off-ledger (not in GL or tracking summary) until copied to a bill—so use consistent coding to ensure the converted bill lands correctly.
Data entry & duplicatesRe-keying into accounting; duplicate PDFs slip by.Use a single PO number and attach evidence; convert to bill instead of re-typing to reduce errors and duplicates.
Month-end speedSlow reconciliations; disputes after posting.Faster close: matched, coded bills flow through; POs converted to bills only when checks pass.

Xero purchase order approval: quick playbook (for site & finance)

  • Raise the PO in Xero with clear references; leverage templates for repeat packages.
  • Submit/approve individually or in bulk; keep statuses tight to avoid untracked drafts.
  • Attach delivery notes/valuations to the package you review against.
  • Convert only once 3-way match is satisfied; the bill inherits the coding you set on the PO.

Example: steel package, Period 4

Context: You’re buying steel beams with fixings on a PO that’s coded to the project and cost codes. Period-end receipts and a QS valuation are in.

PO (commitment):

  • Line 1 — Beams, unit rate £800
  • Line 2 — Fixings, unit rate £40
  • Both lines reference the correct project + cost codes.

Evidence this period:

  • Delivery notes: 42 beams received
  • QS valuation: 40 beams certified as installed

Supplier invoice received:

  • 45 beams billed (qty variance)
  • Fixings rate increased to £45 (rate variance)

3-way match checks (PO ↔ delivery/valuation ↔ invoice)

  • Quantity rule: Bill to the lowest of PO remaining, delivered, and valued for the period. → 40 beams billable now; 2 delivered but not yet certified are carried forward; 3 over-billed are rejected.
  • Rate rule: Must match the PO rate unless there’s an approved variation. → Fixings reset to £40.
  • Scope rule: Only lines on the PO may be billed; any extras require a variation.
Item – BeamsPO qty/rate
Bill to the lowest of delivered/valued / PO remainingQty: — · Rate: £800Qty: — · Rate: £40
Delivered (this period)4242
Valued / certified (this period)4040
Invoiced4545 @ £45
Quantity ruleBill to the lowest of delivered/valued/PO remainingBill to the lowest of delivered/valued/PO remaining
Quantity approved (this period)4040
Quantity carry-forward22
Variance in rateNoYes (invoice £45 vs PO £40)
Rate approved£800 (PO rate)£40 (reset to PO rate)
Approved this period (amount)40 × £800 = £32,00040 × £40 = £1,600
Avoided overpayment (savings from incorrect billing)Qty: 5 × £800 = £4,000

Rate: £0

Total: £4,000
Qty: (45−40) × £45 = £225

Rate: 40 × (£45−£40) = £200

Total: £425
Special actionsAsk supplier to reissue for 40 @ £800 (reject 5)Ask supplier to reissue for 40 @ £40 (fix qty and rate)

Resolution & posting:

  • Supplier issues a revised invoice for 40 beams @ £800 and 40 fixings @ £40 with delivery/valuation attached.
  • The approved bill is then converted in Xero (or published to Xero) for payment, inheriting the correct accounts, tracking, and attachments.
  • The PO balance updates automatically for the remaining quantities; the two delivered-not-certified units roll into next period’s valuation, and the rejected over-bill is closed out.

Where this lands in practice (and the easy button)

If your POs live in Excel, you’ll keep fighting rate drift, quantity creep, and weak audit trails. The cure is a project-side, construction-grade 3-way match that ties POs/subcontracts, delivery/valuations, invoice capture and approvals together—then sends only approved, fully coded bills to Xero.

PainExcel POsPlanyard fix (project-side 3-way match)Result in Xero
Rate driftInvoice rates change unnoticedCompare invoice line-rates to PO/subcontractCorrect rates only
Quantity creepBilled qty > delivered/certifiedCheck against delivery notes/QS valuationsCertified quantities only
Unapproved spendNo valid PO referenceBlock approval without PO/variationNo rogue bills posted
Duplicate invoicesSame PDF paid twiceDetect duplicates via PO tie-backDuplicates stopped early
Weak audit trailEmail approvals, no evidenceCentralised approvals with attachmentsClear, auditable bills

That’s exactly what Planyard does for contractors: automated invoice capture and 3-way match against purchase orders/subcontracts, with clear exceptions and approvals, before publishing clean bills to Xero.

Frequently asked questions

We've got your questions covered. If you can't find the answer below, then feel free to contact us via the chat.

Yes—create POs, then submit and approve one or many from Awaiting approval.

After approval, you can convert a PO into a bill so nothing gets missed in payables.

By design, Xero doesn’t include POs in the general ledger or tracking summary; they’re off-ledger until copied to a bill.

Yes—Planyard adds construction-specific 3-way match (PO/subcontract ↔ delivery/valuation ↔ invoice) and live commitments; it syncs only approved, fully coded bills to Xero. Dext Prepare can auto-extract PO numbers and match against open POs in Xero (with some API limitations). ApprovalMax strengthens multi-step approvals for bills. Whichever you choose, avoid keeping the actual PO in Excel, or you’ll still face rate/quantity drift and weak audit trails.

Planyard provides project-side control—POs/subcontracts, evidence, invoice capture, exceptions and approvals—then publishes clean bills to Xero so accounting stays in Xero while budget visibility and matching happen upstream.

Upload your project budget and track financial progress in real-time

No credit card required. No sales or IT support needed.